L'impostazione di un proprietario predefinito "automaticamente" richiederebbe una directory che si setuid
comporta come setgid
. Tuttavia, mentre questo può essere configurato su FreeBSD, altri sistemi UNIX e Linux semplicemente ignorano u+s
. Nel tuo caso, tuttavia, potrebbe esserci un'altra soluzione.
Quello che voglio è avere una directory che può essere condivisa aggiungendo un gruppo a un utente. Qualsiasi cosa creata in questa directory eredita lo schema di autorizzazione dal suo genitore. Se c'è un modo migliore di quello che sto tentando, sono tutto orecchie.
Quindi, sostanzialmente, da quello che vedo, vuoi controllare l'accesso a una directory usando il meccanismo dei gruppi. Tuttavia, ciò non richiede di limitare le autorizzazioni nell'intera struttura di directory. In realtà, il --x
bit di esecuzione della directory potrebbe essere proprio quello di cui hai bisogno. Lasciate che vi faccia un esempio. Supponendo che...
- Il gruppo che controlla l'accesso alla
group_dir
directory è ourgroup
.
- Solo le persone del
ourgroup
gruppo possono accedere group_dir
.
user1
e user2
appartengono a ourgroup
.
- Il umask predefinito è 0022.
... considera la seguente configurazione:
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
Supponiamo che ogni articolo sia stato creato dal suo proprietario.
Ora, in questa configurazione:
- Tutte le directory possono essere sfogliate liberamente da tutti
ourgroup
. Chiunque nel gruppo può creare, spostare, eliminare file ovunque all'interno group_dir
(ma non in profondità).
- Chiunque non ci
ourgroup
sarà verrà bloccato group_dir
e, pertanto, non sarà in grado di manipolare nulla sotto di esso. Ad esempio, user3
(che non è un membro di ourgroup
), non è in grado di leggere group_dir/user2_submission/README
(anche se ha l' r--
autorizzazione per il file stesso).
Tuttavia, in questo caso c'è un piccolo problema: a causa della tipica umask, gli elementi creati dagli utenti non possono essere manipolati da altri membri del gruppo. È qui che entrano in gioco gli ACL. Impostando le autorizzazioni predefinite, ti assicurerai che tutto vada bene nonostante il valore umask:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
Questa chiamata imposta:
rw(x)
Autorizzazioni predefinite per il proprietario.
rw(x)
Autorizzazioni predefinite per il gruppo.
- Nessuna autorizzazione per impostazione predefinita per gli altri. Si noti che poiché gli altri non possono accedere
group_dir
comunque, non importa davvero quali siano le loro autorizzazioni sottostanti.
Ora, se creo un elemento come user2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
Con questo ACL in atto, possiamo provare a ricostruire la nostra struttura precedente:
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
Anche in questo caso, ogni articolo viene creato dal suo proprietario.
Inoltre, se desideri dare un po 'più di potenza / sicurezza a coloro che usano la directory, potresti considerare un po' appiccicoso. Ciò, ad esempio, impedirebbe l' user1
eliminazione user2_submission
(poiché dispone -w-
dell'autorizzazione group_dir
):
$ chmod +t group_dir/
Ora, se user1
prova a rimuovere user2
la directory, otterrà un risultato adorabile Operation not permitted
. Si noti tuttavia che mentre ciò impedisce le modifiche alla struttura delle directory in group_dir
, i file e le directory sottostanti sono ancora accessibili:
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)
Un'altra cosa da tenere in considerazione è che gli ACL che abbiamo usato impostano le autorizzazioni predefinite . È quindi possibile per il proprietario di un articolo modificare le autorizzazioni ad esso associate. Ad esempio, user2
può funzionare perfettamente ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... quindi rendendo la sua directory di presentazione completa non disponibile per chiunque nel gruppo.
Tuttavia, poiché in origine sei disposto a dare pieno rws
accesso a chiunque nel gruppo, suppongo che ti fidi di questi utenti e che non ti aspetteresti troppe operazioni dannose da loro.