Come copio gli ACL su Mac OS X?


13

La maggior parte dei derivati ​​unix può copiare ACL da un file all'altro con:

getfacl filename1 | setfacl -f - filename2

Sfortunatamente Mac OS X non ha i comandi getfacl e setfacl, poiché hanno trasformato la gestione ACL in chmod. chmod -E accetta un elenco di ACL su stdin, ma non ho trovato un comando che sputerà ACL in un formato adatto su stdout. Il migliore che ho ideato è:

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

Esiste una soluzione più solida?

Domanda bonus: c'è un bel modo per farlo in Python, senza usare moduli che non sono spediti con 10.6?


Quindi è l'anno 2020 e macOS non ha ancora getfacl/ setfacl. Abbastanza notevole. github.com/jvscode/getfacl ha 10 anni Non sono stato in grado di farlo funzionare. serverfault.com/a/303752/104173 sembra complicato e non sono chiaro se tenta di sostituire la get/setfaclfunzionalità. Ho capito che macOS non è una piattaforma server, ma può comunque sperimentare intrusioni di sicurezza. Vale la pena riavviare questa conversazione su apple.stackexchange.com ?
Johnny Utahh,

Risposte:


8

ls -e Stampa l'elenco di controllo di accesso (ACL) associato al file, se presente, nell'output lungo (-l).

questo dà un risultato come ...

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

Personalmente, ho "esportazioni" nel mio ~/.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"

che rendono tale chmodpossibile ...

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

Dalla chmodpagina man, c'è un po 'di informazioni ... che suggerisce che potrebbe davvero essere possibile fare qualcosa come tu descrivi ..

"Gli ACL vengono manipolati usando estensioni alla grammatica della modalità simbolica. Ogni file ha un ACL, contenente un elenco ordinato di voci. Ogni voce fa riferimento a un utente o gruppo e concede o nega una serie di autorizzazioni. Nei casi in cui un utente e un gruppo esiste con lo stesso nome, il nome utente / gruppo può essere preceduto da "utente:" o "gruppo:" per specificare il tipo di nome ".

chmod -E Legge le informazioni ACL da stdin, come un elenco sequenziale di ACE, separati da newline. Se le informazioni vengono analizzate correttamente, le informazioni esistenti vengono sostituite.

Inoltre, darò un grido a BatchMod , un vecchio, ma un tesoro per gli ACL, così come per TinkerToolSystem .


Questo ha funzionato per me, ma ho dovuto cambiare il comando chmod in: sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE(cambiando il nome utente e il allow)
E. Moffat,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.