У меня возникли проблемы с настройкой системы для нескольких пользователей, имеющих доступ к одному и тому же набору файлов. Я читал tuts и docs и играл с ACL, но пока не добился успеха.
МОЙ СЦЕНАРИЙ:
У нескольких пользователей, например, user1
и user2
, которая принадлежит группе, называемой sharedusers
. У них должно быть все ЗАПИСЫВАТЬ разрешение на один и тот же набор файлов и каталогов, скажем, лежащих в основе /userdata/sharing/
.
У меня установлена группа папки sharedusers
и SGID, чтобы все вновь созданные файлы / каталоги внутри были установлены в одну группу.
ubuntu@home:/userdata$ ll
drwxr-sr-x 2 ubuntu sharedusers 4096 Nov 24 03:51 sharing/
Я установил ACL для этого каталога, чтобы иметь разрешение на подкаталоги / файлы, унаследованные от его родителей.
ubuntu@home:/userdata$ setfacl -m group:sharedusers:rwx sharing/
ubuntu@home:/userdata$ setfacl -d -m group:sharedusers:rwx sharing/
Вот что у меня есть:
ubuntu@home:/userdata$ getfacl sharing/
# file: sharing/
# owner: ubuntu
# group: sharedusers
# flags: -s-
user::rwx
group::r-x
group:sharedusers:rwx
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:sharedusers:rwx
default:mask::rwx
default:other::r-x
Кажется, все в порядке, когда я создаю новую папку с новыми файлами внутри и разрешение правильное.
ubuntu@home:/userdata/sharing$ mkdir a && cd a
ubuntu@home:/userdata/sharing/a$ touch a_test
ubuntu@home:/userdata/sharing/a$ getfacl a_test
# file: a_test
# owner: ubuntu
# group: sharedusers
user::rw-
group::r-x #effective:r--
group:sharedusers:rwx #effective:rw-
mask::rw-
other::r--
Как видите, sharedusers
группа имеет действующее разрешение rw-
.
ОДНАКО, если у меня есть zip-файл, и я использую unzip -q
команда для распаковки файла внутри папки sharing
, в извлеченных папках нет группа писать разрешение. Таким образом, пользователи из группы sharedusers
не может изменять файлы в этих извлеченных папках.
ubuntu@home:/userdata/sharing$ unzip -q Joomla_3.0.2-Stable-Full_Package.zip
ubuntu@home:/userdata/sharing$ ll
drwxrwsr-x+ 2 ubuntu sharedusers 4096 Nov 24 04:00 a/
drwxr-xr-x+ 10 ubuntu sharedusers 4096 Nov 7 01:52 administrator/
drwxr-xr-x+ 13 ubuntu sharedusers 4096 Nov 7 01:52 components/
Вы заметите разницу в разрешениях между папками a
(созданный ранее) и папка administrator
извлечен unzip
. И списки ACL файлов внутри administrator
:
ubuntu@home:/userdata/sharing$ getfacl administrator/index.php
# file: administrator/index.php
# owner: ubuntu
# group: ubuntu
user::rw-
group::r-x #effective:r--
group:sharedusers:rwx #effective:r--
mask::r--
other::r--
Он также имеет ubuntu
группа, а не sharedusers
группа, как и ожидалось.
Может кто-нибудь объяснить проблему и дать мне совет? Заранее спасибо!
Это поведение ACL_MASK в действии. Глядя на index.php
файл, теоретически он получает предполагаемое разрешение group:sharedusers:rwx
, но фактически еще один #effective:r--
. Это потому, что теоретическое значение получает XOR с mask::r--
дать эффективный, который вы видите с ls -l
(или ll
).
Теперь ACL_MASK из mask::r--
фактически является функцией безопасности ACL, не позволяющей вам предоставлять доступ там, где вы не собирались: при добавлении существующего файла (в отличие от создания нового) ACL устанавливает ACL_MASK на прежнее значение файла, которое в этом случае было r--
.
Это не ограничивается распаковкой. Это применимо всякий раз, когда вы Добавить файл в отличие от Создайте Это. Вы могли бы попробовать cp
или tar
например, и приведет к тому же результату.
Фактически документация (man 5 acl
) говорится в абзаце Создание объекта и списки управления доступом по умолчанию что default
значения применяются только к объекту, созданному с помощью любого из следующих системных вызовов: creat (), mkdir (), mknod (), mkfifo (), или открыто().
Поэтому я не могу дать вам хорошее решение, так как вы не сможете использовать механизм ACL по умолчанию для того, что делаете.