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 LoginWindow
und 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 sudo
dem Administratorkonto geöffnet (z. B. mit dem su
Befehl, 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?
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.)
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 sudo
nicht benötigt. Ich lief ohne sudo
und 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
).
Dubious permissions on file (skipping): <pathname>
Dubious ownership on file (skipping): <pathname>
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.
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 sudo
funktioniert. Um Dienste zu deaktivieren, die sich auf Dateien befinden, die Ihrem Benutzer gehören, rufen Sie einfach launchtl
ohne auf sudo
.
mmmmmm
Sinnvoll
-rw-r--r--@ 1 admin staff 653 Oct 17 14:31 /Library/LaunchAgents/foo.plist
kenorb
-F
).