27.2. Utenti e autorizzazioni di accesso

Sin dall'inizio nei primi anni novanta, Linux è stato sviluppato come un sistema multi-utente. Un numero qualsiasi di utenti può utilizzarlo contemporaneamente. Gli utenti devono eseguire il login al sistema prima di avviare una sessione nella propria workstation. Ogni utente dispone di un nome utente e di una parola d'ordine corrispondente. Questa differenziazione di utenti garantisce che utenti non autorizzati non possano accedere ai file per i quali non dispongono dell'autorizzazione. Modifiche al sistema più rilevanti, ad esempio l'installazione dei nuovi programmi, non sono in genere possibili o limitate per normali utenti. Solo l'utente radice o il superutente ha la capacità senza restrizioni di apportare modifiche al sistema e dispone di un accesso illimitato a tutti i file. Coloro che utilizzano questo concetto in modo appropriato, eseguendo il login con l'accesso root completo quando necessario, possono ridurre il rischio di una perdita involontaria di dati. Poiché in normali circostanze solo root può cancellare file del sistema o formattare i dischi rigidi, la minaccia proveniente dall'effetto del cavallo di Troia o da un'immissione accidentale di comandi distruttivi può essere ridotta in modo significativo.

27.2.1. Autorizzazioni del file system

In genere, ogni file in un file system Linux appartiene a un utente e a un gruppo. Entrambi questi gruppi proprietari e tutti gli altri possono essere autorizzati a scrivere, leggere o eseguire questi file.

Un gruppo, in questo caso, può essere definito come un insieme di utenti collegati con determinati diritti collettivi. Ad esempio, denominare un gruppo che lavora su un determinato progetto project3. Ogni utente in un sistema Linux è un membro di almeno un gruppo proprietario, in genere users. In un sistema possono essere presenti tutti i gruppi necessari, ma solo root è in grado di aggiungere gruppi. Ogni utente può individuare, con il comando groups, di quali gruppi è membro.

Accesso ai file

L'organizzazione delle autorizzazioni nel file system differisce per file e directory. Le informazioni sulle autorizzazioni dei file possono essere visualizzate con il comando ls -l. L'output potrebbe presentare il formato mostrato in Esempio 27.1, «Output di esempio con le autorizzazioni dei file».

Esempio 27.1. Output di esempio con le autorizzazioni dei file

-rw-r----- 1 tux project3 14197 Jun 21  15:03 Roadmap

Come mostrato nella terza colonna, il file appartiene all'utente tux. È assegnato al gruppo project3. Per individuare le autorizzazioni utente del file Roadmap, la prima colonna deve essere esaminata molto attentamente.

-

rw-

r--

---

Tipo

Autorizzazioni degli utenti

Autorizzazioni del gruppo

Autorizzazioni per altri utenti

Questa colonna è composta da un carattere iniziale seguito da nove caratteri suddivisi in tre gruppi. La prima delle dieci lettere indica il tipo di componente del file system. Il trattino (-) indica che si tratta di un file. Possono essere indicate anche una directory (d), un collegamento (l), un dispositivo a blocchi (b) o un dispositivo a caratteri.

I tre blocchi successivi seguono uno schema standard. I primi tre caratteri indicano se il file è leggibile (r) o meno (-). Il carattere w nella parte centrale indica che l'oggetto corrispondente può essere modificato, mentre un trattino (-) indica che non è possibile scrivere sul file. Il carattere x in terza posizione indica che l'oggetto può essere eseguito. Poiché il file in questo esempio è un file di testo e non è quindi eseguibile, l'accesso eseguibile per questo determinato file non è necessario.

In questo esempio, tux dispone, come proprietario del file Roadmap, dell'accesso in lettura (r) e scrittura (w), ma non può eseguirlo (x). I membri del gruppo project3 possono leggere il file, ma non possono modificarlo o eseguirlo. Altri utenti non dispongono di alcun accesso a questo file. Altre autorizzazioni possono essere assegnate mediante gli elenchi di controllo dell'accesso (ACL, Access Control Lists). Per ulteriori informazioni, vedere la Sezione 27.2.6, «Elenchi di controllo dell'accesso».

Autorizzazioni delle directory

Le autorizzazioni di accesso per le directory sono indicate dal carattere d. Per le directory, le singole autorizzazioni hanno un significato leggermente differente.

Esempio 27.2. Output di esempio con le autorizzazioni delle directory

drwxrwxr-x 1 tux project3 35 Jun 21 15:15  ProjectData

In Esempio 27.2, «Output di esempio con le autorizzazioni delle directory», il proprietario (tux) e il gruppo proprietario (project3) della directory ProjectData sono facili da riconoscere. In contrasto con le autorizzazioni di accesso ai file da Accesso ai file, l'autorizzazione di lettura impostata (r) indica che è possibile mostrare il contenuto della directory. L'autorizzazione di scrittura (w) indica che è possibile creare nuovi file. L'autorizzazione eseguibile (x) indica che l'utente può passare questa directory. Nell'esempio precedente, l'utente tux nonché i membri del gruppo project3 possono passare alla directory ProjectData (x), visualizzare il contenuto (r) e aggiungervi o cancellare nuovi file (w). Al resto degli utenti invece viene concesso un accesso limitato. Possono immettere la directory (x) e accedere ad essa (r), ma non inserire alcun nuovo file (w).

27.2.2. Modifica delle autorizzazioni dei file

Modifica delle autorizzazioni di accesso

Le autorizzazioni di accesso di un file o di una directory possono essere modificate dal proprietario e da root con il comando chmod seguito dai parametri per la modifica delle autorizzazioni e uno o più nomi file. I parametri costituiscono differenti categorie:

  1. utenti interessati

    • u (user, utente) - proprietario del file

    • g (group, gruppo) - gruppo proprietario del file

    • o (others, altri) - altri utenti (se non viene specificato alcun parametro, le modifiche vengono applicate a tutte le categorie)

  2. un carattere per la cancellazione (-), l'impostazione (=) o l'inserimento (+)

  3. abbreviazioni

    • r - read

    • w - write

    • x - execute

  4. nomefile o nomifile separati da spazi

Se ad esempio l'utente tux in Esempio 27.2, «Output di esempio con le autorizzazioni delle directory» desidera concedere anche ad altri utenti l'accesso in scrittura (w) alla directory ProjectData, può effettuare questa operazione utilizzando il comando chmod o+w ProjectData.

Se tuttavia desidera negare le autorizzazioni di scrittura a tutti gli altri utenti, può effettuare questa operazione immettendo il comando chmod go-w ProjectData. Per impedire a tutti gli utenti di aggiungere un nuovo file alla cartella ProjectData, immettere chmod -w ProjectData. In questo modo, anche al proprietario verrà negata la scrittura sul file. Tale operazione sarà possibile solo dopo aver ripristinato le autorizzazioni di scrittura.

Modifica delle autorizzazioni di proprietà

Altri importanti comandi per il controllo della proprietà e delle autorizzazioni dei componenti del file system sono chown (change owner, proprietario della modifica) e chgrp (change group, gruppo della modifica). Il comando chown può essere utilizzato per trasferire la proprietà di un file a un altro utente. Tuttavia, solo a root è permesso eseguire questa modifica.

Si supponga che il file Roadmap di Esempio 27.2, «Output di esempio con le autorizzazioni delle directory» non appartenga più a tux, ma all'utente geeko. root deve quindi immettere chown geeko Roadmap.

chgrp modifica la proprietà del gruppo relativa al file. Tuttavia, il proprietario deve essere un membro del nuovo gruppo. In questo modo, l'utente tux da Esempio 27.1, «Output di esempio con le autorizzazioni dei file» può modificare il gruppo proprietario del file ProjectData passando a project4 con il comando chgrp project4 ProjectData, finché è membro di questo nuovo gruppo.

27.2.3. Bit setuid

In determinate situazioni, le autorizzazioni di accesso possono essere troppo restrittive. Quindi, in Linux sono disponibili impostazioni aggiuntive che consentono di eseguire una modifica temporanea dell'identità del gruppo e dell'utente attuale per una specifica azione. Ad esempio, il programma passwd in genere richiede autorizzazioni root per l'accesso a /etc/passwd. Questo file contiene alcune informazioni importanti, ad esempio le home directory degli utenti, ID utente e di gruppo. Quindi, un normale utente non è in grado di modificare passwd, poiché risulta troppo pericoloso concedere a tutti gli utenti accesso diretto a questo file. Una possibile soluzione a questo problema è il meccanismo setuid. setuid, (set user ID, ID utente impostato) è un particolare attributo di file che indica al sistema di eseguire programmi contrassegnati da un ID utente specifico. Considerare il comando passwd:

			-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

Si noti che la s indica che il bit setuid è impostato per l'autorizzazione utente. Mediante il bit setuid, tutti gli utenti che avviano il comando passwd lo eseguono come root.

27.2.4. Bit setgid

Il bit setuid viene applicato a tutti gli utenti. Tuttavia, esiste anche una caratteristica equivalente per i gruppi: il bit setgid. Un programma per cui è stato impostato questo bit viene eseguito con l'ID gruppo con cui è stato salvato, indipendentemente dall'utente che lo avvia. Quindi, in una directory con il bit setgid, tutte le sottodirectory e i file nuovi vengono assegnati al gruppo a cui la directory appartiene. Considerare la seguente directory di esempio:

drwxrws--- 2 tux archive 48 Nov 19 17:12
   backup

Si noti che la s indica che il bit setgid è impostato per l'autorizzazione del gruppo. Il proprietario della directory e i membri del gruppo archive possono accedere a questa directory. Gli utenti che non sono membri di questo gruppo sono «mappati» sul gruppo rispettivo. Il gruppo ID effettivo di tutti i file scritti sarà archive. Ad esempio, un programma di backup che viene eseguito con l'ID di gruppo archive è in grado di accedere a questa directory anche senza privilegi dell'utente root.

27.2.5. Bit sticky

È disponibile anche il bit sticky. Esiste una differenza che dipende dall'appartenenza a una directory o a un programma eseguibile. Se tale bit appartiene a un programma, un file così contrassegnato viene caricato nella RAM per evitare di doverlo recuperare dal disco rigido ogni volta che viene utilizzato. Questo attributo viene utilizzato raramente, poiché i dischi rigidi moderni sono abbastanza rapidi. Se questo attributo viene assegnato a una directory, impedisce agli utenti di cancellare i file tra di loro. I tipici esempi includono le directory /tmp e /var/tmp:

drwxrwxrwt   2 root  root   1160 2002-11-19 17:15 /tmp
  

27.2.6. Elenchi di controllo dell'accesso

Il concetto di autorizzazioni tradizionale per gli oggetti del file system Linux, ad esempio file o directory, può essere completato includendo gli elenchi di controllo dell'accesso (ACL, Access Control Lists). Consentono di assegnare le autorizzazioni a singoli utenti o gruppi diversi dal proprietario o dal gruppo proprietario originale di un oggetto del file system.

I file o le directory con autorizzazioni di accesso estese possono essere rilevate con il semplice comando ls -l:

-rw-r--r--+ 1 tux project3 14197 Jun 21  15:03 Roadmap

Roadmap è di proprietà di tux che appartiene al gruppo project3. tux dispone dell'accesso in lettura e scrittura a questo file. Il gruppo nonché tutti gli altri utenti dispongono dell'accesso in lettura. L'unica differenza che distingue questo file da uno senza un ACL è il segno + aggiuntivo nella prima colonna contenente i bit delle autorizzazioni.

Per dettagli sull'ACL, eseguire getfacl Roadmap:

# file: Roadmap
# owner: tux
# group: project3
user::rw-
user:jane:rw-       effective: r--
group::r--
group:djungle:rw-   effective: r--
mask::r--
other::---

Le prime righe dell'output contengono informazioni disponibili con ls -l. Queste righe indicano solo il nome file, il proprietario e il gruppo proprietario. Le righe 4-9 contengono gli elementi ACL. Le autorizzazioni di accesso convenzionali rappresentano un sottoinsieme di quelle possibili quando si utilizzano gli ACL. Nell'ACL di esempio viene concesso l'accesso in lettura e scrittura al proprietario del file nonché all'utente gianni (righe 4-5). Il concetto convenzionale è stato ampliato concedendo l'accesso a un altro utente. Le stesse indicazioni vengono applicate alla gestione dell'accesso del gruppo. Il gruppo proprietario dispone delle autorizzazioni di lettura (riga 6) e il gruppo alfa dispone delle autorizzazioni di lettura e scrittura. La voce mask nella riga 8 riduce le autorizzazioni effettive per l'utente gianni e il gruppo alfa all'accesso in lettura. Altri utenti e gruppi non ottengono alcun tipo di accesso al file (riga 9).

Finora sono state fornite solo informazioni di base. Per ulteriori informazioni sulle ACL, vedere il Capitolo 24, Elenchi di controllo dell'accesso in Linux.