Dlaczego pojawia się błąd „wątpliwe prawo własności do pliku”, gdy Agent uruchamiania uruchamia mój plik .plist?

54

Mam Uruchom agenta skonfigurowany do uruchomienia pliku .plist na przykład: /Library/LaunchAgent/foo.plist. Wewnątrz tego .plist jest ustawiony do działania podczas LoginWindowi Aqua.

Gdy próbuję uruchomić komputer i przejść do ekranu logowania, ten plist powinien się uruchomić, ale zamiast tego wyświetla następujący błąd (w konsoli):

launchctl: Wątpliwa własność pliku (pomijanie): /Library/LaunchAgents/foo.plist

Kiedy próbuję zalogować się na konto inne niż admin, pojawia się dokładnie ten sam komunikat o błędzie. Kiedy próbuję zalogować się przy użyciu konta administratora, działa dobrze.

Będę szczery, nie wiem wiele o przywilejach i uprawnieniach systemu Mac OS X.

Aby utworzyć plik, otworzyłem go w górę emacs, a sudona koncie administratora (np za pomocą supolecenia od innego konta nie ma przywileje sudo), a następnie zapisany.

Którego konta muszę użyć do utworzenia pliku, aby działał on dla wszystkich użytkowników?
Czy muszę używać polecenia sudo?
Czy muszę zmienić uprawnienia do pliku (np. Używać chmod)?
Czy istnieje prosty sposób na przejęcie istniejącego pliku i zmianę jego własności zamiast konieczności ponownego tworzenia pliku?
Czy ktoś mógłby wyjaśnić, dlaczego występuje ten błąd?

Rozsądny
źródło
Co daje ls -l dla
/Library/LaunchAgent/foo.plist
1
@ Mark: daje następujące informacje:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Senseful
Możliwe jest również wymuszenie load ( -F).
kenorb

Odpowiedzi:

51

Jeśli plist jest własnością użytkownika root i może być zapisywany przez użytkownika innego niż root, jest to problem z bezpieczeństwem.

Możesz zmienić właściciela, aby zrootować sudo chown root <filename>i zmienić uprawnienia za pomocą sudo chmod 644 <filename>(4 dla dostępu do odczytu, 2 dla dostępu do zapisu, 1 dla dostępu do wykonania, dodane. Pierwszy numer jest dla właściciela, drugi dla grupy, trzeci dla grupy każdy.)

Michiel de Mare
źródło
To działa. Jestem tylko zdezorientowany, dlaczego musiałem zmienić właściciela na rootowanie. Czy użytkownik root jest używany w LaunchAgents?
Sensowny
1
Tak myślę.
Michiel de Mare
1
Wiem, że to starszy post, ale to świetna odpowiedź! Zmieniłem uprawnienia na /system/library/launchdaemons/com.apple.mdnsresponder, aby wypróbować poprawkę zalecaną przez Apple, ale przy próbie załadowania jej później otrzymam błąd wspomniany powyżej. Zmiana właściciela i uprawnień zgodnie z powyższym opisem była jedynym sposobem na odzyskanie połączenia z Internetem. Dzięki!
W obliczu tego samego teraz i rozwiązany. Uznałem, że właściciel pliku bardzo się przywołuje launchctl. Plik utworzyłem jako mój normalny użytkownik i korzystałem z niego sudo. Stąd błąd. Ponieważ root nie jest właścicielem pliku, No sudonie było potrzebne. Uciekłem bez sudoi wszystko działało dobrze.
Bibhas
14

Z opisu komendy launchctl (1) manpageload :

Pamiętaj, że pliki konfiguracyjne dla poszczególnych użytkowników (LaunchAgents) muszą być własnością użytkownika, który je ładuje. Wszystkie ogólnosystemowe demony (LaunchDaemons) muszą być własnością root. Pliki konfiguracyjne nie mogą być zapisywane w grupie ani w świecie. Ograniczenia te obowiązują ze względów bezpieczeństwa, ponieważ umożliwienie zapisu w uruchomionym pliku konfiguracyjnym pozwala określić, który plik wykonywalny zostanie uruchomiony.

launchctl ma kilka komunikatów „Wątpliwe…”. Launchd kod do wersji 10.6.7 (na przykład) ma trzy takie wiadomości w swoich launchctl.c(patrz funkcja 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>

Aby uniknąć tych wiadomości, ścieżką musi być (# 3) zwykły plik lub katalog 1 (lub dowiązanie symboliczne do jednego), które jest (# 1) własnością użytkownika root lub wywołującego użytkownika i (# 2) nie jest „grupą” ani „innym” ”Do zapisu (tj chmod go-w.).

1 Brak nazwanych potoków, blokowych / znakowych węzłów urządzeń specjalnych, gniazd domeny lokalnej itp.


Twój plik jest prawdopodobnie własnością administratora, ponieważ mówisz, że nie otrzymujesz wiadomości podczas logowania jako ten użytkownik (w takim przypadku nazwa ścieżki jest własnością wywołującego użytkownika).
Aby nazwa ścieżki działała dla innych użytkowników, powinna być własnością root.

Aby to zorganizować, wykonaj:

sudo chown root /Library/LaunchAgent/foo.plist
Chris Johnsen
źródło
1

Dzięki za odpowiedź (zmiana właściciela na rootowanie) - to wszystko, czego potrzebowałem.

Aby uczynić to trochę więcej niż postem „ja też” ... Dotarłem tutaj skomplikowaną ścieżką: dostaję błędy „Ten interfejs API może być używany tylko przez proces działający w ramach sesji Aqua” dla programu uruchamiającego. Poszukiwanie odpowiedzi na to pytanie doprowadziło mnie do noty Apple o demonach i agentach, która wyjaśniła, jak rozwiązać błąd „sesji Aqua”, ale pozostawiły mnie problemy z „wątpliwą własnością”. W ten sposób dotarłem tutaj, gdzie mój ostatni problem został rozwiązany.

Być może dodanie tego wszystkiego do tej dyskusji spowoduje, że jakaś wyszukiwarka połączy tę stronę z jednym z poprzedzających problemów, oszczędzając w ten sposób przyszłemu poszukiwaczowi przygód trochę czasu.

Matt Strange
źródło
Uwaga: powinien to być komentarz, a nie odpowiedź.
studgeek
1
Skomentowałbym, ale moje punkty reputacji nie były wystarczająco wysokie. (Czy nie wydaje się wstecz, że można „odpowiedzieć” przy niskiej reputacji, ale nie komentować?)
Matt Strange
-2

dla pliku w ~ / Library / LaunchAgent, którego właścicielem jest użytkownik, a nie root, nie sudo, jeśli musisz zmienić właściciela, ponieważ ładujesz go od użytkownika root

radha
źródło
-3

Tak się dzieje, gdy ludzie nie wiedzą, jak to sudodziała. Aby wyłączyć usługi znajdujące się na plikach należących do użytkownika, wystarczy zadzwonić launchtlbez sudo.

Maximo Pech
źródło