Якщо встановити власника за замовчуванням "автоматично", потрібен каталог, який setuid
би поводився так setgid
. Однак, хоча це може бути налаштовано на FreeBSD, інші системи UNIX та Linux просто ігнорують u+s
. Однак у вашому випадку може бути інше рішення.
Мені хочеться мати каталог, яким можна поділитися, додавши групу до користувача. Все, що створено в цьому каталозі, успадковує схему дозволів від свого батьківського. Якщо є кращий спосіб, ніж те, що я намагаюся, я всі вуха.
Отже, в основному, з того, що я бачу, ви хочете контролювати доступ до каталогу за допомогою механізму груп. Однак це не вимагає обмеження дозволів у всій структурі каталогу. Насправді --x
біт виконання каталогу може бути саме тим, що вам потрібно. Дозвольте навести приклад. Якщо припустити, що ...
- Група, що контролює доступ до
group_dir
каталогу, є ourgroup
.
- Лише люди в
ourgroup
групі можуть отримати доступ group_dir
.
user1
і user2
належать ourgroup
.
- Типова umask - 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--
дозвіл на сам файл).
Однак у цьому випадку є невелика проблема: через типовий умаск елементи, створені користувачами, не можуть маніпулювати іншими членами групи. Тут надходять 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
доступ будь-кому з групи, я припускаю, що ви довіряєте цим користувачам, і що ви не очікуєте від них занадто багато шкідливих операцій.