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


85

У мене називається каталог data. Потім я запускаю скрипт під ідентифікатором користувача 'робот'. робот пише в dataкаталог і оновлює файли всередині. Ідея dataвідкрита для оновлення як для мене, так і для роботи.

Тож я налаштовую групу дозволів та власників так

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

де і я, і робот належать до 'robot-grp'. Я змінюю дозвіл і група власників рекурсивно подобається батьківський каталог.

Я регулярно завантажую нові файли в dataкаталог за допомогою rsync. На жаль, завантажені нові файли не успадковують дозвіл батьківського каталогу, як я сподіваюся. Натомість це виглядає приблизно так

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

Коли робот намагається оновити new-file.txt, він не працює через відсутність дозволу на файл.

Я не впевнений, чи допоможе встановлення umask. У будь-якому випадку нові файли насправді не відповідають цьому.

$ umask -S
u=rwx,g=rx,o=rx

Мене часто бентежить дозвіл файлів Unix. У мене навіть правильний план? Я використовую Debian lenny.

Відповіді:


53

Ви не хочете змінювати umask за замовчуванням у вашій системі, це ризик для безпеки. Липкий бітовий варіант буде працювати певною мірою, але використання ACL - це найкращий спосіб. Це простіше, ніж ти думаєш. Проблема основних ACL полягає в тому, що вони за замовчуванням не є рекурсивними. Якщо ви встановите ACL для каталогу, тільки файли всередині цього каталогу успадковують ACL. Якщо ви створюєте підкаталог, він не отримує батьківський ACL, якщо ACL не встановлений для повторного запису.

По-перше, переконайтеся, що ACL ввімкнено для тома, у якому каталог. Якщо у вас є tune2fs, ви можете виконати наступне:

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

Якщо у вас немає tune2fs, то вивчіть fstabs:

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

У моїй системі (CentOS 5.5), ACL в 4-му стовпці, де написано "за замовчуванням". Якщо ви сумніваєтесь, залиште це як за замовчуванням. Якщо ви намагаєтеся встановити ACL , і це помилки з, поверніться назад і додайте параметр аКЛ в / і т.д. / Fstab відразу після дефолтів: defaults,acl.

Як я розумію, ви хочете, щоб усі в групі користувачів мали доступ для запису до каталогу даних. Це здійснюється наступним чином:

setfacl -Rm g:users:rwX,d:g:users:rwX data/

Я використав цю команду, але вона не усунула мою проблему, як я можу скасувати цю команду, будь ласка?
Itai Ganot

Зробив трюк на ubuntu з sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something. Проблема з тестами PHPUnit. Після створення файлів журналів із запущених тестів користувач apache користувач www-dataне міг їх записувати / читати.
s3m3n

2
@Itai Ganot - по setfaclсторінці людини , -bабо --remove-allвидаляє розширений ACL.
jww

Отже, ви просто додали setfacl -Rm g:users:rwX,d:g:users:rwX data/б наприкінці /etc/fstab?
425nesp

@ пінья ні. єдина зміна , які ви вносите в / і т.д. / Fstab, щоб змінити defaultsдо defaults,acl. setfaclце команда, яку слід запустити з терміналу. data/його слід замінити на шлях до каталогу, який ви хочете змінити.
Segfault

32

Якщо позначити каталог setgid ( g+s), нові файли успадкують групове право власності на каталог, але -gпараметр rsync спробує замінити це.


11
Біт setgid лише змушує створені файли успадковувати групу / якщо / особа, яка створює новий файл, є членом цієї групи; якщо користувач, що створює, є власником, але він не є членом групи, або каталог призначений для запису у всьому світі, встановлений біт нічого не зробить. І umask для всіх користувачів, що створюють файли, все ще потрібно встановити, щоб дозволити відповідний груповий доступ.
dannysauer

1
@dannysauer "якщо користувач, який створює, є власником, але не є членом групи ... встановлений біт нічого не зробить" - дякую. Має сенс зараз - але, не маючи відгуку від rsync, цікавилося, чому це не працює.
користувач12345

4

Інші відповіді застосовуються в загальному випадку, але, як ви згадуєте, що rsync є джерелом проблеми, вам може знадобитися просто налаштувати її виклик.

Для початку популярний -aпрапор створює дозволи на копіювання rsync; використовувати -ristead -aабо додати -no-p(для синхронізації дозволу) та -no-g(для групової синхронізації). Також rsync підтримує --chmodпрапор для зміни дозволів на новостворені файли.


3

Ваш umask неправий для потрібних дозволів. Ви хочете umask 002. У вас зараз є umask 022. Також коментар щодо створення каталогу setgid є правильним, але я не впевнений, чи є право власності на файлову групу щось, що ви хочете змінити чи ні.

Права доступу до файлів Unix - це насправді дуже проста модель. Я вважаю, що ACL повністю заплутав себе. :-)


4
"Права доступу до файлів Unix - це насправді дуже проста модель. Я вважаю, що ACL повністю заплутав себе." - Я начебто відчуваю протилежне (але +1 все одно). ACL (і дозволити / заборонити ACE) прості, і дозволи Unix не мають сенсу. Але це відбувається від хлопця, який страждає встановленням Postfix / Dovecot / Clam / SpamAssassin.
jww
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.