Почему я получаю ошибку «сомнительное владение файлом», когда Launch Agent запускает мой файл .plist?

54

У меня есть Launch агент настроен для запуска .plist файла, например: /Library/LaunchAgent/foo.plist. Внутри этого .plist он настроен на запуск во время LoginWindowи Aqua.

Когда я пытаюсь запустить свой компьютер и попасть на экран входа в систему, этот список должен запуститься, но вместо этого выдает следующую ошибку (в консоли):

launchctl: сомнительное владение файлом (пропуск): /Library/LaunchAgents/foo.plist

Когда я пытаюсь войти в систему без учетной записи администратора, он выдает точно такое же сообщение об ошибке. Когда я пытаюсь войти с учетной записью администратора, он работает нормально.

Честно говоря, я не знаю много о привилегиях и разрешениях Mac OS X.

Чтобы создать файл, я открыл его в emacs, с sudoв учетной записи администратора (например , с помощью suкоманды с другой учетной записи не имеет права Судо) и затем сохранить его.

Какую учетную запись мне нужно использовать для создания файла, чтобы он работал для всех пользователей?
Нужно ли использовать команду sudo?
Нужно ли менять права доступа к файлу (например, использовать chmod)?
Есть ли простой способ взять существующий файл и изменить его владельца вместо того, чтобы создавать файл заново?
Может кто-нибудь объяснить, почему эта ошибка происходит?

Senseful
источник
Что дает ls -l для /Library/LaunchAgent/foo.plist
user151019 18.10.10
1
@Mark: это дает следующее:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Чувственный
Также возможно форсировать загрузку ( -F).
Кенорб

Ответы:

51

Если plist принадлежит пользователю root и доступен для записи не пользователю root, это проблема безопасности.

Вы можете изменить владельца на root с sudo chown root <filename>помощью прав доступа sudo chmod 644 <filename>(4 для доступа на чтение, 2 для доступа на запись, 1 для доступа на выполнение, добавлено. Первый номер для владельца, второй для группы, третий для каждый.)

Михель де Маре
источник
Это работает. Я просто запутался, почему мне пришлось сменить владельца на root. Является ли пользователь root пользователем LaunchAgents?
Чувственный
1
Да, я так думаю.
Мишель де Маре
1
Я знаю, что это старый пост, но это отличный ответ! Я изменил разрешения на /system/library/launchdaemons/com.apple.mdnsresponder, чтобы попробовать исправление, рекомендованное Apple, но я получу ошибку, упомянутую выше, при попытке загрузить ее позже. Смена владельца и разрешений, как описано выше, была единственным способом вернуть мое интернет-соединение. Спасибо!
Столкнулся с тем же сейчас и решил. Я полагал, что владелец файла сильно извинился launchctl. Я создал файл как мой обычный пользователь и выполнял с sudo. Отсюда и ошибка. Поскольку root не является владельцем файла, нет sudoнеобходимости не было. Я бежал без, sudoи это работало нормально.
Бибхас
14

Из launchctl (1) страницы руководства «s описание loadподкоманды:

Обратите внимание, что файлы конфигурации для каждого пользователя (LaunchAgents) должны принадлежать пользователю, загружающему их. Все общесистемные демоны (LaunchDaemons) должны принадлежать пользователю root. Конфигурационные файлы не должны быть доступны для групповой или мировой записи. Эти ограничения действуют по соображениям безопасности, поскольку возможность записи в файл конфигурации launchd позволяет указать, какой исполняемый файл будет запущен.

В launchctl есть несколько «сомнительных…» сообщений. Запуск программ код 10.6.7 (к примеру) имеет три таких сообщений в его launchctl.c(см функции path_goodness_check).

  1. Dubious permissions on file (skipping): <pathname>
  2. Dubious ownership on file (skipping): <pathname>
  3. Dubious path. Not a regular file or directory (skipping): <pathname>

Чтобы избежать этих сообщений, путь должен быть (# 3) обычным файлом или каталогом 1 (или символической ссылкой на один), который (# 1) принадлежит пользователю root или вызывающему пользователю и (# 2) не «group» или «other» Записываемый (то есть chmod go-w).

1 Нет именованных каналов, блочных / символьных узлов специальных устройств, локальных доменных сокетов и т. Д.


Ваш файл, вероятно, принадлежит пользователю с правами администратора, поскольку вы говорите, что не получаете сообщение при входе в систему от имени этого пользователя (в этом случае имя пути принадлежит вызывающему пользователю).
Чтобы имя пути работало для других пользователей, оно должно принадлежать пользователю root.

Для этого сделайте:

sudo chown root /Library/LaunchAgent/foo.plist
Крис Джонсен
источник
1

Спасибо за ответ (смена владельца на root) - это все что мне нужно.

Чтобы сделать это немного больше, чем пост «Я тоже» ... Я попал сюда запутанным путем: я получал сообщения об ошибках «Этот API может использоваться только процессом, выполняющимся в сеансе Aqua» для launchdaemon. Поиск ответа на этот вопрос привел меня к техническому замечанию Apple по демонам и агентам, в котором объяснялось, как устранить ошибку «Aqua session», но у меня остались проблемы с «сомнительным владением». Вот как я попал сюда, где мой последний вопрос был решен.

Возможно, добавление всего этого к этому обсуждению заставит поисковую систему связать эту страницу с одной из предшествующих проблем, тем самым сэкономив время будущему искателю приключений.

Мэтт Стрендж
источник
Обратите внимание, это должен быть комментарий, а не ответ.
Studgeek
1
Я бы прокомментировал, но мои очки репутации были недостаточно высоки. (Не кажется ли обратным, что можно «отвечать» с низкой репутацией, но не комментировать?)
Мэтт Стрэндж,
-2

для файла в ~ / Library / LaunchAgent, принадлежащего пользователю, а не root, dont sudo, если вам нужно изменить владельца, так как вы загружаете его от пользователя root

радха
источник
-3

Это то, что происходит, когда люди не знают, как sudoработает. Чтобы отключить службы, которые находятся в файлах, принадлежащих вашему пользователю, просто позвоните launchtlбез sudo.

Максимо Печ
источник