Abbiamo appena finito di installare Linux, ma mentre stiamo riavviando una domanda continua ad assillarci: cosa voleva dire il programma di installazione quando ci ha chiesto di inserire la password di root? Sarà qualcosa di importante?
Per cercare di chiarire le idee bisogna introdurre un concetto che potrebbe essere nuovo a chi proviene da Windows 9x. Linux (e più in generale tutti gli Unix) È un sistema operativo multiutente (come Windows NT/2000 per chi ne ha avuto a che fare). Questo vuol dire che il PC ha le potenzialità di essere usato da più utenti, anche contemporaneamente! Per distinguere ogni utente risulta quindi indispensabile assegnare ad ognuno di essi un proprio identificativo, chiamato username al quale l'utente legherà una propria password.
L'utente root è colui che dovrebbe essere preposto (avendone per questo i privilegi) ad amministrare un sistema. In realtà root non è una persona fisica ma dovrebbe essere meglio inteso come un'identità fittizio tramite la quale è possibile svolgere delle operazioni cruciali che non dovrebbero essere permesse a tutti (come cancellare o modificare file importanti, manipolare i file di configurazione e i parametri del kernel per esempio).
La password di root deve quindi essere nota a tutti quelli (e solo a loro!) che sono incaricati alla manutenzione del sistema. Per questo il sistema si rifiuterà di eseguire comandi compromettenti per il sistema o di fare qualche modifica delicata ai file di configurazione se queste richieste vengono da un utente "normale". Per questo la distinzione tra root e normale utente (che da ora in poi chiameremo semplicemente utente) È utile per un duplice motivo: impostare cosa è possibile far fare per ogni account e evitare che un utente vada a cancellare o modificare per sbaglio dei file importanti (eseguendo per esempio dei comandi il cui comportamento inaspettato non era stato previsto o per pura distrazione). Per questo molte distribuzioni chiedono in fase di installazione quale altro account creare.
Accanto al concetto di utente vi è quello di gruppo. Un gruppo permette un'ulteriore distinzione tra utenti. Ogni utente deve risiedere in un gruppo. Se esso non risiede in un gruppo particolare, lo stesso utente formerà un gruppo a sé stante, di cui egli è il solo membro. Tramite questi è possibile definire delle azioni che sono concesse a più utenti facenti parte di uno stesso gruppo (per esempio il gruppo di chi può collegarsi a internet, di chi può accedere a determinati file o dischi, di chi può usare X, ecc.).
Per indicare a un gruppo cosa gli è concesso e cosa no ci vengono incontro degli attributi appositi dei file. Ad ogni utente e gruppo viene inoltre assegnato un numero (uid, User ID, per gli utenti e gid, Group ID, per i gruppi) che li identifica. Se due o più utenti hanno lo stesso uid È come se fosse lo stesso utente ma con due nomi diversi. Per esempio se oltre a root che ha sempre uid e gid uguali a 0 ci fosse qualche altro utente avente uid 0, esso avrebbe tutti i privilegi e i permessi propri di root (con tutti i rischi inclusi).
Andiamo quindi ad analizzare i primi comandi per gestire gli account presenti sulla nostra Linux Box. Poichè il loro uso andrà a modificare dei file di configurazione importanti è possibile eseguirli solo da root.
ADDUSER/USERADD
Adduser è un comando che ci consente di aggiungere un nuovo utente. Spesso si tratta di uno script (su Debian è uno script scritto in perl) fatto per semplificare (o meglio per automatizzare la creazione di un nuovo utente) l'uso di useradd. Di solito adduser si occupa anche di creare una propria home directory per ogni utente e permette l'inserimento interattivo della password. Per esempio per creare un nuovo utente la cui username è "mario", dovremo digitare:
adduser mario
Per convenzione una username dovrebbe contenere solo lettere minuscole o numeri e iniziare solo con minuscole. A seconda della distribuzione ci potrà esser chiesto di inserire la password, se ciò non avviene utilizzeremo il comando passwd. Adduser può anche essere usato per inserire un utente in un gruppo. Ad esempio:
adduser mario colleghi
Aggiungerà mario nel gruppo "colleghi".
PASSWD
Passwd si occupa semplicemente di cambiare la password di un utente. Ogni utente è libero di usare passwd (restando tale quindi) per cambiare la PROPRIA password. A root invece è concesso di cambiare le password di ogni utente a suo piacimento. Anche in questo caso la sintassi è semplicissima e basterà scrivere:
passwd mario
per cambiare interattivamente la password all'utente mario.
Prima di proseguire ricordiamo che le password sono crittate con un sistema di cifratura simmetrico, utilizzando l'algoritmo DES, che non permette di risalire alla password in chiaro. Ciononostante sarebbe possibile risalire alla password crittando tramite appositi programmi delle parole prese da un dizionario di migliaia di voci e confrontandole con la password non in chiaro.
Pur restando un'operazione non banale, ormai anche dei computer domestici possono avere la potenza di calcolo per "crackare" un file delle password. Restano quindi 3 possibili soluzioni da adottare: usare password non facilmente predicibili (magari create randomicamente), usare algoritmi di cifratura più avanzati (come l'MD5 o il 3DES, oramai presenti nelle ultime distribuzioni), usare il sistema di password shadowing (anche questo presente nelle ultime distribuzioni) che consente di rendere visibili solo all'utente root le password comunque sempre non in chiaro (nel file /etc/shadow). In questo modo restano visibili nel file /etc/passwd gli utenti, il loro uid, la loro home directory, il loro nome, la loro shell, ecc. ma al posto della password verrà messa una x.
GPASSWD
Come passwd per gli utenti, gpasswd ci permette di cambiare la password di un gruppo. Per esempio:
gpasswd colleghi
Ora vi verrà chiesta di inserire la nuova password. Se non è settata la password per un gruppo, potranno usare i privilegi di quel gruppo solo chi ne fa parte, se invece è stata indicata una password, allora un qualsiasi utente potrà "cambiare" momentaneamente gruppo usando il comando newgrp.
ID
Tramite il comando id è possibile visualizzare l'uid e il gid di un determinato utente. Per esempio:
id mario
visualizzerà l'uid, il gid e i gruppi di mario.
SU
Con su potremo "passare" ad un altro utente senza uscire e riloggarsi (utile se ci capita di dover utilizzare l'account di root per eseguire dei comandi che ne richiedono i privilegi). Con l'opzione - verranno riletti i profili utente del nuovo user (in pratica fa come se uscissimo e rientrassimo con il nuovo account). Se non gli viene passato nessun argomento root sarà assunto di defadirt. Ecco alcuni esempi:
su
dopo aver immesso la password di root, appariremo come utente root.
su -
dopo aver immesso la password di root, verranno caricati i file propri dell'utente root e appariremo come utente root.
su - gianni
dopo aver immesso la password dell'utente gianni, verranno caricati i file di profilo di quell'utente e appariremo come gianni.
NEWGRP
Usando newgrp (l'equivalente di su per i gruppi) potremo eseguire comandi e cambiare momentaneamente il nostro gruppo. Anche qui la sintassi è:
newgrp colleghi
dopo aver immesso la password del gruppo colleghi, ne faremo momentaneamente parte. L'uso di newgrp è possibile soltanto se il gruppo ha settato una propria password con gpasswd.
CHSH
chsh è il comando che si occupa di cambiare la shell usata da un utente. Esempio:
chsh mario
dopo aver immesso la password per l'utente mario, verrà chiesto di inserire il percorso della shell che gli si vuole attribuire. Come parametro di defadirt verrà passato l'utente che esegue chsh.
CHFN
Questo comando serve a cambiare il fdirl name (nome e cognome) e altre informazioni quali numeri di telefono di un utente. Esempio:
chfn
dopo aver immesso la password dell'utente che esegue chfn potrà cambiare interattivamente i dati relativi al suo account.
ADDGROUP/GROUPADD
Tramite addgroup è possibile creare un nuovo gruppo, per crearne ad esempio uno chiamato amici eseguire:
addgroup amici
DELUSER/USERDEL
Con deluser saremo in grado di cancellare l'account di un utente o di eliminare un utente da un gruppo. Esempi:
deluser mario colleghi
L'utente mario verrà tolto dal gruppo "colleghi" deluser mario Verrà cancellato l'account dell'utente mario, ma verrà lasciata intatta la sua home directory.
userdel -r mario
Verranno cancellati l'account dell'utente mario e la sua home directory.