19.2. Utenti e diritti di accesso

Linux fu concepito fin dall'inizio come sistema multiutente, cioè per l'uso contemporaneo da parte di più utenti.

Per poter iniziare una sessione di lavoro, ogni utente deve inserire una password, ovvero eseguire il "login". A questo scopo, l'utente possiede un proprio nome utente con la relativa password. Questa differenziazione degli utenti garantisce che gli utenti non autorizzati non possono vedere il contenuto dei file di cui non hanno il permesso. Generalmente, gli utenti normali non possono apportare (o possono farlo solo molto limitatamente) modifiche sostanziali al sistema – per esempio l'installazione di nuovi programmi. Solo root, detto anche super utente, dispone del diritto di apportare modifiche al sistema e ha accesso illimitato a tutti i file. Chi usa avvedutamente questo concetto, cioè si immette nel sistema come root solo se strettamente necessario, può limitare il pericolo di una perdita accidentale di dati. Poiché normalmente solo il super utente può cancellare file di sistema o può formattare i dischi rigidi, il pericolo derivante dai cavalli di troia o dall'inavvertita immissione di comandi distruttivi è molto ridotto.

19.2.1. Diritti nel filesystem

Fondalmentalmente, ogni file nei filesystem di Linux appartiene ad un utente e ad un gruppo. Ad ognuno dei due proprietari, ma anche agli altri utenti, possono venire assegnati diritti di scrittura, lettura ed esecuzione.

Un gruppo, in questo caso, può essere definito come un insieme di utenti con determinati diritti collettivi: un determinato gruppo di lavoro che lavora ad un progetto specifico, progetto3, potrebbe essere uno di questi gruppi. Ogni utente in un sistema Linux è membro di almeno un gruppo, di solito users, è possibile creare un numero qualsiasi di altri gruppi, questo è però possibile solo per root. Con il comando groups, ogni utente può scoprire di quale gruppo fa parte.

Diritti sui file

Osserviamo da vicino la struttura dei diritti di accesso nel file system. Incominciamo dai file. Un tipico output di ls -l vi mostra l'esempio Esempio 19.1, “Esempio di output dei diritti di accesso dei file”

Esempio 19.1. Esempio di output dei diritti di accesso dei file

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

Come potrete vedere nella seconda colonna, questo file appartiene all'utente tux ed è assegnato al gruppo progetto3. Per poter vedere i diritti utente sul file Roadmap, dobbiamo osservare più attentamente la prima colonna.

-

rw-

r--

---

Tipo

Permessi per l'utente

Permessi per il gruppo

Permessi per gli altri utenti

Questa colonna consiste di un carattere iniziale seguito da nove caratteri raggruppati a tre a tre. Il primo dei dieci caratteri indica il tipo dell'elemento elencato del filesystem. Il trattino () ci indica che si tratta di un file. Potremmo anche trovare una directory (d), un collegamento (l), un dispositivo a blocchi (b) oppure a caratteri (c).

I tre blocchi seguenti seguono uno schema uniforme. Il primo carattere di ogni blocco indica se il file è leggibile (r) o no (). Una w in posizione centrale indica che l'oggetto corrispondente può essere modificato, mentre un trattino () indica che non è possibile scrivere sul file. Infine, una x in terza posizione indica che l'oggetto può essere eseguito. Poiché il file del nostro esempio è un file di testo e non un file eseguibile, non è necessario il diritto di esecuzione di questo file.

Nel nostro esempio, tux ha, come proprietario del file Roadmap, permesso di lettura (r) e scrittura (w) su di esso, ma non può eseguirlo (nessuna x). I membri del gruppo progetto3 possono leggere il file, ma non modificarlo o eseguirlo. Gli altri utenti non hanno alcun diritto su questo file.Le cosiddette ACLAccess Control Lists permettono di cesellare in modo ancor più mirato i diritti, vedete a riguardo Sezione 19.2.6, “Access Control List” e il capitolo Access Control Lists in Linux nel Manuale di amministrazione.

Diritti sulle directory

Diamo ora un'occhiata ai diritti di accesso alle directory, il cui tipo è d). In questo caso, alcuni diritti si differenziano leggermente da quanto sopra spiegato. Tanto per fare un esempio:

Esempio 19.2. Esempio di output dei diritti di accesso delle directory:

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

Nell'esempio Esempio 19.2, “Esempio di output dei diritti di accesso delle directory:”, si possono riconoscere facilmente il proprietario (tux) e il gruppo di proprietari (progetto3) della directory DatiProgetto. Al contrario dei diritti di accesso ai file descritti in Diritti sui file, il diritto di lettura impostato (r) indica che il contenuto della directory può essere mostrato. Il diritto di scrittura (w) significa che possono essere creati nuovi file. Il diritto di esecuzione (x) indica che l'utente può entrare in questa directory. Riferendoci all'esempio qui sopra, ciò significa che sia l'utente tux sia i membri del gruppo progetto3 possono entrare nella directory DatiProgetto (x), possono vederne il contenuto (r) e vi possono creare nuovi file (w). Tutti gli altri utenti invece hanno meno diritti; possono solo entrare nella directory (x) o guardarvi dentro (r), ma non vi possono archiviare nuovi file (w).

19.2.2. Modificare i diritti dei file

modificare i diritti di accesso

I diritti di accesso di un file o di una directory possono venire modificati dal proprietario (e naturalmente anche da root) con il comando chmod che deve essere immesso assieme ai parametri previsti per i diritti da modificare ed assieme ai nomi dei file da modificare.

Entrambi i parametri sono composti da:

  1. le categorie interessate

    • u user – il proprietario del file

    • g group – ; il gruppo del proprietario

    • o others – gli altri utenti (se non si indica alcun parametro, le modifiche si applicano a tutte le categorie)

  2. un carattere per rimuovere (), per impostare (=) o per aggiungere (+)

  3. le abbreviazioni già conosciute per

    • rread – leggere

    • w write – scrivere

    • x execute –eseguire

  4. il nome o i nomi dei file separati da spazi

Se, per esempio, l'utente tux nell'esempio Esempio 19.2, “Esempio di output dei diritti di accesso delle directory:” vuole concedere anche agli altri utenti il diritto di scrittura (w) sulla directory DatiProgetto, può farlo con il comando chmod o+w DatiProgetto

Se, invece, l'utente preferisce sottrarre a tutti tranne sé stesso il diritto di scrittura, immetterà  il comando chmod go-w Datiprogetto. Per vietare a tutti gli utenti di creare un file nella directory DatiProgetto, si inserisca chmod -w DatiProgetto. Con questo comando, neanche il proprietario del file potrà  avervi accesso senza ripristinare i suoi diritti di scrittura.

Modificare i diritti di proprietà 

Altri comandi importanti che regolano i rapporti di proprietà  delle componenti del file system sono chown (Change Owner) e chgrp (Change Group). Il comando chown serve a modificare il proprietario del file indicato. Solo root è in grado di eseguire questa modifica.

Supponiamo che il file Roadmap dell'esempio Esempio 19.2, “Esempio di output dei diritti di accesso delle directory:” non debba più appartenere a tux, ma all'utente geeko. L'utente root dovrebbe in tal caso immettere il seguente comando: chown geeko Roadmap.

Il comando chgrp è altrettanto chiaro: cambia l'appartenenza del gruppo di un file. Dovete tenere presente, tuttavia, che il proprietario del file deve essere membro del nuovo gruppo. L'utente tux dell'esempio Esempio 19.1, “Esempio di output dei diritti di accesso dei file” può cambiare il gruppo di proprietari del file DatiProgetto in progetto4, a patto che egli sia membro di questo nuovo gruppo, immettendo il comando chgrp projekt4 Datuprogetto. Per root, questa restrizione non vale.

19.2.3. Il bit setuid

Per ampliare temporaneamente i diritti di accesso ad alcuni file o directory ed eseguire delle operazioni particolari, Linux vi offre dei meccanismi di modifica dell'identità  dell'utente e del gruppo in questione. Per esempio, il comando passwd rchiede solitamente i privilegi di root per accedere al file /etc/passwd. Questo file contiene informazioni vitali per il sistema, come gli ID degli utenti, i percorsi delle directory home ecc., per questo motivo non è consentita la modifica agli utenti normali. Una soluzione possibile consiste nell'usare il meccanismo di setuid. Setuid (set user ID) è un attributo speciale dei file che indica al sistema che il file deve essere eseguito con l'ID di un particolare utente. Consideriamo il comando passwd:

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

Notate il bit impostato a s in corrispodnenza dei permessi dell'utente. Con questo bit impostato, tutti gli utenti che eseguono passwd lo eseguiranno come se fossero root.

19.2.4. Il bit setgid

L'attributo Setuid si usa con gli utenti. Per i gruppi, esiste l'attributo Setgid, che permette di eseguire un programma con l'ID di gruppo con la quale sia stato salvato, indipendentemente dall'utente che lo abbia avviato. Pertanto, per una directory con l'attibuto setgid, tutti i vuovi file e le nuove sottodirectory vengono attribuite al gruppo a cui appartiene la directory. Vediamo un esempio:

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

Potete notare il bit impostato a s per i permessi del gruppo. Il proprietario della directory e i membri del gruppo archive possono accedere. Gli utenti che sono membri di questo grupppo sono “mappati” al rispettivo gruppo, il gruppo effettivo di tutti i file creati sarà impostato a archive. Per esempio: un programma di backup che viene eseguito con ID del gruppo uguale a archive, avrà accesso alla directory pur non essendo root.

19.2.5. Il bit sticky

Oltre a setuid e setgid, vi presentiamo anche il cosiddetto sticky bit. Questo bit viene usato con i programmi eseguibili e con le directory. Per i file, lo "sticky bit" non si usa quasi più ed è interessante solo dal punto di vista storico: era usato per indicare che il file doveva essere caricato nella memoria RAM per consentire un accesso più rapido. Attribuendo questo bit ad una directory, si può impedire che gli utenti si cancellino dei file a vicenda (i file di una directory con questo attributo possono essere cancellati solo dai proprietari). Un esempio tipico sono le directory /tmp e/var/tmp:

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

19.2.6. Access Control List

Al tradizionale concetto dei diritti sui file e directory di Linux, descritto nei paragrafi precedenti, si aggiungono le cosiddette ACL Access Control Lists che consentono di dare il diritto di accesso oltre al proprietario e al gruppo proprietario anche da altri utenti e gruppi.

Le directory e file con diritti di accesso estesi si riconoscono dopo aver immesso un ls -l:

-rw-r--r--+  1 tux  projekt3   517 2003-01-08 18:12 Roadmap

A prima vista l'output del comando ls non è cambiato tanto. Il file Roadmap appartiene all 'utente tux che appartiene al gruppo progetto3. tux ha sia acceso in lettura che scrittura per questo file, il gruppo e gli altri hanno accesso in lettura. L'unica differenza rispetto ad un file senza ACL è rappresentato da un + nella prima colonna dei bit dei permessi.

Se volete avere dei dettagli inerenti alla ACL, immettete getfacl Roadmap:

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

Le prime tre righe non forniscono alcuna informazione aggiuntiva rispetto al comando ls -l. Qui vedete il nome del file, il proprietario e il gruppo. Dalla quarta riga alla nona avete le registrazioni delle ACL. I diritti sui file sono un sottoinsieme di quelli che possono essere stabiliti con l'aiuto delle ACL. Nell'ACL di esempio, il proprietario del file e l'utente jane hanno il diritto di lettura e di scrittura, dunque si tratta di una estensione (righe 4 e 5). Idem per i gruppi. Il gruppo del proprietario del file ha l'accesso in scrittura (riga 6), per il grupppo djungle vi è l'accesso in scrittura e lettura. La voce mask nell'ottava riga limita i diritti per l'utente jane ed il gruppo djungle al solo accesso in lettura. Gli altri utenti o gruppi non hanno alcun accesso (riga 9).

In questa sezione sono state presentate solo alcune informazioni elementari sulle ACL, per ulteriori informazioni consultate il Manuale di amministrazione.


SUSE LINUX Manuale dell'utente 9.3