81

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

4 ответа4

51

Вы не хотите менять 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/
31

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

4

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

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

3

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .