Wie verwende ich chmod auf einem Mac, um neue Dateien dazu zu bringen, übergeordnete Verzeichnisberechtigungen zu erben?

23

Ich bin auf dem Mac. Ich möchte, dass alle neuen Dateien / Ordner, die in einem bestimmten Ordner erstellt werden, die gleichen Berechtigungen haben (keine Gruppe, für die bereits gesorgt wurde) wie die des übergeordneten Verzeichnisses. Unter Linux würde ich normalerweise setfacl verwenden, aber es sieht so aus, als ob chmod auf einem Mac in der Lage sein könnte, das zu tun, wonach ich suche. Ich habe die Manpage für chmod durchgelesen, kann aber immer noch nicht herausfinden, wie der Befehl richtig formatiert wird, um das zu bekommen, was ich will.

Jeremy Hicks
quelle
Ich möchte, dass die neuen Dateien / Ordner für Gruppen lesbar und beschreibbar sind.

Antworten:

33

Zunächst ein wenig Hintergrundwissen, um zu erläutern, was vor sich geht: Auf Dateien in OS X können zwei ganz unterschiedliche Berechtigungseinstellungen angewendet werden: POSIX und ACLs.

Für Dateien werden immer (fast immer) POSIX-Berechtigungen angewendet, die aus einem Eigentümer, einer Gruppe und anderen bestehen (mit einer Kombination aus Lesen, Schreiben und Ausführen für jede dieser Berechtigungen). Es gibt keine Möglichkeit, die Vererbung von POSIX-Berechtigungen zu steuern: Neue Elemente gehören immer dem Benutzer, der sie erstellt hat, die Gruppenzuweisung wird von dem Ordner übernommen, in dem sie sich befinden, und der Zugriff wird von der umask bestimmt (was so ziemlich immer der Fall ist: Besitzer hat vollen Zugriff, Gruppe und andere nur lesen + für Ordner ausführen). Daher funktionieren POSIX-Berechtigungen nicht für das, was Sie tun möchten.

Auf Dateien kann auch eine Zugriffssteuerungsliste (Access Control List, ACL) angewendet werden. Hierbei handelt es sich um eine Liste von Zugriffssteuerungseinträgen (ACEs), von denen jeder für einen Benutzer oder eine Gruppe gilt. Sie geben die Zugriffsarten (im Detail) an, ob sie zugelassen oder verweigert werden und ob die ACE auch kopiert werden soll Elemente, die im Ordner erstellt wurden. Das letzte Stück ist der Teil, der dies für Sie nützlich macht. Sie müssen einen ACE für den Ordner erstellen, der die gewünschte Gruppe, die gewünschten Zugriffstypen und die vollständige Vererbung angibt.

chmod unter OS X kann ACEs mit den Berechtigungsoptionen + a, -a usw. bearbeiten. Wenn ich verstehe, was Sie wollen, verwenden Sie dies (wobei Ihr Gruppenname und Ordnerpfad ersetzt werden), um den ACE zu erstellen:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

Beachten Sie, dass die Vererbung nicht "live" ist, dh sie gilt nicht für Elemente, die vor dem Zuweisen des ACE erstellt wurden, und gilt nicht für Elemente, die an einer anderen Stelle erstellt und anschließend in den Ordner verschoben wurden. Sie können es mit -R ( chmod -R +a ...) auf vorhandene Inhalte anwenden . Ich kenne keine Möglichkeit (außer Apples Server-Admin-Tools), die Vererbung von in den Ordner verschobenen Elementen zu erzwingen.

Gordon Davisson
quelle
Danke für die tolle Erklärung. Ich habe es gerade ausprobiert und trotzdem eine neue Datei mit Lese- / Schreibrechten für alle anderen Benutzer erstellt. Der übergeordnete Ordner (im Freien) ist auf 775 Berechtigungen mit meinem Benutzer (jhicks) als Eigentümer und _www als Gruppe festgelegt. Ich habe mich der _www-Gruppe hinzugefügt. drwxrwxr-x + 13 jhicks _www 442B Nov 16 09:47 outdoors Ich habe Ihren Befehl folgendermaßen ausgeführt: chmod + a "Gruppe: _www allow list, add_file, search, add_subdirectory, delete_child, readattr, writeattr, readextattr, writeextattr, readsecurity, file_inher directory_inherit "im Freien
Jeremy Hicks
ls -lZeigt nur POSIX-Berechtigungen an (obwohl das "+" nach den Berechtigungen angibt, dass eine ACL vorhanden ist). Verwenden Sie ls -lediese Option, um auch ACLs anzuzeigen.
Gordon Davisson
Wenn der Gruppenname ein Leerzeichen enthält, können Sie Folgendes verwenden: als Trennzeichen. Zum Beispiel: "Gruppe: Meine Gruppe mit einem Leerzeichen: erlauben"
Doug Richardson
Befolgte den chmod +a ...Befehl, dann erstellte ich eine abc.txt im Ordner. Wenn Sie zu einem anderen Benutzer wechseln und mit TextEdit bearbeiten, wird die Datei als gesperrt angezeigt und kann nicht bearbeitet werden.
Ohho
Ich habe ein
Robin.
4

Versuchen Sie -R, @ gordons Befehl wie folgt hinzuzufügen :

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

Die -ROption wird (wie hier vermerkt ):

Rekurs: Ändern Sie den Modus der in den Dateien verwurzelten Dateihierarchien, anstatt nur die Dateien selbst.

Das Ändern der Dateihierarchien scheint genau das zu sein, wonach Sie suchen (für neue Dateien, Verzeichnisse usw.).

Sie können sich auch diesen Apple.SE-Beitrag ansehen , der eine ähnliche Situation wie Sie behandelt (außer in Bezug auf ein freigegebenes Verzeichnis), für die ein sudoan der Vorderseite angehefteter Ordner erforderlich war .

JW8
quelle
4

Dies (-R) ist nicht das, was die meisten Menschen tun wollen. Meistens würden sie es vorziehen, die ACL im obersten Verzeichnis zu ändern und etwas Magisches zu tun, um alle enthaltenen Objekte zu zwingen, Flags gemäß der ACL zu erben, die sie im Stammverzeichnis dieses Unterbaums angegeben haben. Dies ist wesentlich eleganter, da die ACLs für die Objekte diese vererbten ACEs nach Richtlinien sortieren.

Und ja, ich musste ein Python-Skript schreiben, ich fand auch nichts passendes.

Nasen
quelle
2
Möchtest du etwas mitteilen (z. B. auf einen Kern ? Wenn es dir nichts ausmacht, denke ich, dass das eine nette Geste war.
myhd
1

chmod + ai, i = erbe ACL-Regeln

zaonline
quelle
0

Wenn Sie auf einem Mac PathFinder verwenden , können Sie auf einfache Weise ACL und POSIX festlegen. Wenn Sie WordPress auf einem Mac-Server define('FS_METHOD', 'direct');hosten, müssen Sie auch in der Datei wp-config.php festlegen, dass Sie beim Installieren von Plugins und beim Aktualisieren nicht nach FTP-Details gefragt werden.

Grundsätzlich behalten Sie also die POSIX-Standardberechtigungen bei, fügen den Benutzer _www (nicht group) zur ACL hinzu und klicken dann im ACL-Fenster auf Propagate Permission.

Max
quelle