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

Предположим, у меня есть два пользователя A и B и группа G и папка foo, оба пользователя являются членами G (используя linux и ext3).

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

116 голосов | спросил student 8 Maypm11 2011, 22:41:11

3 ответа


88

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

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

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

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

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

ответил geekosaur 8 Maypm11 2011, 22:51:21
91

Если это вообще возможно, используйте списки управления доступом (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:G:rwx /path/to/directory
setfacl -m group:G:rwx /path/to/directory

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

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

umask 002    # or 007 to have files not readable by others
ответил Gilles 8 Maypm11 2011, 23:02:27
19

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

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

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

Задайте значения по умолчанию для пользователей и групп по умолчанию для 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
ответил Faheem Mitha 8 Maypm11 2011, 22:59:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132