Warum wird beim Ausführen meiner .plist-Datei durch Launch Agent der Fehler "zweifelhafter Besitz von Dateien" angezeigt?


54

Ich habe einen Start - Agent konfiguriert ist, eine .plist - Datei zum Beispiel auszuführen: /Library/LaunchAgent/foo.plist. In dieser .plist ist festgelegt, dass sie während LoginWindowund ausgeführt wird Aqua.

Wenn ich versuche, meinen Computer zu starten und zum Anmeldebildschirm zu gelangen, sollte diese Liste ausgeführt werden, es wird jedoch stattdessen die folgende Fehlermeldung angezeigt (in der Konsole):

launchctl: Zweifelhafter Besitz in der Datei (Überspringen): /Library/LaunchAgents/foo.plist

Wenn ich versuche, mich bei einem Nicht-Administratorkonto anzumelden, wird genau dieselbe Fehlermeldung angezeigt. Wenn ich versuche, mich mit einem Administratorkonto anzumelden, funktioniert es einwandfrei.

Ich bin ehrlich, ich weiß nicht viel über Mac OS X-Berechtigungen und -Berechtigungen.

Um die Datei zu erstellen, ich öffnete sie in emacs, mit sudoauf dem Admin - Konto (zB durch die Verwendung von suBefehl seit dem anderen Konto nicht sudo - Berechtigungen hat) und speicherte es dann.

Welches Konto muss ich verwenden, um die Datei zu erstellen, damit sie für alle Benutzer funktioniert?
Muss ich den Befehl sudo verwenden?
Muss ich die Dateiberechtigungen ändern (zB verwenden chmod)?
Gibt es eine einfache Möglichkeit, eine vorhandene Datei zu übernehmen und ihren Eigentümer zu ändern, anstatt die Datei neu erstellen zu müssen?
Könnte jemand erklären, warum dieser Fehler auftritt?


Was gibt ls -l für /Library/LaunchAgent/foo.plist
user151019

1
@ Mark: Es gibt folgende:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Sinnvolle

Es ist auch möglich, das Laden zu erzwingen ( -F).
Kenorb

Antworten:


51

Wenn eine Plist im Besitz von root ist und von einem anderen Benutzer als root beschrieben werden kann, handelt es sich um ein Sicherheitsproblem.

Sie können den Eigentümer in root mit sudo chown root <filename>ändern und die Berechtigungen mit sudo chmod 644 <filename>(4 für Lesezugriff, 2 für Schreibzugriff, 1 für Ausführungszugriff, addiert. Die erste Zahl ist für den Eigentümer, die zweite für die Gruppe, die dritte für jedermann.)


Das funktioniert. Ich bin nur verwirrt, warum ich den Besitzer auf root ändern musste. Ist root der Benutzer, der für LaunchAgents verwendet wird?
Sinnvolle

1
Ja, ich denke schon.
Michiel de Mare

1
Ich weiß, dass dies ein älterer Beitrag ist, aber das ist eine großartige Antwort! Ich habe die Berechtigungen für /system/library/launchdaemons/com.apple.mdnsresponder geändert, um ein von Apple empfohlenes Update zu testen. Beim anschließenden Laden wurde jedoch der oben genannte Fehler angezeigt. Das Ändern des Besitzers und der Berechtigungen wie oben beschrieben war die einzige Möglichkeit, meine Internetverbindung wiederherzustellen. Vielen Dank!

Konfrontiert das gleiche jetzt und gelöst. Ich dachte, dass der Besitzer der Datei viel aufruft launchctl. Ich habe die Datei als normaler Benutzer erstellt und mit ausgeführt sudo. Daher der Fehler. Da root nicht der Eigentümer der Datei ist, wurde Nein sudonicht benötigt. Ich lief ohne sudound es hat gut funktioniert.
Bibhas

14

Vom launchctl (1) manpage ‚s Beschreibung des loadsubcommand:

Beachten Sie, dass die benutzerspezifischen Konfigurationsdateien (LaunchAgents) dem Benutzer gehören müssen, der sie lädt. Alle systemweiten Daemons (LaunchDaemons) müssen Eigentum von root sein. Konfigurationsdateien dürfen nicht für Gruppen oder für die ganze Welt beschreibbar sein. Diese Einschränkungen gelten aus Sicherheitsgründen, da durch das Ermöglichen des Schreibens in eine launchd-Konfigurationsdatei angegeben werden kann, welche ausführbare Datei gestartet wird.

launchctl enthält mehrere "Dubious ..." - Meldungen. Der launchd- Code für 10.6.7 (zum Beispiel) enthält drei solche Meldungen launchctl.c(siehe die Funktion 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>

Um diese Meldungen zu vermeiden, muss ein Pfadname (# 3) eine reguläre Datei oder ein Verzeichnis 1 (oder ein Symlink zu einem) sein, das (# 1) Eigentum von root oder dem aufrufenden Benutzer ist und (# 2) nicht "group" oder "other" ”Beschreibbar (dh chmod go-w).

1 Keine Named Pipes, Block- / Zeichen-Geräteknoten, lokalen Domain-Sockets usw.


Ihre Datei gehört wahrscheinlich dem Administrator, da Sie sagen, dass Sie die Meldung nicht erhalten, wenn Sie sich als dieser Benutzer anmelden (der Pfadname gehört in diesem Fall dem aufrufenden Benutzer).
Damit der Pfadname für andere Benutzer funktioniert, sollte er root gehören.

Um dies zu arrangieren, mache:

sudo chown root /Library/LaunchAgent/foo.plist

1

Danke für die Antwort (Besitzerwechsel zu root) - das ist alles was ich brauchte.

Um dies ein bisschen mehr als ein "Ich auch" -Post zu machen ... Ich bin über einen verschlungenen Pfad hierher gekommen: Ich habe die Fehlermeldung "Diese API kann nur von einem Prozess verwendet werden, der in einer Aqua-Sitzung ausgeführt wird" für einen Launchdaemon erhalten. Die Suche nach einer Antwort darauf führte mich zu Apples Technote zu Daemons und Agenten, in dem erläutert wurde, wie der Fehler bei der "Aqua-Sitzung" behoben werden kann , was mich jedoch zu zweifelhaften Besitzproblemen veranlasste . So bin ich hierher gekommen, wo mein letztes Problem gelöst wurde.

Vielleicht führt das Hinzufügen all dessen zu dieser Diskussion dazu, dass einige Suchmaschinen diese Seite mit einem der vorläufigen Probleme verknüpfen, wodurch einigen zukünftigen Abenteurern etwas Zeit gespart wird.


Beachten Sie, dass dies eher ein Kommentar als eine Antwort sein sollte.
Studgeek

1
Ich hätte es kommentiert, aber meine Reputationspunkte waren nicht hoch genug. (Scheint es nicht rückwärts, dass man mit einem schlechten Ruf, aber ohne Kommentar 'antworten' kann?)
Matt Strange

-2

für die Datei in ~ / Library / LaunchAgent, die dem Benutzer und nicht root gehört, dont sudo, wenn Sie die Eigentümerschaft ändern müssen, da Sie sie vom Root-Benutzer laden


-3

Das passiert, wenn die Leute nicht wissen, wie es sudofunktioniert. Um Dienste zu deaktivieren, die sich in Dateien Ihres Benutzers befinden, rufen Sie einfach launchtlohne an sudo.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.