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

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

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

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

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

Ответы [ 4 ]

73 голосов
/ 24 февраля 2009

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

chmod g+rwxs dirname

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

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

56 голосов
/ 01 июля 2011

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

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

4 голосов
/ 22 сентября 2015

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

umask 022

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

4 голосов
/ 24 февраля 2009

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