it-swarm-ru.tech

Сделать все новые файлы в каталоге доступным для группы

Предположим, у меня есть два пользователя: Алиса и Боб, группа GROUPNAME и папка foo, оба пользователя являются членами GROUPNAME (в Linux и ext3).

Если я сохраню в качестве пользователя Алиса файл под foo, разрешения будут: -rw-r--r-- Alice Alice. Однако возможно ли добиться того, чтобы каждый файл, сохраненный в некотором подкаталоге foo, имел разрешения -rwxrwx--- Alice GROUPNAME (т.е. владелец Алиса, группа GROUPNAME)?

132
student

Вы можете управлять назначенными битами прав доступа с помощью umask и ​​группы, задав для директории setgid значение GROUPNAME.

_$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME
_

Обратите внимание, что вы должны сделать chgrp/chmod для каждого подкаталога; он не распространяется автоматически (то есть ни существующие, ни впоследствии созданные каталоги в каталоге setgid не будут setgid , хотя последний будет в группе GROUPNAME).

Также обратите внимание, что umask является атрибутом процесса и применяется ко всем файлам, созданным этим процессом и его дочерними элементами (которые наследуют действующий umask в своих родительских элементах в fork() time) , Пользователям может потребоваться установить это в _~/.profile_, и им может потребоваться следить за вещами, не имеющими отношения к вашему каталогу, для которых требуются разные разрешения. modules может быть полезно, если вам нужны разные настройки при выполнении разных задач.

Вы можете управлять вещами немного лучше, если можете использовать POSIX ACL; должна быть возможность указать маску разрешений и группу и обеспечить их разумное распространение. Однако поддержка ACL для POSIX несколько переменная.

96
geekosaur

Если это вообще возможно, используйте списки контроля доступа (ACL) .

В Linux убедитесь, что используемая вами файловая система поддерживает ACL (большинство файловых систем unix поддерживают). Возможно, вам придется изменить параметры монтирования, чтобы включить ACL: для ext2/ext3/ext4 вам необходимо явно указать параметр монтирования acl, поэтому запись в /etc/fstab должно выглядеть как /dev/sda1 / ext4 errors=remount-ro,acl 0 1. Запустить mount -o remount,acl / для активации ACL без перезагрузки. Также установите инструменты командной строки ACL getfacl и ​​setfacl, обычно предоставляемые в пакете с именем acl.

Теперь, когда однократная установка завершена, измените ACL каталога, чтобы дать группе разрешение на запись и сделать эти разрешения унаследованными вновь созданными файлами. Под Linux:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

Если ACL не являются опцией, сделайте каталог, принадлежащий группе GROUPNAME, и установите для него разрешения 2775 или 2770: chmod g+rwxs /path/to/directory. Здесь s означает бит setgid; для каталога это означает, что файлы, созданные в этом каталоге, будут принадлежать группе, которой принадлежит каталог.

Вам также нужно будет установить Алису и Боба mask , чтобы сделать все их файлы доступными для групповой записи по умолчанию. Значение umask по умолчанию в большинстве систем - 022, что означает, что файлы могут иметь все разрешения, кроме записи по группам и других. Измените это на 002, что означает запретить только разрешение на запись другим. Обычно вы устанавливаете эту настройку в своем ~/.profile:

umask 002    # or 007 to have files not readable by others
109

Этот вопрос хорошо подходит для Linux acl . Поскольку вы не указали свою ОС, я буду считать Linux следующим. Вот пример сеанса.

Я не знаю действительно хорошего acl учебника, но вы могли бы сделать хуже, чем http://www.vanemery.com/Linux/ACL/linux-acl.html

Обратите внимание, что по умолчанию acl ведет себя как локальный umask. Поскольку, по крайней мере, в Linux, маски umask применяются глобально, это единственный известный мне способ получить эффект локального маски umask. По какой-то причине это малоизвестная особенность. В сети полно людей, спрашивающих о локальном переопределении umask, но почти никто не думает об использовании acl.

Также обратите внимание, что вам нужно смонтировать раздел, в котором вы работаете, с поддержкой acl, например.

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

Сессия следует:

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

Задайте для группы foo значение staff, а для acl группы и пользователя foo - rwx.

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

Установите для acls пользователя и группы по умолчанию также rwx. Это определяет разрешения, которые файлы и каталоги наследуют от foo. Таким образом, все файлы и каталоги, созданные в foo, будут иметь групповые разрешения rw.

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

Теперь создайте несколько файлов в foo как пользователи faheem и ​​john.

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

Список файлов. Обратите внимание, что как файлы, принадлежащие faheem, так и файлы, принадлежащие john, создаются с правами группы rw.

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
24
Faheem Mitha