Cap 12

CAPITOLO
12
UTENTI, GRUPPI E PERMESSI
Pietro Buffa
In seguito ad un’installazione riuscita di GNU/Linux, vengono generalmente configurati minimo due account:
l’account di amministrazione (root) ed un normale account utente generico. Ciascun utente è libero di
personalizzare il proprio ambiente di lavoro non può apportare sostanziali modifiche al sistema in quanto
generalmente sottoposto, per motivi di sicurezza, a tutta una serie di restrizioni. Detto questo, sappiate che
l’account root non è il solo “account speciale” che viene impostato, esistono tutta una quantità di account come
bin, daemon, adm, lp, mail ed altri, impostati di default. Questi account, generalmente nascosti all’utente
normale, non anno una password perché non sono progettati per il login ma vengono utilizzati da GNU/Linux
per vari scopi e per questo detti “account di sistema”. Non eliminateli, pena l’esecuzione di alcuni programmi.
12.1 IL FILE /etc/passwd
L’aggiunta e l’eliminazione degli utenti è una cosa semplice, specialmente se utilizziamo i diversi tools grafici
messi a disposizione da ormai tutte le distribuzioni GNU/Linux per gestire le utenze. La chiave di tutto è però,
come sempre, la comprensione dei relativi file di configurazione che stanno “dietro” a queste applicazioni. Tutti
gli account, compresi quelli speciali di sistema, si trovano memorizzati nel file /etc/passwd, la Fig. 12.1 in basso
mostra come potrebbe presentarsi ai vostri occhi tale file.
Fig. 12.1 Ecco come si presenta il file /etc/passwd.
Ogni riga rappresenta un utente, le informazioni per ciascun utente sono separate in sette campi delimitati dai
due punti (:) e descritti di seguito:
51
1.
2.
3.
4.
5.
6.
7.
Il primo campo è il nome utente o l’ID di login, esso deve essere univoco.
Il secondo campo è il campo della password. Una “x” in questo campo indica che vengono utilizzate
“shadow password” ossia le effettive password codificate sono salvate in un file separato per motivi di
sicurezza che spiegheremo più avanti.
Il terzo campo riguarda il numero ID utente, esso deve essere univoco.
Il quarto campo riguarda il numero ID di gruppo (GID).
Il quinto campo è un campo dedicato ai commenti, esso in genere contiene il nome completo dell’utente
(il suo nome originale).
Il sesto campo indica la home directory dell’utente.
Il settimo campo indica la shell di default dell’utente.
Nuovi account possono essere creati direttamente mediante la modifica del file di configurazione /etc/passwd ma
le password devono necessariamente essere create mediante apposite utility (passwd), che si occuperanno della
generazione della necessaria codifica.
12.2 PASSWORD
L’accesso a qualsiasi account è controllato mediante password. La password, anche se codificata, veniva un
tempo memorizzata nel file /etc/passwd, insieme a tutte le altre informazioni. Chiunque quindi poteva vedere le
password codificate in quanto tale file deve essere necessariamente reso visibile a chiunque per via del suo
utilizzo in molte applicazioni. L’utente più smaliziato poteva quindi copiare tale file nella sua home directory,
acquisire tutti i permessi necessari sul file e con un programma apposito per decifrare stringhe crittografate
(Johon the Ripper, tanto per citarne uno…), poteva utilizzare le password risultanti dall’eleborazione del
programma ed accedere così a regioni riservate del sistema. Proprio per contrastare questa potenziale minaccia, è
stato introdotto il concetto di shadow password. Memorizzando le password in un file separato, chiamato
/etc/shadow, diventò possibile mantenere il file /etc/passwd leggibile da parte di tutti gli utenti, ma al tempo
stesso rendere il file contenente le password codificate leggibile soltanto all’utente root. Il file /etc/shadow ha un
aspetto simile a quello mostrato nella Fig. 12.2.
Fig. 12.2 Ecco come si presenta il file /etc/shadow.
Ogni riga rappresenta un utente, le informazioni sulla password per ciascun utente sono separate in sette campi
delimitati dai due punti (:) e descritti di seguito:
52
1.
2.
3.
4.
5.
6.
7.
8.
9.
Nome account utente.
Campo della password codificata.
Giorni trascorsi da quando la password è stata cambiata per l’ultima volta.
Numero di giorni che devono trascorrere prima che la password possa essere nuovamente cambiata.
Numero di giorni dopo i quali la password deve essere cambiata (-1 significa mai).
Numero di giorni prima della scadenza della password a partire dai quali l’utente riceverà un
avvertimento al login.
Numero di giorni successivi alla scadenza della password dopo i quali l’account viene disattivato se la
password non viene modificata con successo.
Giorni trascorsi da quando l’account è stato disattivato.
Un campo riservato.
Per crittografare le password Linux utilizza un algoritmo di crittografia a seso unico chiamato DES (Data
Encryption Standard). Le password una volta crittografate, vengono quindi salvate nel file /etc/shadow e non
sarà più possibile risalire alla stringa originale, almeno non con metodi convenzionali.
12.3 AGGIUNTA DI UNA UTENZA: IL COMANDO adduser
Gli account utente possono essere facilmente aggiunti, modificati ed eliminati dall’amministratore, sfruttando le
numerosissime utility grafiche normalmente presenti in tutte le moderne distribuzioni GNU/Linux.Noi ci
serviremo invece di un ottimo programma a linea di comando, il suo nome è adduser ed il suo utilizzo è
piuttosto intuitivo.
1- Trasformatevi in ammistratore
2- Digitate il comando adduser e seguite le indicazioni fornite dal programma. Premete invio dopo ogni
inserimento (i valori di default sono indicati tra parentesi quadre[ ]).
12.4 AGGIUNTA MANUALE DI UNA UTENZA: Vi presento tux
Adesso vi starete domandando, chi è tux? tux è il nostro generico utente a cui dobbiamo dare l’accesso al
sistema.
Procediamo per ordine, ogni utente in Linux ha un’entità fisica ben precisa, possiede cioè un suo spazio
all’interno del sistema, un suo nome identificativo e persino una sua password privata. Il nostro compito adesso è
proprio quello di creare una semplice utenza fornendogli tutto il necessario per lavorare sotto Linux.
Abbiamo più volte detto che quando Linux viene avviato, dopo aver eseguito tutti i relativi controlli hardware,
va a leggere determinati files di sistema per “informarsi” su eventuali cambiamenti, uno di questi file è proprio
/etc/passwd. In questo file, Linux tiene la lista degli utenti autorizzati ad accedere al sistema, sapete già tutto su
questo file quindi possiamo procedere alla sua modifica.
Le operazioni di amministrazione vengono effettuate da root quindi assumete i privileggi di amministratore ed
editate il suddetto file, utilizzando l’editor che più preferite. In questo esempio richiamiamo l’editor vi a cui
passiamo come argomento il file /etc/passwd:
> vi /etc/passwd
Una volta editato il file in questione, aggiungete, alla fine del file, un record come quello mostrato di seguito:
tux::500:100:Linus Torvalds:/home/tux:/bin/bash
Stiamo creando un account utente nientemeno che a Linus Torvalds…
Salvate il file ed uscite.
Abbiamo fatto il primo passo, attenzione a lasciare il campo della password vuoto (non mettete spazzi) poiché,
come abbiamo detto, le password sono codificate con un apposito programma che useremo più avanti.
Adesso possiamo creare fisicamente la casa di tux all’interno della directory /home la quale, come abbiamo
appreso, accoglie tutte le directory home personali di ogni utente:
> mkdir /home/tux
53
tux ha la sua home directory, ma dobbiamo fare in modo che sia veramente di tux, in quanto al momento il
sistema la vede come proprietà di root:
> chown tux /home/tux
Abbiamo così definito la proprietà della directory assegnandola a tux usando il comando chown (spiegato alla
fine del capitolo). Perché la directory home sia completa dobbiamo fare un’ultima cosa. Se date un’occhiata
all’interno della directory di sistema /etc/skel, ci troverete una serie di file nascosti e sottodirectory dall’aspetto
simile a quello mostrato nella figura in basso (il contenuto di tale directory può cambiare in base alla
distribuzione usata), Fig. 12.3.
Fig. 12.3 Files e directory generalmente contenuti all’interno della directory /etc/skell.
Copiate tutti questi files all’interno della personale directory home di tux, utilizzando la seguente istruzione:
> cp -r /etc/skel/* /home/tux
Utiliziamo l’opzione -r per attivare la ricorsività dell’operazione di copia in quanto all’interno di /etc/skell vi
potrebbero essere sottodirectory.
Cambiate il proprietario a questi files:
> chown tux /home/tux/*
Ultimo passo è quello di impostare la password per tux, per questo richiamiamo un apposito programma
utilizzando il comando:
> passwd tux
il programma passwd vi domanderà la password ed è molto esigente su questo, la password per essere accettata
deve essere di almeno sei caratteri e contenere almeno un numero (Es: ciaotux1).
Adesso l’utente tux ha anche la sua password, non ci resta che effettuare il login con la nuova utenza per
accertarci del funzionamento.
54
12.5 ELIMINAZIONE O DISATTIVAZIONE DELLE UTENZE
Un account utente può essere disattivato dall’amministratore di sistema semplicemente modificando la voce
relativa alla password per un determinato utente nel file /etc/passwd. Per esempio, potete disattivare l’account di
tux modificando il campo password come segue:
tux:x123:501:101:Linus Torvalds:/home/tux:/bin/bash
Quando viene aggiunta qualcosa dopo la x (in questo caso 123), le utility shadow non troveranno nessuna
codifica che corrisponda a questa password e l’account non potrà essere utilizzato. Modificando nuovamente il
campo tornando alla sola x, si abiliterà di nuovo l’accesso.
La rimozione completa della riga riguardante l’utente tux dal file /etc/passwd, dal file /etc/shadow e la rimozione
della sua home directory e di tutto il suo contenuto dal sistema ne elimina l’utenza.
12.6 GRUPPI
Con il termine di gruppo si intende un insieme logico di utenti con determinati diritti collettivi. Per esempio,
potrebbe essere necessario creare su di un sistema un gruppo chiamato “programmatori” dove soltanto gli utenti
appartenenti a tale gruppo potranno avere accesso a determinate risorse (ad esempio editor e compilatori
specifici). Inoltre è possibile la condivisione di files tra membri appartenenti allo stesso gruppo ed impedire
invece agli utenti non appartenenti di accedervi.
I gruppi sono creati mediante l’aggiunta di una voce al file /etc/group, file molto simile a quello già visto delle
utenze ed ogni riga del file /etc/group indica un gruppo.
Molti dei gruppi predefiniti corrispondono direttamente a un servizio specifico, per esempio il gruppo lp è per i
servizi di stampa. Una descrizione del formato del file /etc/group è elencata di seguito:
1.
2.
3.
4.
Il primo campo è il nome del gruppo.
Il secondo campo è la password per il gruppo. Tipicamente non viene utilizzata, ma può essere
impostata.
Il terzo campo è il GID (Group ID), gli account utente che sono membri di questo gruppo hanno questo
numero nella loro voce /etc/passwd.
Il quarto campo è quello degli account utente associati a questo gruppo.
Ogni utente in un sistema GNU/Linux deve appartenere almeno ad un gruppo. Il gruppo di default di molte
distribuzioni è users, il numero di identificazione del gruppo associato (GID) è 100.
Un account utente può essere aggiunto ad uno specifico gruppo semplicemente aggiungendo il suo nome utente
all’ultimo campo della voce gruppo nel file /etc/group in maniera simile a quanto segue:
gruppo_utenti::201:bios, tux, paolo, natalie
Tutti gli account utente elencati nell’ultimo campo sono membri appartenenti al gruppo “gruppo_utenti”.
Esistono svariate utility (grafiche e testuali) che automatizzano questa procedura, come ad esempio groupadd:
> groupadd -g GID nome_gruppo
Il parametro -g GID assegna l’ID di gruppo al nuovo gruppo.
Esempio:
> groupadd -g 201 programmatori
Crea un nuovo gruppo chiamato “programmatori” e gli assegna l’ID di gruppo 201. Il nuovo gruppo creato viene
quindi aggiunto al file di sistema /etc/group, Fig. 12.4.
55
Nuovo gruppo creato.
Fig. 12.4 Presenza del nuovo gruppo creato all’interno del file /etc/group.
La rimozione di un utente da uno specifico gruppo viene realizzata rimuovendo il nome utente dall’elenco del
file /etc/group. Con tale operazione non si rimuovono i dati e non si cambiano i permessi, ma si esclude soltanto
uno specifico account utente dall’accedere a file che possiedono i permessi dati per questo specifico gruppo.
12.7 IL COMANDO groups
Ogni utente può scoprire a quale gruppo o gruppi fa parte, semplicemente utilizzando il comando groups senza
opzioni ne argomenti.
Per ottenere il gruppo o i gruppi a cui un utente è assegnato digitate il seguente comando, come mostrato nella
Fig. 12.5 in basso:
> groups nome_utente
Fig. 12.5 Utilizzo del comando groups.
56
12.8 PERMESSI
Linux fu concepito fin dall’inizio come reale sistema multiutente, cioè per l’uso contemporaneo da parte di più
utenti. Da questa funzionalità deriva l’obbligo del login all’inizio di una sessione di lavoro e la differenziazione
degli utenti. Questo garantisce che utenti non autorizzati non possono vedere il contenuto dei files o accedere a
determinate directory di cui non ha il permesso.
È finalmente arrivato il momento di far luce su tutti quei simboli strani che compaiono all’inizio di ogni riga
quando lanciamo il comando ls -l.
Analizziamo il risultato di un generico ls -l:
-rw-r----- 1 bios users 14197 Jun 21 15:33 rapporto97
Come potete vedere, il file appartiene all’utente bios ed è assegnato al gruppo di default users. Per poter vedere i
diritti utente sul file “rapporto97”, dobbiamo osservare più attentamente la prima colonna.
La prima colonna ha dieci caratteri, che possiamo immaginare divisi in quattro gruppi logici, come mostra lo
schema sottostante:
- rw- r-- ---
Permessi Altro
Esecuzione
Scrittura
Lettura
Permessi Gruppo
Esecuzione
Scrittura
Lettura
Permessi Utente
Esecuzione
Scrittura
Lettura
Tipo di file
Il primo dei dieci caratteri indica il tipo di file elencato che può essere uno dei seguenti:
d
l
c
b
s
File regolare (di solito un file binario o un file di testo ASCII)
Directory
Collegamento simbolico (link)
Device a caratteri
Device a blocchi
Socket (un ascoltatore di rete)
Come mostra lo schema, in Linux ci sono tre diversi livelli di permessi a file e directory, questi livelli
corrispondono alle seguenti categorie:
•
•
•
Utente (proprietario)
Gruppo
Altro
57
Ogni categoria, ha privilegi a esso associati che si manifestano nella forma di tre permessi sulle principali
operazioni che è possibile compiere su un qualsiasi file:
Lettura
Scrittura
Esecuzione
La (r) indica la possibilità di leggere il file (read)
La (w) indica la possibilità di modificarlo (write)
La (x) indica la possibilità di eseguirlo (execute)
La presenza di queste lettere indica quindi la possibilità di eseguire le operazioni corrispondenti su quel file.
Nel nostro esempio, bios ha, come proprietario del file “rapporto97”, il permesso di lettura (r) e scrittura (w) su
di esso, ma non può eseguirlo (x). I membri del gruppo di default users, possono leggere il file, ma non
modificarlo o eseguirlo. Gli altri utenti non hanno alcun diritto su questo file.
Con questa configurazione di sicurezza, l’utente bios può fare in modo che soltanto le persone autorizzate (i
membri del suo gruppo di lavoro), possano leggere il file e che soltanto lui possa modificarlo, poiché egli è
l’unico ad avere il permesso di scrittura su questo file.
Notate che per le directory, i diritti assumono un significato leggermente diverso:
drwxrwxr-x 1 bios users 14 Jun 21 15:33 DatiLaboratorio
La (r) indica che il contenuto della directory può essere mostrato, cioè è possibile usare il comando ls per avere
una lista del contenuto.
La (w) indica che possono essere creati nuovi file o directory al suo interno.
La (x) indica il permesso di entrare all’interno di tale directory, usando il comando cd.
Riferendoci all’esempio di sopra, notiamo che bios è il proprietario della directory “DatiLaboratorio” e che sia
bios sia i membri del gruppo di default users, possono entrare nella directory, vedere il contenuto e creare nuovi
file. Tutti gli altri utenti invece hanno meno diritti, possono soltanto entrare e guardarvi dentro ma non vi
possono archiviare nuovi file.
12.9 IL COMANDO chmod
I diritti di accesso ad un determinato file o ad una determinata directory possono essere modificati dal
proprietario (e naturalmente da root) con il comando chmod (change mode).
La sua sintassi generale è la seguente:
> chmod [categorie] [+/-] [permessi] [nome_file]
Esso necessita la comprensione dei seguenti parametri:
1.
Le categorie di interesse
•
•
•
u (user)
g (group)
o (others)
Utente o proprietario del file
Gruppo
Altri utenti
Se non si indica nessuna categoria le modifiche verranno applicate a tutte le categorie.
2.
Un carattere per rimuovere (-) o per aggiungere (+).
3.
Le abbreviazioni già conosciute per:
•
•
•
4.
r (read)
Leggere
w (write)
Scrivere
x (execute) Eseguire
Il nome o i nomi dei file o delle directory su cui andare ad agire, separati da caratteri vuoti.
Esempi:
Immaginiamo che l’utente bios abbia un file di nome “rubrica” con i seguenti permessi:
58
-rw-r--r-- 1 bios users 17 Jun 21 15:33 rubrica
in questo modo non solo gli altri utenti del gruppo users, ma tutti (proprio tutti) possono leggere la rubrica
telefonica di bios. Ciò non è carino!!!
Vediamo di mettere in pratica quanto appreso e utilizziamo il comando chmod per sistemare questa faccenda.
Nel caso specifico digitiamo:
> chmod go-rwx /home/tux/rubrica
Adesso, soltanto tux può leggere e modificare la rubrica, mentre il resto del mondo è escluso da qualsiasi
operazione su quel file:
-rw------- 1 tux users 17 Jun 21 15:33 rubrica
Impedire qualsiasi tipo di accesso a un file (o directory) è dunque un’operazione semplice.
Date un’occhiata adesso a questo esempio pratico, mostrato nella Fig 12.6, dove un file script creato dall’utente
bios, viene reso eseguibile a tutti:
Fig. 12.6 Utilizzo del comando chmod.
12.10 UN ARGOMENTO APPICCICOSO (sticky bit)
Oltre ai permessi di lettura, scrittura ed esecuzione che abbiamo descritto, ne esiste un altro che può rivelarsi
utile in molte situazioni. Alcuni lo chiamano permesso speciale.
A volte è necessario che una applicazione venga eseguita da un utente in particolare. Il caso più comune è quello
di alcune applicazioni che devono necessariamente essere eseguiti dall’utente root. Una soluzione possibile
potrebbe essere quella di dare a tutti gli utenti che devono poter utilizzare questo tipo di applicazione la
password di root. Ovviamente questa soluzione è molto pericolosa dal punto di vista della sicurezza.
Per risolvere questa delicata situazione, ci viene in aiuto un quarto permesso, chiamato permesso di UID.
Dando questo permesso ad un file, si permette a chiunque lo esegua di assumere i permessi del proprietario di
quel file, per la sola esecuzione. La lettera associata a questo permesso è la (s) ed a volte guardando i permessi di
un file eseguibile, cioè un programma o uno script di shell, al posto della prima x potreste trovare una s. Questa s
sta per sticky (appiccicoso). Chi ha i permessi per far eseguire il programma, lo fa spacciandosi automaticamente
per il proprietario del programma stesso. Difficilmente dovreste impostare queste condizioni a un vostro
programma o script.
12.11 MODIFICA DELLA PROPRIETA’ UTENTE O DI GRUPPO
Come avrete appreso in questo capitolo, la chiave che sta alla base del concetto dei permessi è il fatto che ogni
file ha un indicatore di proprietario ed un indicatore di gruppo. Analizzeremo adesso due comandi molto
importanti in Linux:
59
Il comando chown modifica l’indicatore di proprietario.
Il comando chgrp modifica l’indicatore di gruppo.
12.12 IL COMANDO chown
L’utility chown (change ownership), già utilizzata nel paragrafo 12.4, modifica l’indicatore di proprietario di un
file, quindi se volete cambiare il proprietario di un file la sintassi da usare è la seguente:
> chown [nome_nuovo_proprietario] [nome_file]
12.13 IL COMANDO chgrp
L’utility chgrp (change group), modifica l’indicatore di gruppo di un file, quindi se volete cambiare il gruppo di
appartenenza di un file la sintassi da usare è la seguente:
> chgrp [nome_gruppo] [nome_file]
Esempio:
> chgrp programmatori /tmp/testfile
> ls –l
-rwxr--r--1 natalie programmatori 11 Dec 26 14:15 testfile
60