Установка разрешений по умолчанию для вновь созданных файлов и подкаталогов в каталоге в Linux?

у меня есть куча длительных сценариев и приложений, которые хранят выходные результаты в каталоге, совместно используемом несколькими пользователями. Я хотел бы, чтобы каждый файл и каталог, созданный в этом общем каталоге, автоматически имел u=rwxg=rwxo=r разрешения.

Я знаю, что я мог бы использовать umask 006 во главе с моими различными сценариями, но мне не нравится этот подход, так как многие пользователи пишут свои собственные сценарии и могут забыть установить umask сами.

I на самом деле просто хочу, чтобы файловая система устанавливала вновь созданные файлы и каталоги с определенным разрешением, если она находится в определенной папке. Это вообще возможно?

обновление: я думаю это можно сделать с POSIX ACLs, используя функциональность ACL по умолчанию, но на данный момент это все немного над моей головой. Если кто-нибудь может объяснить, как использовать ACLS по умолчанию, это, вероятно, ответит на этот вопрос красиво.

4 ответов


чтобы получить право собственности, вы можете установить бит setuid группы в каталоге с

chmod g+rwxs dirname

это гарантирует, что файлы, созданные в каталоге, принадлежат группе. Затем вы должны убедиться, что все работают с umask 002 или 007 или что-то в этом роде-вот почему Debian и многие другие системы linux по умолчанию настроены с группами пользователей.

Я не знаю, как заставить разрешения, которые вы хотите, если umask пользователя слишком сильный.


вот как это сделать, используя ACLs по умолчанию, по крайней мере, под Linux.

во-первых, вы может необходимо включить поддержку ACL в файловой системе. Если вы используете ext4, то он уже включен. Другие файловые системы (например, ext3) необходимо монтировать с помощью . В этом случае добавьте опцию в свой /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 теперь должны получить необходимые разрешения. Конечно, это также зависит от приложения, создавшего файл. Например, большинство файлов не будут исполняться кем-либо с самого начала (в зависимости от аргумента mode для вызова open(2) или creat(2)), как и при использовании umask. Некоторые утилиты, такие как cp, tar и rsync попытается сохранить разрешения исходного файла(файлов), которые будут маскироваться ACL по умолчанию, если исходный файл не доступен для групповой записи.

надеюсь, что это помогает!


это уродливо, но вы можете использовать команду 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

в вашем сценарии оболочки (или .bashrc) вы можете использовать что-то вроде:

umask 022

umask - это команда, которая определяет параметры маски, которая управляет тем, как устанавливаются права доступа к файлам для вновь созданных файлов.