Ho cambiato i permessi di un file (chmod g+w testfile
) ed eseguendo ls -l testfile
dà:
-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile
Ho quindi aggiunto un utente a quel gruppo ("/etc/group ” ha user1:x:1000:user2
riga), ma non riesco a modificare quel file come utente2. Perché è così?
Risposta accettata:
user2
deve disconnettersi e riconnettersi. Le autorizzazioni di gruppo funzionano in questo modo:
- Quando accedi, i tuoi processi ottengono l'appartenenza a un gruppo nel tuo gruppo principale menzionato in
/etc/passwd
, più tutti i gruppi in cui il tuo utente è menzionato in/etc/group
. (Più precisamente, ilpw_gid
campo ingetpw(your_uid)
, più tutti i gruppi di cui l'utente è un membro esplicito. Oltre/etc/passwd
e/etc/group
, le informazioni possono provenire da altri tipi di database utente come NIS o LDAP.) Il gruppo principale diventa l'ID gruppo effettivo del processo e gli altri gruppi diventano i suoi ID gruppo supplementari. - Quando un processo esegue un'operazione che richiede l'appartenenza a un determinato gruppo, ad esempio l'accesso a un file, quel gruppo deve essere l'ID gruppo effettivo o uno degli ID gruppo supplementari del processo.
Come puoi vedere, la tua modifica all'appartenenza al gruppo dell'utente ha effetto solo quando l'utente effettua l'accesso. Per i processi in esecuzione, è troppo tardi. Quindi l'utente deve disconnettersi e riconnettersi. Se è troppo difficile, l'utente può accedere a una sessione separata (ad esempio su una console diversa o con ssh localhost
).
Sotto il cofano, un processo può sempre e solo perdere privilegi (ID utente, ID gruppo, capacità). Il kernel avvia init
processo (il primo processo dopo l'avvio) in esecuzione come root e ogni processo è in definitiva discendente da quel processo¹. Il login
process (o sshd
, o la parte del desktop manager che effettua l'accesso) è ancora in esecuzione come root. Parte del suo lavoro consiste nell'abbandonare i privilegi di root e passare all'utente e ai gruppi appropriati.
C'è una sola eccezione:l'esecuzione di un programma setuid o setgid. Quel programma riceve autorizzazioni aggiuntive:può scegliere di agire in vari sottoinsiemi delle appartenenze del processo padre più l'appartenenza aggiuntiva all'utente o al gruppo che possiede l'eseguibile setxid. In particolare, un programma di root setuid ha i permessi di root, quindi può fare tutto²; ecco come programmi come su
e sudo
possono fare il loro lavoro.
¹ A volte ci sono processi che non derivano da init (initrd, udev) ma il principio è lo stesso:inizia come root e perdi i privilegi nel tempo.
² Blocco di framework di sicurezza multilivello come SELinux.