Ho un problema con le autorizzazioni su un server Linux. Sono abituato a BSD. Quando una directory è di proprietà di un gruppo in cui l'utente che la possiede non si trova, ad esempio www-data, i file creati in essa saranno di proprietà di quel gruppo. Questo è importante perché voglio che i file siano leggibili dal server web (che non eseguirò come root), ma così un utente può comunque inserire nuovi file nella directory. Non posso inserire gli utenti in www-data perché possono leggere tutti i siti Web degli altri utenti.
Voglio che il server web legga tutti i siti web, voglio che gli utenti possano cambiare i propri.
I permessi sono impostati in questo modo sulle cartelle al momento….
drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john
È un comportamento standard su BSD che le autorizzazioni funzionino in questo modo. Come posso convincere Linux a farlo?
Risposta accettata:
Sembra che tu stia descrivendo la funzionalità di setgid bit in cui quando una directory che lo ha impostato, forzerà tutti i nuovi file creati al suo interno ad avere il loro gruppo impostato sullo stesso gruppo impostato nella directory principale.
Esempio
$ whoami
saml
$ groups
saml wheel wireshark
imposta una directory con permessi + proprietà
$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/
tocca un file come saml in questa directory
$ whoami
saml
$ touch somedir/afile
$ ll somedir/afile
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile
Questo ti darà approssimativamente quello che sembra che tu voglia. Se vuoi davvero esattamente ciò che hai descritto, penso che dovrai ricorrere alla funzionalità degli elenchi di controllo di accesso per ottenerlo (ACL).
ACL
Se vuoi avere un po' più di controllo sui permessi sui file che vengono creati nella directory, somedir
, puoi aggiungere la seguente regola ACL per impostare le autorizzazioni predefinite in questo modo.
prima
$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir
imposta le autorizzazioni
$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/
Nota il +
alla fine, ciò significa che a questa directory sono applicati ACL.
$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---
dopo
$ touch somedir/afile
$ ll somedir/afile
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$
$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x #effective:r--
group:apache:r-x #effective:r--
mask::r--
other::---
Avviso con le autorizzazioni predefinite (setfacl -Rdm
) impostato in modo che i permessi siano (r-x
) per impostazione predefinita (g:apache:rx
). Questo costringe tutti i nuovi file ad avere solo il loro r
bit abilitato.