Назад | Перейти на главную страницу

Как скопировать 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?

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 "разрешить localadmin $ DIR_ALL" / APPBUNDLE

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

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

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

Кроме того, я передам привет BatchMod, старый, но полезный для ACL, а также TinkerToolSystem.

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

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