Ustawienie domyślnego właściciela na „automatycznie” wymagałoby setuid
zachowania katalogu setgid
. Jednak chociaż można to skonfigurować we FreeBSD, inne systemy UNIX i Linux po prostu ignorują u+s
. W twoim przypadku może być jednak inne rozwiązanie.
Chcę mieć katalog, który można udostępniać, dodając grupę do użytkownika. Wszystko, co zostanie utworzone w tym katalogu, dziedziczy schemat uprawnień po rodzicu. Jeśli istnieje lepszy sposób niż to, co próbuję, jestem cały w uszach.
Zasadniczo z tego, co widzę, chcesz kontrolować dostęp do katalogu za pomocą mechanizmu grup. Nie wymaga to jednak ograniczenia uprawnień w całej strukturze katalogów. W rzeczywistości --x
bit wykonania katalogu może być dokładnie tym, czego potrzebujesz. Dam ci przykład. Przy założeniu, że...
- Grupą kontrolującą dostęp do
group_dir
katalogu jest ourgroup
.
ourgroup
Dostęp mają tylko osoby w grupie group_dir
.
user1
i user2
należą do ourgroup
.
- Domyślnym umask jest 0022.
... rozważ następującą konfigurację:
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
Załóżmy, że każdy element został stworzony przez jego właściciela.
Teraz w tej konfiguracji:
- Wszystkie katalogi mogą być przeglądane przez wszystkich
ourgroup
. Każdy z grupy może tworzyć, przenosić i usuwać pliki w dowolnym miejscu w środku group_dir
(ale nie głębiej).
- Każdy, kto nie jest w
ourgroup
środku, zostanie zablokowany group_dir
i dlatego nie będzie mógł manipulować niczym pod nim. Na przykład user3
(który nie jest członkiem ourgroup
) nie może czytać group_dir/user2_submission/README
(nawet jeśli ma r--
uprawnienia do samego pliku).
Jednak w tym przypadku jest mały problem: z powodu typowego umask elementy tworzone przez użytkowników nie mogą być modyfikowane przez innych członków grupy. W tym miejscu pojawiają się listy ACL. Ustawiając domyślne uprawnienia, upewnisz się, że wszystko jest w porządku pomimo wartości umask:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
To połączenie ustawia:
- Domyślne
rw(x)
uprawnienia właściciela.
- Domyślne
rw(x)
uprawnienia dla grupy.
- Brak domyślnych uprawnień dla innych. Pamiętaj, że skoro inni i
group_dir
tak nie mają dostępu, tak naprawdę nie ma znaczenia, jakie są ich uprawnienia poniżej.
Teraz, jeśli utworzę element jako user2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
Po wprowadzeniu tej listy ACL możemy spróbować odbudować naszą poprzednią strukturę:
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
Tutaj ponownie każdy element jest tworzony przez jego właściciela.
Dodatkowo, jeśli chcesz dać nieco więcej mocy / bezpieczeństwa osobom korzystającym z katalogu, możesz rozważyć trochę lepkiej. Zapobiegnie to na przykład user1
usunięciu user2_submission
(ponieważ ma -w-
na to pozwolenie group_dir
):
$ chmod +t group_dir/
Teraz, jeśli user1
spróbuje usunąć user2
katalog, dostanie piękny Operation not permitted
. Należy jednak pamiętać, że chociaż zapobiega to modyfikacjom struktury katalogów group_dir
, pliki i katalogi poniżej są nadal dostępne:
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)
Inną rzeczą, którą należy wziąć pod uwagę, jest to, że używane przez nas listy ACL konfigurują domyślne uprawnienia. W związku z tym właściciel elementu może zmienić uprawnienia z nim związane. Na przykład user2
może doskonale działać ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... dlatego jego pełny katalog zgłoszeń jest niedostępny dla wszystkich członków grupy.
Ponieważ jednak początkowo chcesz udzielić pełnego rws
dostępu każdemu w grupie, zakładam, że ufasz tym użytkownikom i nie spodziewałbyś się po nich zbyt wielu złośliwych operacji.