Warum erhalte ich die Fehlermeldung „Dubioser Besitz der Datei“, wenn Launch Agent meine .plist-Datei ausführt?

Ich habe einen Launch Agent, der so konfiguriert ist, dass er beispielsweise eine .plist-Datei ausführt: /Library/LaunchAgent/foo.plist. Innerhalb dieser .plist ist sie so eingestellt, dass sie während LoginWindowund ausgeführt wird Aqua.

Wenn ich versuche, meinen Computer zu starten und zum Anmeldebildschirm zu gelangen, sollte diese Plist ausgeführt werden, gibt aber stattdessen den folgenden Fehler (in der Konsole) aus:

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

Wenn ich versuche, mich bei einem Nicht-Admin-Konto 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 die Privilegien und Berechtigungen von Mac OS X.

Um die Datei zu erstellen, habe ich sie in emacs, mit sudodem Administratorkonto geöffnet (z. B. mit dem suBefehl, da das andere Konto keine sudo-Berechtigungen hat) und dann gespeichert.

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

Was gibt ls -l für /Library/LaunchAgent/foo.plist aus
@Mark: es gibt folgendes:-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
Es ist auch möglich, das Laden zu erzwingen ( -F).

Antworten (5)

Wenn eine Plist Root gehört und von einem anderen Benutzer als Root beschreibbar ist, ist dies ein Sicherheitsproblem.

Sie können den Eigentümer mit root 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 jeder.)

Das funktioniert. Ich bin nur verwirrt darüber, warum ich den Besitzer auf root ändern musste. Ist root der Benutzer, der für LaunchAgents verwendet wird?
Ja, ich denke schon.
Ich weiß, dass dies ein älterer Beitrag ist, aber das ist eine großartige Antwort! Ich habe die Berechtigungen auf /system/library/launchdaemons/com.apple.mdnsresponder geändert, um einen von Apple empfohlenen Fix zu versuchen, aber ich würde den oben erwähnten Fehler erhalten, wenn ich versuche, ihn danach zu laden. Das Ändern des Besitzers und der Berechtigungen wie oben beschrieben war die einzige Möglichkeit, meine Internetverbindung wiederherzustellen. Danke!
Stehe jetzt vor dem selben und habe es gelöst. Ich dachte mir, dass der Eigentümer der Datei viel aufrufen launchctl. Ich habe die Datei als mein normaler Benutzer erstellt und mit ausgeführt sudo. Daher der Fehler. Da root nicht der Eigentümer der Datei ist, wurde No sudonicht benötigt. Ich lief ohne sudound es funktionierte gut.

Aus der Beschreibung des Unterbefehls auf der manpage launchctl(1)load :

Beachten Sie, dass Konfigurationsdateien pro Benutzer (LaunchAgents) dem Benutzer gehören müssen, der sie lädt. Alle systemweiten Daemons (LaunchDaemons) müssen root gehören. Konfigurationsdateien dürfen nicht gruppen- oder weltweit beschreibbar sein. Diese Einschränkungen sind aus Sicherheitsgründen vorhanden, da die Beschreibbarkeit einer launchd-Konfigurationsdatei es einem ermöglicht, anzugeben, welche ausführbare Datei gestartet wird.

launchctl hat mehrere „Dubios …“-Meldungen. Der Launchd -Code für 10.6.7 (zum Beispiel) enthält drei solcher Nachrichten 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 symbolischer Link zu einem) sein, das (#1) Root oder dem aufrufenden Benutzer gehört und (#2) nicht „Gruppe“ oder „Andere“. ” beschreibbar (dh chmod go-w).

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


Ihre Datei gehört wahrscheinlich dem Admin-Benutzer, da Sie sagen, dass Sie die Nachricht 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, tun Sie Folgendes:

sudo chown root /Library/LaunchAgent/foo.plist

Danke für die Antwort (Eigentümer auf root ändern) - das ist alles, was ich brauchte.

Um dies ein bisschen mehr als einen „Ich auch“-Beitrag zu machen … Ich bin über einen verschlungenen Pfad hierher gekommen: Ich habe „Diese API kann nur von einem Prozess verwendet werden, der innerhalb einer Aqua-Sitzung verwendet wird“-Fehlermeldungen für einen Launchdaemon erhalten. Die Suche nach einer Antwort darauf führte mich zu Apples Technote zu Daemons und Agenten , die erklärten, wie man den „Aqua-Session“-Fehler behebt, aber das ließ mich mit „zweifelhaften Besitz“-Problemen zurück. So kam ich hierher, wo mein letztes Problem gelöst wurde.

Vielleicht bringt das Hinzufügen all dessen zu dieser Diskussion eine Suchmaschine dazu, diese Seite mit einem der Vorläufer-Probleme zu verknüpfen, wodurch einige zukünftige Abenteurer einige Zeit sparen.

Beachten Sie, dass dies eher ein Kommentar als eine Antwort sein sollte.
Ich hätte kommentiert, aber meine Reputationspunkte waren nicht hoch genug. (Scheint es nicht rückwärtsgewandt, dass man mit einer niedrigen Reputation „antworten“, aber nicht kommentieren kann?)

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

Das passiert, wenn Leute nicht wissen, wie es sudofunktioniert. Um Dienste zu deaktivieren, die sich auf Dateien befinden, die Ihrem Benutzer gehören, rufen Sie einfach launchtlohne auf sudo.