2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

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

У меня есть каталог под названием data. Затем я запускаю скрипт под идентификатором пользователя ‘robot’. Робот записывает в каталог 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 -S
u=rwx,g=rx,o=rx

Я часто путаюсь с разрешениями на файлы Unix. Есть ли у меня вообще правильный план? Я использую Debian lenny.

Ответы (4)

53
53
53
2010-06-13 02:10:58 +0000

Вы не хотите изменять маску по умолчанию вашей системы, это риск для безопасности. Опция “липкий бит” в какой-то степени сработает, но использование 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/
32
32
32
2010-06-12 04:13:24 +0000

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

4
4
4
2015-09-03 15:36:56 +0000

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

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

3
3
3
2010-06-12 04:43:45 +0000

Твоя маска не подходит под разрешения, которые ты хочешь. Ты хочешь маску 002. В настоящее время у вас есть маска 022. Также комментарий о том, как сделать сэтгид каталога правильным, но я не уверен, является ли принадлежность к файловой группе чем-то, что вы хотите изменить или нет. Права доступа к файлам

Unix на самом деле очень простая модель. Я сам нахожу ACL совершенно запутанным. :-)

Похожие вопросы

6
10
11
8
6