it-swarm-ru.tech

Как сделать так, чтобы разрешение нового файла наследовало от родительского каталога?

У меня есть каталог с именем 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.

81
Wai Yip Tung

Вы не хотите менять umask по умолчанию для вашей системы, это угроза безопасности. Параметр sticky bit будет работать до некоторой степени, но лучше использовать 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 включены. Если вы сомневаетесь, оставьте его по умолчанию. Если вы попытаетесь установить ACL, и он выдаст ошибку, вернитесь назад и добавьте опцию acl в/etc/fstab сразу после значений по умолчанию: defaults,acl.

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

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

Пометка директории setgid (g+s) заставит новые файлы наследовать групповое владение каталогом, но опция -g в rsync попытается переопределить это.

31
Ignacio Vazquez-Abrams

Другие ответы применимы в общем случае, но, как вы упомянули, что rsync является источником проблемы, вам может потребоваться просто настроить его вызов.

Для начала, популярный флаг -a делает разрешения на rsync для копирования; используйте -r вместо -a или добавьте -no-p (для синхронизации без разрешения) и -no-g (для синхронизации без группы). Также rsync поддерживает флаг --chmod для изменения прав доступа к вновь создаваемым файлам.

4
mbq

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

Права доступа к файлам Unix на самом деле очень простая модель. Я нахожу ACL полностью запутывающими себя. :-)

3
Omnifarious