Як використовувати chmod на Mac, щоб нові файли успадковували дозволи батьківського каталогу?


23

Я на Mac. Я хочу зробити так, щоб будь-які нові файли / папки, які створюються в певній папці, мали такі самі дозволи (не групові, про це вже було зроблено), як і у батьківського каталогу. У Linux я зазвичай використовую setfacl, але схоже, що chmod на Mac може зробити те, що я шукаю. Я прочитав сторінку man для chmod, але досі не можу зрозуміти, як правильно відформатувати команду, щоб отримати те, що я хочу.


Я хочу, щоб нові файли / папки були груповими для читання та для запису.

Відповіді:


33

По-перше, трохи тла, щоб пояснити, що відбувається: Файли в OS X можуть застосовувати до них досить різні типи дозволів: POSIX та ACL.

У файлах завжди (добре, майже завжди) застосовуються дозволи POSIX, що складаються з власника, групи та інших (з деякою комбінацією читання, запису та виконання для кожного з них). Немає можливості контролювати спадкування дозволів POSIX: нові елементи завжди належать тому, хто створив їх користувач, групове призначення успадковується з папки, в якій вони перебувають, а доступ визначається umask (що майже завжди: власник отримує повний доступ, група та інші читають лише + виконувати для папок). Тому дозволи POSIX не працюватимуть для того, що ви намагаєтесь зробити.

У файлах також може бути застосований список контролю доступу (ACL). Це перелік записів контролю доступу (ACE), кожен з яких застосовується до користувача або групи, вказує типи доступу (дуже детально), дозволено чи заборонено, і чи потрібно також копіювати ACE в елементи, створені всередині папки. Цей останній біт - це та частина, яка робить це корисним для вас; вам потрібно створити ACE у папці, яка вказує бажану групу, типи доступу та потрібне повне успадкування.

chmod в OS X може маніпулювати ACE за допомогою параметрів дозволів + a, -a тощо. Якщо я зрозумію, що ви хочете, ви використовуєте це (із заміненим назвою вашої групи та шляхом папки) для створення ACE:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

Зауважте, що спадщина не є "живою", тобто вона не поширюється на елементи, створені до призначення ACE, і не застосовується до елементів, створених де-небудь в іншому місці, а потім переміщених у папку. Ви можете застосувати його до наявного вмісту, використовуючи -R ( chmod -R +a ...). Я не знаю способу (крім інструментів адміністрування сервера Apple) примусити спадкування до предметів, переміщених у папку.


Дякую за чудове пояснення. Я просто спробував це, хоча він все ще просто створив новий файл з дозволом для читання / запису користувача, а всі інші читали дозволи. Батьківська папка (на відкритому повітрі) встановлена ​​на 775 дозволів з моїм користувачем (jhicks) як власником і _www як групою. Я додав себе до групи _www. drwxrwxr-x + 13 jhicks _www 442B 16 листопада 09:47 на відкритому повітрі я запустив вашу команду так: chmod + a "група: _www список дозволів, add_file, пошук, add_subdirectory, delete_child, readattr, writeattr, readextattr, writeextattr, readsecurity, file_inherit, directory_inherit "на відкритому повітрі
Джеремі Хікс

ls -lпоказує лише дозволи POSIX (хоча "+" після дозволів вказує на наявність ACL). Використовуйте ls -leдля показу також ACL.
Гордон Девіссон

Якщо в назві групи є пробіл, ви можете використовувати: як роздільник. Наприклад, "група: моя група з пробілом: дозволити"
Дуг Річардсон

Далі йдуть chmod +a ...команди, то я створив abc.txt в папці. Переключившись на іншого користувача та редагуючи за допомогою TextEdit, файл вказується як заблокований і не може редагуватися.
оххо

Я щось грав з цим, я думаю, що ти змушуєш успадкувати + ai
Робін

4

Спробуйте додати -Rдо команди @ gordon так:

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

-RВаріант буде (як зазначено тут ):

Рекурс: Зміна режиму ієрархій файлів, коріння яких у файлах, а не лише самих файлів.

Зміна ієрархій файлів, здається, саме те, що ви шукаєте (для нових файлів, каталогів тощо).

Ви також можете ознайомитися з цим повідомленням Apple.SE , який висвітлює ситуацію, дещо схожу на вашу (за винятком спільного каталогу), яка вимагає sudoпозначення на передній панелі.


4

Більшість людей не прагнуть цього (-R); більшу частину часу вони вважають за краще змінити ACL у верхньому каталозі і зробити щось магічне, щоб змусити всі об'єкти, що містяться, успадковувати прапори відповідно до ACL, який вони вказали в корені цього піддерева. Це набагато більш елегантно, оскільки ACL на об'єктах сортують ці успадковані ACE відповідно до політики.

І так, мені довелося написати сценарій пітона для цього, і я не знайшов нічого підходящого.


2
Ви хочете поділитися (наприклад, на суть ? Якщо ви не заперечуєте, я думаю, що це був приємний жест.
myhd


0

На комп'ютері Mac, використовуючи PathFinder , можна легко встановити ACL та POSIX. Якщо ви розміщуєте WordPress на Mac сервері, вам також потрібно встановити define('FS_METHOD', 'direct');в wp-config.php, щоб встановлення плагінів та оновлення не вимагало деталей FTP.

Отже, ви зберігаєте дозволи POSIX за замовчуванням та додаєте користувача _www (не група) до ACL, а потім натисніть Розширити дозвіл у вікні ACL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.