Jak skopiować listy ACL na Mac OS X?

13

Większość pochodnych unix może kopiować listy ACL z jednego pliku do drugiego za pomocą:

getfacl filename1 | setfacl -f - filename2

Niestety Mac OS X nie ma komend getfacl i setfacl, ponieważ dodały obsługę ACL do chmod. chmod -E akceptuje listę ACL na stdin, ale nie znalazłem polecenia, które wypluwa ACL w odpowiednim formacie na stdout. Najlepsze, co wymyśliłem, to:

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

Czy istnieje bardziej niezawodne rozwiązanie?

Dodatkowe pytanie: czy istnieje dobry sposób na zrobienie tego w Pythonie bez użycia modułów, które nie są dostarczane z 10.6?

MagerValp
źródło
Jest teraz rok 2020, a macOS wciąż nie ma getfacl/ setfacl. Dość niezwykłe. github.com/jvscode/getfacl ma 10 lat Nie byłem w stanie sprawić, żeby działał. serverfault.com/a/303752/104173 wygląda na skomplikowane i nie jestem pewien, czy próbuje zastąpić get/setfaclfunkcjonalność. Rozumiem, że macOS nie jest platformą serwerową, ale wciąż może doświadczać ingerencji w bezpieczeństwo. Czy warto wznowić tę rozmowę na apple.stackexchange.com ?
Johnny Utahh

Odpowiedzi:

8

ls -e Wydrukuj listę kontroli dostępu (ACL) powiązaną z plikiem, jeśli jest dostępna, na długim (-l) wyjściu.

daje to wynik taki jak ...

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

Osobiście mam w sobie „eksport” ~/.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"

które sprawiają, że jest to chmodmożliwe ...

sudo chmod + „allow localadmin $ DIR_ALL” / APPBUNDLE

Na chmodstronie podręcznika znajduje się trochę informacji ... które sugerują, że rzeczywiście można zrobić coś takiego, jak opisujesz ...

„Listami ACL manipuluje się za pomocą rozszerzeń gramatyki trybu symbolicznego. Każdy plik ma jedną listę ACL, zawierającą uporządkowaną listę wpisów. Każda pozycja odnosi się do użytkownika lub grupy i przyznaje lub odmawia zestawu uprawnień. W przypadkach, gdy użytkownik i grupa istnieje o tej samej nazwie, nazwa użytkownika / grupy może być poprzedzona słowem „użytkownik:” lub „grupa:” w celu określenia rodzaju nazwy. ”

chmod -E Odczytuje informacje ACL ze standardowego wejścia, jako sekwencyjną listę wpisów ACE, oddzielonych znakami nowej linii. Jeśli informacje zostaną poprawnie przeanalizowane, istniejące informacje zostaną zastąpione.

Ponadto przekażę okrzyk BatchMod , staruszkowi, ale dobry prezent dla list ACL, a także TinkerToolSystem .

mralexgray
źródło
To działało dla mnie, ale musiałem zmienić komendę chmod na: sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE(zmiana nazwy użytkownika i allow)
E. Moffat
1

Powinieneś być w stanie statsformatować swoje wyjście w odpowiedni sposób.

Wstrzymano do odwołania.
źródło
stat nie zawiera list ACL.
MagerValp,
1

Może zajrzyj na https://github.com/jvscode/getfacl .

rozpoznać
źródło
Dobre referencje. Niestety, ten projekt wydaje się mieć 10 lat, nie ma setfacl(tylko getfacl), a getfaclfunkcjonalność wydaje się być dość ograniczona. Niestety nie znalazłem lepszego rozwiązania.
Johnny Utahh