Se parliamo di server distribuiti o di servizi di hosting condiviso è difficilissimo che l’amministratore di rete permetta ai suoi clienti di avere l’accesso root alle macchine di cui usufruisce, se parliamo di home computing la situazione è piuttosto diversa.
Che sia attraverso “sudo” o “su”, nell’ambito del computing casalingo basato su Linux c’è assolutamente bisogno, almeno una volta al giorno, di elevarsi a superutente per eseguire determinati tipi di operazioni, dalla semplice installazione di un programma agli aggiornamenti cumulativi di sistema, passando per le impostazioni o per la modifica manuale dei file di configurazione.
D’altra parte avere privilegi di “root” o di “superutente” o in qualunque altro modo vogliate chiamarli è fondamentale se il computer dal quale stiamo operando è di nostra proprietà: ci permette di fare qualsiasi cosa, buona o cattiva che sia, ed i meccanismi di sicurezza del sistema operativo non potranno nulla contro le nostre scelte.
In cinque parole: we’ve got the power.
Al di là dell’importanza del root nei sistemi Linux-based, domanda ricorrente tra gli utenti riguarda la differenza tra sudo e su, ovvero quella tra le modalità di accesso a privilegi elevati – di fatto i massimi, a livello utente, disponibili sul sistema.
Al contrario di quanto si possa pensare la risposta non è ovvia nè semplice: prendendo ad esempio la distribuzione Ubuntu si potrebbe rispondere che sudo e su sono la stessa cosa: entrambi permettono di ottenere privilegi di root.
Si potrebbe, infatti, poiché all’atto pratico non è affatto così. I due comandi sono profondamente differenti e la differenza tra sudo e su, semplicemente, c’è.
Differenza tra sudo e su in Linux
Il comando su
Il comando su serve praticamente per “diventare” un altro utente ereditandone identificativo, identificativo del gruppo, privilegi, permessi d’esecuzione e di navigazione ed in alcuni casi anche variabili d’ambiente, alias, percorsi predefiniti e quant’altro – all’interno di una shell o di un terminale virtuale.
La sua sintassi di base è
su <parametro_opzionale> nomeutente
Se invocato senza parametri il nomeutente viene impostato automaticamente a “root”, per cui digitare
su root
e digitare
su
portano esattamente allo stesso risultato: dopo la richiesta della password si diventa letteralmente l’utente root, senza quindi restrizioni di alcun tipo sul sistema.
E’ possibile uscire dalla sessione inizializzata con “su” utilizzando il comando exit.
Il comando sudo
Il comando sudo, sebbene nelle più comuni configurazioni di sistema si utilizzi per guadagnare privilegi elevati (ma non per diventare l’utente root), ha un utilizzo molto più complesso.
Esso infatti permette di ottenere particolari privilegi, in accordo con quanto definito nel suo file di configurazione (/etc/sudoers), non appartenenti di default alla propria tipologia di utente.
La sua sintassi di base è
sudo <parametro_opzionale> comando_da_eseguire
Già qui sta la prima differenza rispetto a su: il comando sudo infatti prende come input un comando – non un utente – e, come accennato poc’anzi permette, di eseguire il comando passato in input con i privilegi definiti nel file /etc/sudoers, impostando provvisoriamente (di default per 15 minuti) alcuni particolari bit per far sì che ciò accada.
In sostanza il comando sudo permette di fare ciò che farebbe un utente “privilegiato” senza il bisogno di possedere la sua password.
Di norma, infatti, la password per l’esecuzione dei comandi attraverso “sudo” coincide con la password utente.
Il file /etc/sudoerspermette di definire quali utenti possano ottenere privilegi elevati (o quantomeno differenti dai predefiniti) invocando il comando sudo; esso permette inoltre di definire nel dettaglio quali comandi possano essere eseguiti da tali utenti in caso di accesso privilegiato.
E la differenza?
Di fondo la chiave è proprio la modalità di esecuzione dei comandi: con su si diventa root, con sudo invece potrete si agisce anche con privilegi di utente root senza però possederne le credenziali d’accesso.
In termini di sicurezza, specie se in un sistema multi-utente, è bene configurare a dovere il file /etc/sudoers per decidere quale utente può ottenere privilegi di root su determinati (o tutti i) comandi anziché mettere a disposizione la password di root a chiunque.
Ad esempio: immaginate di gestire un piccolo server, di aver bisogno di una mano per eseguire i piccoli task giornalieri e di assumere un sistemista per farlo.
Dando al sistemista la password di root – quindi permettendogli di usare su -, nel momento in cui costui smetterà di lavorare per voi sareste costretti a cambiarla (con tutte le conseguenze del caso).
Dandogli invece la possibilità di eseguire azioni privilegiate tramite il comando sudo, qualora il sistemista smettesse di lavorare per voi basterà eliminare il suo nome utente dal file /etc/sudoers ed eliminare successivamente il suo account.
Perché in Ubuntu c’è soltanto sudo?
Semplice: per impostazione predefinita in Ubuntu non è impostata password di root alcuna, ragion per cui l’account root è inizialmente inutilizzabile ed il comando “su”, semplicemente, non ne permetterà l’accesso.
Si possono comunque eseguire comandi con permessi elevati poiché l’account utente (o qualsiasi account di tipo “Amministratore” sia presente nel sistema) figura nel file /etc/sudoers ed è configurato per eseguire qualsiasi comando con privilegi di root.
Leggendo con più attenzione la pagina di manuale di sudo, si scopre che è possibile diventare “materialmente” root anche in Ubuntu utilizzando soltanto il comando “sudo”.
Per impostazione predefinita l’utente di tipo “Amministratore” può eseguire tutti i comandi di sistema con privilegi elevati, per cui vi basterà eseguire una shell utilizzando un preciso parametro di sudo:
sudo -s
Ma se ciò non dovesse bastare e ci fosse la necessità di attivare l’account root – ad esempio per aprirsi l’opportunità di modificare il file /etc/sudoers in caso di malfunzionamento di sudo, cosa altrimenti impossibile -, ciò che bisognerà fare sarà invocare il comando passwd attraverso sudo:
sudo passwd
…impostando così una password di root ed abilitando l’accesso tramite il comando su. Vi sconsigliamo comunque di procedere per preservare la sicurezza del sistema, a meno che non sappiate esattamente cosa fate.
Conclusioni finali
E’ consigliabile utilizzare semplicemente sudo per preservare la sicurezza del sistema, abilitando l’utente root – oppure invocandolo, se già disponibile – soltanto in caso di emergenza.
Una buona configurazione del file /etc/sudoers può tranquillamente sopperire all’utilizzo dell’account root, account che d’altra parte andrebbe abilitato in caso ci si cimenti in modifiche simili – l’utente root è l’unico a poter rimettere a posto un sudoers mal creato il quale, a sua volta, rende inutilizzabile il comando sudo.
In generale prima di lanciarsi ad una modifica di /etc/sudoers è bene:
- abilitare l’account root con una password sicura ed accertarsi che questa sia funzionante;
- leggere attentamente guide e pagine di manuale, valutando i pro ed i contro prima di salvare qualsiasi modifica; in caso di errore, il sistema potrebbe diventare inutilizzabile;
- utilizzare il comando “visudo” per modificare /etc/sudoers, poiché esso impedisce a monte il salvataggio del file in caso di errori sintattici.