9.3. Gestione dei permessi
Linux è decisamente un sistema multi-utente, per cui è necessario fornire un sistema di permessi per il controllo delle operazioni autorizzate su file e directory, che comprende tutte le risorse di sistema e i device (in un sistema Unix, qualsiasi dispositivo è rappresentato da un file o directory). Questo principio è comune a tutti i sistemi Unix, ma un promemoria è sempre utile, soprattutto perché ci sono alcuni utilizzi avanzati interessanti e relativamente sconosciuti.
Ogni file o directory ha permessi specifici per tre categorie di utenti:
il proprietario (simboleggiato dalla lettera u
di «user»);
il gruppo proprietario (simboleggiato dalla lettera g
di «group»), in rappresentanza di tutti i membri del gruppo;
gli altri (simboleggiati dalla lettera o
di «other»).
Si possono combinare tre tipi di diritti:
lettura (simboleggiata dalla lettera r
di «read»);
scrittura (o modifica, simboleggiata dalla lettera w
di «write»);
esecuzione (simboleggiata dalla lettera x
come in «eXecute»).
Nel caso di un file, questi diritti sono di facile comprensione: l'accesso in lettura permette di leggerne il contenuto (incluso farne una copia), l'accesso in scrittura permette di cambiarlo, e l'accesso in esecuzione permette di eseguirlo (che funziona solo se si tratta di un programma).
Una directory è gestita in modo diverso. L'accesso in lettura dà il diritto di consultare l'elenco delle sue voci (file e directory), l'accesso in scrittura permette di creare o eliminare file, mentre l'accesso in esecuzione permette di attraversarla (soprattutto di andarvi con il comando cd
). Essere in grado di attraversare una directory senza essere in grado di leggerla dà il permesso di accedere alle voci al suo interno di cui si conosce il nome, ma non di trovarle senza sapere che esistono o sotto quale nome esatto.
Tre comandi controllano i permessi associati ad un file:
chown utente file
cambia il proprietario del file;
chgrp gruppo file
cambia il gruppo proprietario;
chmod permessi file
cambia i permessi per il file.
Ci sono due modi di rappresentare i permessi. Tra questi, la rappresentazione simbolica è probabilmente la più facile da capire e ricordare. Utilizza i simboli lettera descritti in precedenza. È possibile definire i permessi per ogni categoria di utenti (u
/g
/o
), impostandoli in modo esplicito (con =
), aggiungendone (+
) o sottraendone (-
). Così la formula u=rwx,g+rw,o-r
conferisce al proprietario i permessi di lettura, scrittura ed esecuzione, aggiunge i permessi di lettura e scrittura per il gruppo proprietario, e rimuove i diritti di lettura per altri utenti. I permessi non alterati con le aggiunte o sottrazioni fatte da tale comando non vengono modificati. La lettera a
, per «all» (tutti), copre tutte le tre categorie di utenti, così che a=rx
garantisce a tutte e tre le categorie gli stessi diritti (lettura ed esecuzione, ma non scrittura).
La rappresentazione numerica (ottale) associa ogni permesso ad un valore: 4 per la lettura, 2 per la scrittura e 1 per l'esecuzione. Ogni combinazione di permessi viene associata con la somma delle cifre. I valori vengono quindi assegnati alle diverse categorie di utenti mettendoli in fila nell'ordine consueto (proprietario, gruppo, altri).
Ad esempio, il comando chmod 754 file
imposta i seguenti permessi: lettura, scrittura ed esecuzione per il proprietario (perché 7 = 4 + 2 + 1), lettura ed esecuzione per il gruppo (perché 5 = 4 + 1), sola lettura per gli altri. Il numero 0
significa che non si hanno permessi; così chmod 600 file
permette la lettura/scrittura per il proprietario, e nessun diritto per chiunque altro. Le combinazioni di permessi più frequenti sono 755
per le directory e i file eseguibili, e 644
per i file di dati.
Per rappresentare i permessi speciali, è possibile anteporre una quarta cifra a questo numero in base allo stesso principio, in cui il bit setuid
, il bit setgid
e lo sticky
bit sono rispettivamente 4, 2 e 1. chmod 4754
assocerà il bit setuid
con i permessi descritti in precedenza.
Si noti che l'uso della notazione ottale consente solo di impostare tutti i permessi in una sola volta su un file, non è possibile utilizzarla per aggiungere semplicemente un nuovo permesso, come l'accesso in lettura per il gruppo proprietario, in quanto è necessario tener conto dei diritti esistenti e calcolare il nuovo valore numerico corrispondente.