Як скопіювати ACL на Mac OS X?


13

Більшість похідних 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?


Отже, зараз 2020 рік, а macOS досі не має getfacl/ setfacl. Досить примітно. github.com/jvscode/getfacl 10 років, я не зміг змусити його працювати. serverfault.com/a/303752/104173 виглядає складною, і мені не ясно, чи намагається вона замінити get/setfaclфункціональність. Я розумію, що macOS не є серверною платформою, але він все ще може зазнавати вторгнень у безпеку. Чи варто перезапустити цю розмову на apple.stackexchange.com ?
Джонні Юта

Відповіді:


8

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, що містить упорядкований список записів. Кожен запис посилається на користувача чи групу та надає або забороняє набір дозволів. У випадках, коли користувач і групи існують з тим самим іменем, ім'я користувача / групи може бути встановлено префіксом "user:" або "group:" для того, щоб визначити тип імені. "

chmod -E Читає інформацію про ACL зі stdin як послідовний список АПФ, розділених новими рядками. Якщо інформація аналізує правильно, існуюча інформація замінюється.

Також я вигукую BatchMod , старого , але доброго для ACL, а також TinkerToolSystem .


Це працювало для мене, але мені довелося змінити команду chmod на: sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE(переключення імені користувача та the allow)
Е. Moffat


1

Можливо, подивіться на https://github.com/jvscode/getfacl .


Хороша довідка. На жаль, здається, що цьому проекту вже 10 років, його немає setfacl(тільки getfacl), а getfaclфункціонал, здається, досить обмежений. Я, на жаль, не знайшов кращого рішення.
Джонні Юта
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.