Чому я отримую помилку "сумнівного права власності на файл", коли 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)?
Чи є простий спосіб взяти існуючий файл і змінити його право власності замість того, щоб відтворювати файл?
Може хтось пояснить, чому ця помилка трапляється?


Що дає ls -l для /Library/LaunchAgent/foo.plist
user151019

1
@Mark: він дає наступне:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Senseful

Можна також примусити loading ( -F).
kenorb

Відповіді:


51

Якщо пліст належить корінню та його записує інший користувач, крім 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 не є власником файлу, No sudoне потрібен. Я бігав без, sudoі це спрацювало чудово.
Бібхас

14

З опису підкоманди startman (1) manpage на сторінці load:

Зауважте, що файли конфігурації кожного користувача (LaunchAgents) повинні належати користувачеві, який їх завантажує. Усі загальносистемні демони (LaunchDaemons) повинні володіти коренем. Файли конфігурації не повинні підлягати груповому або світовому запису. Ці обмеження діють з міркувань безпеки, оскільки дозволяють спрацьовувати робочий файл для запущеного файлу конфігурації, можна вказати, який виконуваний файл буде запущений.

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) не "групувати" або "інше ”Для запису (тобто chmod go-w)

1 Немає названих труб, блоків / символів спеціальних вузлів пристроїв, локальних розеток домену тощо.


Ваш файл, ймовірно, належить користувачеві адміністратора, оскільки ви говорите, що повідомлення не отримуєте при вході в систему як цей користувач (ім'я шляху у цьому випадку належить користувачеві, який викликає посилання).
Щоб ім’я шляху працювало для інших користувачів, воно повинно бути власником root.

Щоб це зробити, зробіть:

sudo chown root /Library/LaunchAgent/foo.plist

1

Дякую за відповідь (зміна власника на root) - це все, що мені потрібно.

Щоб зробити це трохи більше, ніж повідомлення про "я теж" ... Я потрапив сюди через звичний шлях: я отримував "Цей API може бути використаний лише в процесі, запущеному в рамках сесії Aqua" для запуску демона. Пошук відповіді на це призвів до того, що Apple із технікою щодо демонів і агентів пояснив, як вирішити помилку "Aqua session", але це не призвело до "сумнівної власності". Ось як я потрапив сюди, де було вирішено моє остаточне питання.

Можливо, додавання всього цього до цієї дискусії призведе до того, що деяка пошукова система прив’яже цю сторінку до однієї з попередніх проблем, тим самим заощадивши якийсь майбутній авантюрист деякий час.


Зауважте, це повинен бути коментар, а не відповідь.
studgeek

1
Я б прокоментував, але мої репутаційні бали були недостатньо високими. (Чи не здається назад, що можна "відповісти" низькою репутацією, але не коментувати?)
Matt Strange

-2

для файлу в ~ / Бібліотеці / LaunchAgent, що належить користувачеві, а не root dont sudo, якщо вам доведеться змінити право власності, оскільки ви завантажуєте його від root користувача


-3

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.