Sudo, tutti i segreti del comando Linux

Come funziona il comando sudo su Linux: cosa c'è da sapere quando si vogliono eseguire delle operazioni con i privilegi più elevati.
Sudo, tutti i segreti del comando Linux

Uno degli strumenti più importanti e utilizzati in ambiente GNU/Linux così come nei sistemi Unix-like è il comando sudo. Acronimo di “superuser do“), si tratta di uno strumento per la gestione dei permessi di esecuzione di comandi e programmi. Introdotto per la prima volta nei sistemi operativi Unix nel 1980, sudo consente agli utenti di eseguire comandi con i privilegi di un altro utente, tipicamente l’utente root, senza dover effettuare un accesso diretto con un’altra utenza.

L’approccio basato sull’utilizzo del comando sudo fornisce un livello aggiuntivo di sicurezza e controllo, permettendo agli amministratori di sistema di effettuare compiti specifici con “i superpoteri”, senza utilizzare sempre un account dotato dei privilegi più ampi in assoluto.

Tutti i comandi illustrati nel seguito, possono essere eseguiti dalla finestra del terminale Linux, indipendentemente dalla distribuzione in uso.

Come funziona il comando sudo

Quando un utente richiede l’esecuzione di un comando preceduto da sudo, il sistema richiede per conferma l’inserimento della password dell’utente stesso, non quella di root. Questo meccanismo riduce il rischio di compromissione del sistema, poiché non è necessario conoscere la password dell’utente root per eseguire operazioni privilegiate.

Il file di configurazione /etc/sudoers definisce quali utenti o gruppi possono eseguire determinati comandi come superuser. Grazie a questo elemento, si può procedere con una configurazione dettagliata dei permessi, specificando quali utenti possono eseguire quali comandi, con quali opzioni e su quali host.

Assegnare i privilegi più elevanti a un utente

I comandi elencati di seguito sono utilizzati per aggiungere un utente a un gruppo specifico, permettendo così di assegnare a quell’utente i privilegi più elevati:

sudo usermod -aG sudo nomeutente (sistemi Debian e derivati)
sudo usermod -aG wheel nomeutente (sistemi Red Hat e derivati)

Le opzioni -aG sudo e -aG wheel specificano che l’utente sia aggiunto a uno o più gruppi. In questo caso, il gruppo è sudo per le installazioni Debian; wheel per quelle Red Hat.

Nei sistemi Debian-based, il gruppo sudo è generalmente preconfigurato per consentire ai suoi membri di eseguire qualsiasi comando come superutente. Il file di configurazione /etc/sudoers contiene una riga come %sudo ALL=(ALL:ALL) ALL: questo significa che i membri del gruppo sudo possono eseguire qualsiasi comando.

Lo si può verificare banalmente digitando il comando seguente:

sudo nano /etc/sudoers

Comando sudo Linux

Per uscire dall’editor di testo “nano”, basta premere la combinazione di tasti CTRL+X.

La modifica della configurazione del file /etc/sudoers, va tuttavia effettuata con il comando sudo visudo, come vediamo più avanti.

Il gruppo wheel è l’equivalente Red Hat del gruppo sudo in Debian. La configurazione del file /etc/sudoers può includere una riga come %wheel ALL=(ALL) ALL. Anche qui, significa che i membri del gruppo possono eseguire qualsiasi comando con sudo.

Creare un nuovo utente con i privilegi più elevati

Ad integrazione di quanto descritto al paragrafo precedente, è possibile creare un nuovo utente in grado di utilizzare il comando sudo semplicemente con un’istruzione simile a quella seguente:

sudo adduser nuovonomeutente

È quindi possibile aggiungere il nuovo nome utente ai gruppi sudo oppure wheel utilizzando i comandi già visti in precedenza.

Controllare i permessi di root e registro del comando sudo

Utilizzando il semplice comando sudo whoami, è possibile verificare che l’utente in uso, quando ritenuto necessario, possa accedere ai privilegi di root e utilizzarli. Impartendo il comando, infatti, si ottiene root come risposta mentre limitandosi a whoami, senza quindi anteporre sudo, si ottiene il nome dell’account utente in uso.

Comando sudo whoami

Come usare il comando sudo su Linux

Un esempio tipico di utilizzo di sudo consiste nell’aggiornamento del sistema tramite il gestore di pacchetti. Ad esempio, su una distribuzione Debian-based, l’aggiornamento dei pacchetti viene eseguito con l’istruzione seguente:

sudo apt update && sudo apt upgrade

Il comando (in realtà sono due concatenati tra loro…) dapprima aggiorna la lista dei pacchetti disponibili e poi aggiorna i pacchetti installati utilizzando i privilegi di root.

Ogni esecuzione di un comando tramite sudo, è registrata in un file di log, solitamente /var/log/auth.log o /var/log/sudo.log, permettendo una facile tracciabilità delle azioni amministrative via via svolte.

Per modificare il contenuto di tanti file di configurazione, è spesso necessario ricorrere al comando sudo. Ad esempio, per intervenire sul file hosts, si deve digitare quanto segue. Diversamente l’accesso sarà negato:

sudo nano /etc/hosts

Configurazione di sudo

Abbiamo detto che la configurazione di sudo è gestita attraverso il file /etc/sudoers, da modificare con il comando sudo visudo. Questo comando apre il file in un editor di testo e verifica la sintassi prima di salvare, prevenendo errori di configurazione che potrebbero compromettere il controllo a livello amministrativo del sistema.

Con le dovute cautele, si può personalizzare il file di configurazione per consentire determinate attività ai vari utenti. Ad esempio, per autorizzare l’utente michele a riavviare il servizio Apache senza necessità di digitare la password di conferma, si può aggiungere la riga seguente:

michele ALL=(ALL) NOPASSWD: /usr/sbin/service apache2 restart

La direttiva seguente permette all’utente alice di eseguire qualunque comando senza restrizioni:

Permetti a un utente specifico (alice) di eseguire qualsiasi comando con privilegi di root:

alice ALL=(ALL:ALL) ALL

Conclusioni

Il comando sudo è uno strumento essenziale per la gestione sicura dei sistemi Unix e Linux. La sua capacità di gestire i privilegi amministrativi in modo controllato, la flessibilità di configurazione e l’attenzione alla sicurezza lo rendono indispensabile per gli amministratori di sistema.

Tutto ciò premesso, non deve sorprendere che sia facile modificare la password root all’avvio del sistema. Esattamente come avviene in Windows, se un utente ha accesso fisico a un sistema, è possibile forzarne l’accesso. A meno che, ovviamente, sulla macchina non siano implementate soluzioni per la cifratura dei dati.

E a proposito di Windows, cosa che ha fatto sorridere molti “pinguini”, anche Windows 11 abbraccia l’uso del comando sudo. Ovviamente si tratta di una “libera reinterpretazione” in salsa Microsoft, ma il principio di funzionamento del comando sudo per Windows si basa proprio sull’idea introdotta da tempo immemore su Unix e sui sistemi Unix-like.

Ti consigliamo anche

Link copiato negli appunti