Я пытаюсь рекурсивно удалить набор ACL для johndoe из всех папок на одном из моих дисков, не добавляя никаких других записей! Кто-нибудь знает, как это сделать, не затрагивая уже существующие ACL для других групп / пользователей?
Я ищу Mac-эквивалент "setfacl -d u: johndoe"
Я знаю, что вы можете использовать chmod для удаления правила из нескольких файлов, но единственный способ, который я видел, не будет работать, потому что он удаляет правило через его индекс (например, 5-я запись каждой папки), и запись для моего пользователя выиграла Не всегда будет один и тот же индекс.
Зачем вам это нужно? Предположим, вы унаследовали безумную файловую систему, в которой есть группа отдельных пользователей вместо групп, и вы хотите избавиться только от отдельных лиц, поскольку у них уже есть доступ.
Это немного долго, но вы можете сделать что-то вроде этого:
find . -exec chmod -a "johndoe allow delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,read,write,append,execute,list,search,add_file,add_subdirectory,delete_child" {} \;
Вам также нужно будет выполнить ту же команду с «deny», чтобы удалить все запрещающие правила для пользователя.
Большое спасибо Джесси Русак на Переполнение стека - это было выведено из его ответа.
Если вы ищете приложение с графическим интерфейсом, вы можете использовать Песочница - затем вы можете изменить списки ACL и при необходимости применить их рекурсивно, но это немного ограничено с точки зрения того, что вы хотите делать.
Это сказал setfacl
недоступно на Mac - возможность доступна через chmod
использовать chmod
например. chmod -R -a# [NumberOfACL] PATH
или указав chmod -R -a [ACL to delete] PATH
Если вы укажете username allow [ACL]
в качестве ACL можно удалять привилегии одну за другой.
например. chmod -R -a "username allow read" /
удалит любые привилегии чтения из любого ACL, доступного в любой папке или файле на корневом жестком диске. Затем вы можете промыть и повторить с остальными доступными ACL, если вы знаете, что некоторые всегда вместе, вы можете связать их вместе, например. читать, писать (они должны быть разделены запятыми без пробелов).
Список ACL можно взять со страницы руководства chmod (для краткости сообщения), но затем поместив каждую команду (chmod -R -a "username [ACL whether it's allow or deny]"
) в сценарии вы можете удалить все ACL, созданные одним пользователем, из папки и любых подкаталогов. Который у вас есть в ответе OP. (И более простой способ)
Я считаю, что вам может понадобиться -x вместо -d. Убедитесь и проверьте это. Добавьте -R для рекурсивного.
setfacl -xR u:johndoe dirname