Вопрос: Как скопировать ACL в Mac OS X?


Большинство производных unix могут копировать ACL из одного файла в другой с помощью:

getfacl filename1 | setfacl -f - filename2

К сожалению, в Mac OS X нет команд getfacl и setfacl, так как они перевернули обработку ACL в chmod. chmod -E принимает список ACL на stdin, но я не нашел команду, которая выплевывает ACL в соответствующем формате на stdout. Лучшее, что я придумал, это:

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

Есть ли более надежное решение?

Бонусный вопрос: есть ли хороший способ сделать это на Python, без использования каких-либо модулей, которые не поставляются с 10.6?


9
2017-09-17 13:48


Источник




Ответы:


ls -e  Распечатайте список контроля доступа (ACL), связанный с файлом, если он имеется, в длинном (-l) выходе.

это дает результат, такой как ...

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

Лично у меня есть «экспорт» в моем ~/.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"

которые делают такой chmod возможное...

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

Из chmod man page, есть эта информация ..., которая подсказывает, что действительно возможно сделать что-то вроде вас.

«ACL обрабатываются с использованием расширений для грамматики символического режима. Каждый файл имеет один ACL, содержащий упорядоченный список записей. Каждая запись относится к пользователю или группе и предоставляет или отклоняет набор разрешений. В тех случаях, когда пользователь и группа существует с тем же именем, имя пользователя / группы может быть префикс «user:» или «group:», чтобы указать тип имени ».

chmod -E      Читает информацию ACL из stdin, как последовательный список ACE, разделенных символами новой строки. Если информация правильно анализируется, существующая информация заменяется.

Кроме того, я буду кричать BatchMod, старое, но лакомство для ACL, а также TinkerToolSystem,


4
2017-08-22 11:39





Вы должны быть в состоянии получить stat чтобы отформатировать его выход соответствующим образом.


1
2017-09-17 17:20



stat не перечисляет списки ACL. - MagerValp


Может быть, взгляните на https://github.com/jvscode/getfacl,


1
2017-07-21 19:04