Установка разрешений по умолчанию для вновь созданных файлов и подкаталогов в каталоге в 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 - это команда, определяющая настройки маски, которая определяет, как устанавливаются права доступа к файлам для вновь созданных файлов.