Установка владельца по умолчанию «автоматически» потребует, чтобы каталог setuid
вел себя как setgid
. Однако, хотя это можно настроить во FreeBSD, другие системы UNIX и Linux просто игнорируют u+s
. В вашем случае, однако, может быть другое решение.
Я хочу иметь каталог, которым можно поделиться, добавив группу пользователю. Все, что создано в этом каталоге, наследует схему разрешений от своего родителя. Если есть лучший способ, чем я пытаюсь, я весь в ушах.
Итак, по сути, из того, что я вижу, вы хотите контролировать доступ к каталогу, используя механизм групп. Однако для этого не требуется ограничивать разрешения во всей структуре каталогов. На самом деле, --x
бит выполнения каталога может быть именно тем, что вам нужно. Позвольте привести пример. При условии, что...
- Группа, контролирующая доступ к
group_dir
каталогу, есть ourgroup
.
- Только люди в
ourgroup
группе могут получить доступ group_dir
.
user1
и user2
принадлежат ourgroup
.
- Маска по умолчанию - 0022.
... рассмотрим следующую настройку:
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
Здесь, давайте предположим, что каждый элемент был создан его владельцем.
Теперь в этой настройке:
- Все каталоги могут свободно просматривать все в
ourgroup
. Любой из группы может создавать, перемещать, удалять файлы где угодно внутри group_dir
(но не глубже).
- Любой, кто не находится внутри,
ourgroup
будет заблокирован group_dir
, и поэтому не сможет манипулировать чем-либо под ним. Например, user3
(который не является членом ourgroup
) не может читать group_dir/user2_submission/README
(даже если у него есть r--
разрешение на сам файл).
Однако в этом случае есть небольшая проблема: из-за типичного umask элементы, созданные пользователями, не могут манипулироваться другими членами группы. Вот где приходят ACL. Установив разрешения по умолчанию, вы убедитесь, что все в порядке, несмотря на значение umask:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
Этот вызов устанавливает:
rw(x)
Разрешения по умолчанию для владельца.
rw(x)
Разрешения по умолчанию для группы.
- Нет разрешений по умолчанию для остальных. Обратите внимание, что, поскольку другие не могут получить доступ в
group_dir
любом случае, на самом деле не имеет значения, какие у них права доступа.
Теперь, если я создаю элемент как user2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
Имея этот ACL, мы можем попытаться перестроить нашу предыдущую структуру:
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
Здесь снова каждый элемент создается его владельцем.
Кроме того, если вы хотите дать немного больше энергии / безопасности тем, кто использует каталог, вы можете рассмотреть некоторые проблемы. Это, например, предотвратит user1
удаление user2_submission
(так как у него есть -w-
разрешение group_dir
):
$ chmod +t group_dir/
Теперь, если user1
попытается удалить user2
каталог, он получит прекрасный Operation not permitted
. Однако обратите внимание, что, хотя это предотвращает изменение структуры каталогов group_dir
, файлы и каталоги, расположенные ниже, по-прежнему доступны:
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
Еще одна вещь, которую следует принять во внимание, это то, что используемые ACL-списки устанавливают разрешения по умолчанию . Поэтому владелец элемента может изменить связанные с ним разрешения. Например, user2
может отлично работать ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... следовательно, делает его полный каталог представления недоступным для всех в группе.
Однако, поскольку вы изначально готовы предоставить полный rws
доступ кому-либо в группе, я предполагаю, что вы доверяете этим пользователям и не ожидаете от них слишком большого количества вредоносных операций.