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

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

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

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

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

Ответов (5)

Решение

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

chmod g+rwxs dirname

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

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

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

umask 022

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

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

Я знаю, что вы можете создавать каталоги с разрешениями в однострочном режиме, используя -m опцию:

mkdir -m755 mydir

и вы также можете использовать install команду:

sudo install -C -m 755 -o owner -g group /src_dir/src_file /dst_file

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

На машине Solaris у меня есть файл, содержащий ACL для пользователей и групп. К сожалению, вам нужно перечислить всех пользователей (по крайней мере, я не мог найти способ заставить эту работу иначе):

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.

Теперь вы можете установить эти ACL в своем каталоге, выполнив следующую команду:

setfacl -f acl.lst /your/dir/here

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

Надеюсь это поможет!