Назад | Перейти на главную страницу

Разрешение по умолчанию для вновь созданных файлов / папок с использованием списков контроля доступа, которые не соблюдаются такими командами, как «распаковать».

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