Установка разрешений по умолчанию для вновь созданных файлов и подкаталогов в каталоге в Linux?
У меня есть множество длинных скриптов и приложений, которые хранят выходные результаты в каталоге, который используется среди нескольких пользователей. Я хотел бы, чтобы каждый файл и каталог, созданные в этом общем каталоге, автоматически имели разрешения u=rwxg=rwxo=r
.
Я знаю, что я мог бы использовать umask 006
во главе с моими различными скриптами, но мне не нравится этот подход, так как многие пользователи пишут свои собственные скрипты и могут забыть сами установить umask.
Я просто хочу, чтобы файловая система установила только что созданные файлы и каталоги с определенным разрешением, если она находится в определенной папке. Это вообще возможно?
Обновление. Я думаю, что это можно сделать с помощью POSIX ACL, используя функциональность ACL по умолчанию, но все это немного над моей головой в данный момент. Если кто-нибудь может объяснить, как использовать ACL по умолчанию, он, вероятно, хорошо ответит на этот вопрос.
Ответы
Ответ 1
Чтобы получить право собственности, вы можете установить бит setuid группы в каталоге с помощью
chmod g+rwxs dirname
Это гарантирует, что файлы, созданные в каталоге, принадлежат группе. Затем вы должны убедиться, что все работают с umask 002 или 007 или что-то в этом роде --- вот почему Debian и многие другие Linux-системы по умолчанию настроены по группам пользователей.
Я не знаю способ принудительного разрешения, если пользователь umask слишком силен.
Ответ 2
Здесь, как это сделать, используя ACL по умолчанию, по крайней мере, под Linux.
Во-первых, вам может потребоваться включить поддержку ACL в вашей файловой системе. Если вы используете ext4, то он уже включен. Другие файловые системы (например, ext3) необходимо установить с помощью опции acl
. В этом случае добавьте опцию в /etc/fstab
. Например, если каталог находится в корневой файловой системе:
/dev/mapper/qz-root / ext3 errors=remount-ro,acl 0 1
Затем перемонтируйте его:
mount -oremount /
Теперь, чтобы установить ACL по умолчанию, используйте следующую команду:
setfacl -dm u::rwx,g::rwx,o::r /shared/directory
Все новые файлы в /shared/directory
теперь должны получить требуемые разрешения. Конечно, это также зависит от приложения, создающего файл. Например, большинство файлов не будут исполняться кем-либо с самого начала (в зависимости от аргумента режима от вызова open (2) или creat (2)), как при использовании umask. Некоторые утилиты, такие как cp
, tar
и rsync
, будут пытаться сохранить разрешения исходного файла (ов), которые будут маскировать ваш ACL по умолчанию, если исходный файл не был доступен для групп.
Надеюсь, это поможет!
Ответ 3
Это некрасиво, но вы можете использовать команду setfacl для достижения именно того, что вы хотите.
На машине Solaris у меня есть файл, содержащий acls для пользователей и групп. К сожалению, вы должны перечислить всех пользователей (по крайней мере, я не мог найти способ сделать эту работу иначе):
user::rwx
user:user_a:rwx
user:user_b:rwx
...
group::rwx
mask:rwx
other:r-x
default:user:user_a:rwx
default:user:user_b:rwx
....
default:group::rwx
default:user::rwx
default:mask:rwx
default:other:r-x
Назовите файл acl.lst и заполните имена реальных пользователей вместо user_X.
Теперь вы можете установить эти acls в своем каталоге, выполнив следующую команду:
setfacl -f acl.lst /your/dir/here
Ответ 4
в вашей оболочке script (или .bashrc
) вы можете использовать somthing как:
umask 022
umask
- это команда, определяющая настройки маски, которая определяет, как устанавливаются права доступа к файлам для вновь созданных файлов.