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
© Copyright 2024 Paperzz