Wie kopiere ich ACLs unter Mac OS X?

11

Die meisten Unix-Derivate können ACLs von einer Datei in eine andere kopieren mit:

getfacl filename1 | setfacl -f - filename2

Leider verfügt Mac OS X nicht über die Befehle getfacl und setfacl, da die ACL-Behandlung in chmod integriert wurde. chmod -E akzeptiert eine Liste von ACLs auf stdin, aber ich habe keinen Befehl gefunden, der ACLs in einem geeigneten Format auf stdout ausspuckt. Das Beste, was ich mir ausgedacht habe, ist:

ls -led filename1 | tail +2 | sed 's/^ *[0-9][0-9]*: *//' | chmod -E filename2

Gibt es eine robustere Lösung?

Bonusfrage: Gibt es eine gute Möglichkeit, dies in Python zu tun, ohne Module zu verwenden, die nicht mit 10.6 ausgeliefert werden?

MagerValp
quelle

Antworten:

7

ls -e Drucken Sie die der Datei zugeordnete Zugriffssteuerungsliste (Access Control List, ACL), falls vorhanden, in langer (-l) Ausgabe.

Dies ergibt ein Ergebnis wie ...

drwxr-xr-x@ 19 localadmin   646B Aug  4 00:21  APPBUNDLE
0: user:localadmin allow add_file,add_subdirectory,writeattr,writeextattr,writesecurity
                   ⬆    ⇧                      ⇶                                     ⬆

Persönlich habe ich "Exporte" in meinem ~/.bash_profile

export FILE_ALL="read,write,append,execute,delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"
export DIR_ALL="list,search,add_file,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"

das macht so etwas chmodmöglich ...

sudo chmod + a "Erlaube localadmin $ DIR_ALL" / APPBUNDLE

Auf der chmodManpage gibt es diese Informationen ... die darauf hinweisen, dass es tatsächlich möglich sein könnte, etwas zu tun, wie Sie es beschreiben.

"ACLs werden mithilfe von Erweiterungen der Grammatik im symbolischen Modus bearbeitet. Jede Datei verfügt über eine ACL, die eine geordnete Liste von Einträgen enthält. Jeder Eintrag bezieht sich auf einen Benutzer oder eine Gruppe und gewährt oder verweigert eine Reihe von Berechtigungen. In Fällen, in denen ein Benutzer und eine Gruppe mit demselben Namen vorhanden, dem Benutzer- / Gruppennamen kann "Benutzer:" oder "Gruppe:" vorangestellt werden, um den Typ des Namens anzugeben. "

chmod -E Liest die ACL-Informationen von stdin als sequentielle Liste von ACEs, die durch Zeilenumbrüche getrennt sind. Wenn die Informationen korrekt analysiert werden, werden die vorhandenen Informationen ersetzt.

Außerdem werde ich BatchMod , einem Oldie, aber einem Goodie für ACLs, sowie TinkerToolSystem einen Gruß aussprechen .

mralexgray
quelle
Dies funktionierte für mich, aber ich musste den Befehl chmod ändern in: sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE( Ändern des Benutzernamens und des allow)
E. Moffat
1

Sie sollten in der Lage statsein, die Ausgabe in geeigneter Weise zu formatieren.

Bis auf weiteres angehalten.
quelle
stat listet keine ACLs auf.
MagerValp