Introduzione
Ti sei mai chiesto perché devi digitare “sudo” mentre cerchi di eseguire determinati comandi in un ambiente di sistema operativo Linux o Unix? Sudo è in realtà un'abbreviazione che sta per “super-user do”. Quando usi il comando sudo, puoi eseguire programmi e comandi con i privilegi di sicurezza di un altro utente.
Per impostazione predefinita, il comando sudo consente agli utenti del sistema di eseguire comandi con i privilegi del superutente. Una nuova installazione di un sistema operativo Linux/Unix crea un account root che ha privilegi di superutente. Durante la configurazione iniziale del server di un sistema Linux/Unix, gli amministratori di sistema accedono con l'account root e assegnano i diritti di sistema ad altri utenti. Queste impostazioni sono memorizzate in un file chiamato sudoers. Un account con privilegi di root può modificare il file sudoers e alterare i privilegi degli altri utenti.
In questo tutorial, vedremo come ottenere i privilegi di root e apportare modifiche al file sudoers.
Prerequisiti
Questo è un tutorial pratico e avrai bisogno di testare i comandi per comprenderlo appieno. In questo tutorial utilizzeremo il server Ubuntu 20.04, tuttavia puoi seguire i passaggi se disponi di una qualsiasi delle moderne distribuzioni Linux come Debian e CentOS. Puoi seguire questo link per configurare il tuo server cloud Ubuntu su CloudSigma.
Ottenere i privilegi di root
Puoi ottenere i privilegi di root in tre modi che discuteremo di seguito:
Accedere come root
Il metodo più semplice che la maggior parte delle persone usa per ottenere i privilegi di root consiste nell'accedere a un sistema utilizzando le credenziali dell'utente root. Se stai accedendo alla tua macchina locale, puoi semplicemente fornire un nome utente e ti verrà richiesta una password.
Un altro metodo che puoi utilizzare per accedere come root è tramite SSH, uno strumento da riga di comando per accedere ed eseguire attività su un server. Richiede un nome utente e l'indirizzo IP del tuo server. La sintassi per accedere come root è la seguente, sostituisci l'indirizzo IP del tuo server:
|
1 |
ssh root@your_server_ip_or_domain_name |
Quando inserisci il comando precedente nel terminale, ti verrà chiesto di fornire la password se non hai configurato le chiavi SSH, oppure ti verrà chiesto di inserire la passphrase per la tua chiave SSH se le hai configurate. Una volta fornite le credenziali corrette, avrai effettuato l'accesso. Segui questa guida per istruzioni dettagliate su come utilizzare SSH per connettersi a un server remoto in Ubuntu.
Usare su per diventare root
Puoi accedere a un sistema Linux utilizzando qualsiasi altro account che non sia root, che di solito è il modo consigliato quando si eseguono attività non amministrative. Ogni volta che desideri ottenere i privilegi di root, puoi semplicemente digitare su sul tuo terminale:
|
1 |
su |
Il sistema ti chiederà la password di root, dopodiché otterrai l'accesso a una sessione di shell root. Durante questa sessione di shell, puoi eseguire tutte le attività amministrative e ogni volta che desideri tornare alla shell normale, premi semplicemente Ctrl + D. In alternativa, puoi digitare exit sul terminale e premere invio.
Usare sudo per eseguire comandi con privilegi di root
Il comando sudo, che è stato brevemente introdotto all'inizio di questo tutorial, consente di eseguire comandi a riga singola senza la necessità di una shell con privilegi di root. Basta digitare sudo seguito dal comando da eseguire:
|
1 |
sudo execute_this_command |
Ad esempio, per aggiornare il sistema, puoi inserire quanto segue:
|
1 |
sudo apt-get update |
Ti verrà richiesta una password. La differenza tra il comando su e il comando sudo è che su richiede la password di root mentre sudo richiede la password dell'utente corrente. L'accesso a sudo non è concesso agli utenti per impostazione predefinita perché comporta grandi implicazioni di sicurezza per il sistema. Ne discuteremo più dettagliatamente nelle sezioni seguenti.
Usare Visudo per modificare il file sudoers
I privilegi di sudo sono configurati nel file sudoers situato in /etc/sudoers. Questi privilegi sono necessari per qualsiasi utente per accedere al sistema Linux. Qualsiasi errore di sintassi impedirà agli utenti di accedere al sistema, lasciando quindi il sistema non funzionante.
Visudo apre il file con un editor speciale che controlla la sintassi del file durante il salvataggio. È quindi importante utilizzare solo il comando visudo per aprire il file, in modo da evitare di rendere inutilizzabile il sistema server. Per impostazione predefinita, visudo era impostato per aprire l'editor di testo con (vi) vim. Tuttavia, Ubuntu ha configurato visudo per utilizzare l'editor di testo nano. Su Debian o Ubuntu, è possibile passare a un editor diverso inserendo il seguente comando:
|
1 |
sudo update-alternatives --config editor |
Mostra un elenco di editor tra cui è possibile scegliere un editor predefinito, come mostrato nello screenshot. Seleziona il numero corrispondente all'editor che preferisci:

Su una distribuzione Linux CentOS, modifica /etc/sudoers e aggiungi le righe seguenti:
|
1 2 |
Defaults editor = /usr/bin/vim:/usr/bin/vi:/usr/bin/nano Defaults env_keep += "EDITOR" |
Inserisci il seguente comando. Ricorda di sostituire il nome di your_editor_of_choice:
|
1 |
export EDITOR=`which your_editor_of_choice` |
Il comando aggiunge la riga al file ~/.bashrc. Inserisci quanto segue nel terminale per applicare le modifiche:
|
1 |
. ~/.bashrc |
Con visudo ora configurato, puoi aprire il file in /etc/sudoers inserendo il comando:
|
1 |
sudo visudo |
Modifica del file Sudoers
Quando esegui il comando precedente, il file si apre nel tuo editor principale come configurato. Di seguito sono riportati i contenuti del file:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# # Questo file DEVE essere modificato con il comando 'visudo' come root. # # Si prega di considerare l'aggiunta di contenuti locali in /etc/sudoers.d/ invece di # modificare direttamente questo file. # # Vedere la pagina man per dettagli su come scrivere un file sudoers. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Specifica alias host # Specifica alias utente # Specifica alias comando # Specifica privilegi utente root ALL=(ALL:ALL) ALL # I membri del gruppo admin possono ottenere i privilegi di root %admin ALL=(ALL) NOPASSWD:ALL # Consenti ai membri del gruppo sudo di eseguire qualsiasi comando %sudo ALL=(ALL) NOPASSWD:ALL # Vedere sudoers(5) per ulteriori informazioni sulle direttive "#include": #includedir /etc/sudoers.d |
I commenti sono piuttosto descrittivi, ma di seguito discuteremo cosa indicano le righe.
Righe predefinite
- Defaults env_reset – Reimposta le variabili d'ambiente del terminale per rimuovere eventuali variabili utente. Di conseguenza, cancella le variabili potenzialmente dannose da una sessione sudo.
- Defaults mail_badpass – Istruisce il sistema a inviare notifiche via email dei tentativi falliti di inserimento della password di sudo all'utente mailto configurato, solitamente l'account root.
- Defaults secure_path – Contiene i diversi percorsi nel file system in cui un'operazione sudo cercherà le applicazioni da utilizzare durante l'esecuzione, per impedire l'uso di altri percorsi definiti dall'utente che potrebbero essere pericolosi per il sistema.
Linee di specifica dei privilegi utente
|
1 |
root ALL=(ALL:ALL) ALL |
- root ALL=(ALL:ALL) ALL – Il primo campo specifica il nome utente a cui si applicherà la regola. In questo caso si tratta dell'utente root.
- root ALL=(ALL:ALL) ALL – Il primo ALL specifica che la regola si applicherà a tutti gli host.
- root ALL=(ALL:ALL) ALL – Il secondo ALL specifica che l'utente a cui si applica questa regola (ovvero root) può eseguire comandi come tutti gli utenti.
- root ALL=(ALL:ALL) ALL – Il terzo ALL specifica che l'utente a cui si applica questa regola (ovvero root) può eseguire comandi come tutti i gruppi.
- root ALL=(ALL:ALL) ALL – L'ultimo ALL specifica che queste regole si applicano a tutti i comandi.
Da quanto indica questa regola, un utente root può eseguire qualsiasi comando utilizzando sudo una volta fornita la password corretta.
Linee di specifica dei privilegi di gruppo
Queste righe specificano le regole dei privilegi sudo che si applicano ai gruppi. I campi indicano le stesse azioni delle righe dei privilegi utente, con una piccola differenza. Iniziano con un % per indicare i nomi dei gruppi.
Come puoi vedere, il gruppo admin può eseguire qualsiasi comando come qualsiasi utente su qualsiasi host. Il gruppo sudo ha lo stesso privilegio con il privilegio aggiuntivo di eseguire comandi come qualsiasi gruppo.
Riga Include /etc/sudoers.d
La riga #includedir /etc/sudoers.d potrebbe sembrare un commento a causa del # all'inizio della riga. Tuttavia, questa è una direttiva di inclusione per indicare che i file all'interno della directory /etc/sudoers.d devono essere caricati e utilizzati come parte del file sudoers. I file all'interno di questa directory seguono le stesse regole del file sudoers.
Qualsiasi file all'interno della directory che non contiene un punto (.) e non termina con ~ viene letto e aggiunto alla configurazione del file sudoers. La directory consente alle applicazioni di modificare i privilegi sudo al momento dell'installazione inserendo tutte le regole associate all'interno di un singolo file dedicato nella directory /etc/sudoers.d senza alterare il file sudoers predefinito. Inoltre, quando si desidera ispezionare o revocare i privilegi per un'applicazione, è possibile controllare o modificare facilmente i file all'interno della directory /etc/sudoers.d senza modificare direttamente il file /etc/sudoers direttamente.
Come regola generale, tutti i file all'interno della directory /etc/sudoers.d dovrebbero essere sempre modificati utilizzando il comando visudo. Di seguito è riportata la sintassi, ricordati di sostituire il nome del file che desideri modificare nel comando:
|
1 |
sudo visudo -f /etc/sudoers.d/file_name_to_edit |
Assegnazione dei privilegi Sudo a un utente
Quando concedi a un nuovo utente l'accesso sudo generale, significa che hai fornito all'account utente l'accesso amministrativo completo al sistema. Questa è un'attività comune che gli amministratori di sistema eseguono quando creano altri utenti non root con privilegi sudo.
Nei sistemi come Ubuntu 20.04 che dispongono già del gruppo di amministrazione generale, possiamo facilmente assegnare i privilegi sudo a un utente aggiungendo l'utente a quel gruppo. Il gruppo sudo, come visto nel file /etc/sudoers, ha privilegi amministrativi completi e possiamo aggiungere un nome utente al gruppo inserendo il seguente comando:
|
1 |
sudo usermod -aG sudo username |
In alternativa, puoi utilizzare il comando gpasswd per ottenere lo stesso risultato:
|
1 |
sudo gpasswd -a username sudo |
Su CentOS, il gruppo predefinito con privilegi sudo si chiama wheel, quindi puoi assegnare i privilegi utilizzando il comando:
|
1 |
sudo usermod -aG wheel username |
In alternativa, utilizzando il comando gpasswd, puoi ottenere lo stesso risultato utilizzando il comando:
|
1 |
sudo gpasswd -a username wheel |
In alcuni casi, il wheel il gruppo su CentOS potrebbe essere commentato nel file /etc/sudoers. Per abilitarlo, apri il file con visudo e decommenta la riga con il nome del gruppo. Puoi farlo rimuovendo il # all'inizio della riga: %wheel ALL=(ALL) ALL.
Creazione di regole personalizzate
Con la conoscenza della sintassi generale di sudoers che hai acquisito finora, è giunto il momento di impostare alcune regole.
Creare alias
Gli alias ti consentono di organizzare il tuo file sudoers raggruppando gli elementi sotto vari "alias". Abbiamo tre direttive di cui parleremo in questa sezione: User_Alias per la creazione di alias di utenti/gruppi, Cmnd_Alias per la creazione di alias di comandi, e Runas_Alias per consentire a un utente di eseguire comandi come un altro utente.
For esempio, utilizzando il User_Alias, all'interno del tuo file /etc/sudoers puoi aggiungere il seguente frammento per creare tre diversi gruppi di utenti. Alcuni utenti possono appartenere a più di un gruppo:
|
1 2 3 |
User_Alias GROUPONE = adelle, nikita, ellie User_Alias GROUPTWO = nikita, brenden, natalia User_Alias GROUPTHREE = brenden, walter, james |
Nota che tutti i nomi dei gruppi iniziano con una lettera maiuscola. Con gli alias di gruppo sopra aggiunti nel file /etc/sudoers, puoi assegnare un privilegio per l'aggiornamento del database apt a GROUPTWO aggiungendo la seguente regola nel file /etc/sudoers:
|
1 |
GROUPTWO ALL = /usr/bin/apt-get update |
Nota che senza specificare l'utente/gruppo come cui eseguire, il comando sudo utilizzerà sempre come impostazione predefinita l'utente root.
Ecco un esempio di Cmnd_Alias in cui creiamo un alias di comando per lo spegnimento e il riavvio del sistema. La regola viene quindi assegnata a GROUPTHREE. L'aggiunta delle seguenti righe all'interno del file /etc/sudoers consente di ottenere questo risultato:
|
1 2 |
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER |
Nel frammento sopra, la prima riga crea un alias di comando chiamato POWER che include i comandi per lo spegnimento e il riavvio. La seconda riga consente ai membri di GROUPTHREE di eseguire questo comando.
Ecco un esempio di Runas_Alias, in cui creiamo un alias che consentirà a un gruppo di utenti di eseguire comandi come un altro utente:
|
1 2 |
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL |
Nel frammento sopra, la prima riga crea un alias chiamato WEB, specificando che l'alias verrà eseguito come utente apache o utente www-data. La seconda riga assegna l'alias a GROUPONE. Ora, i membri del gruppo uno possono eseguire comandi come utenti apache o www-data.
Regole di restrizione
In questa sezione imparerai i vari modi in cui puoi controllare come sudo reagisce a una chiamata. Alcuni comandi sono relativamente innocui sui sistemi monoutente. In tali casi, puoi consentire agli utenti di eseguirli con privilegi di root senza dover digitare la password di root. Ad esempio, puoi creare una regola per consentire agli utenti in GROUPONE di eseguire il comando updatedb senza inserire una password aggiungendo quanto segue al file /etc/sudoers:
|
1 |
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb |
Il tag NOPASSWD implica che non verrà richiesta alcuna password. Il tag complementare per il tag NOPASSWD è PASSWD, che rappresenta il comportamento predefinito. Ciò implica che deve essere fornita una password al prompt.
Un tag si applica a una regola a meno che non venga annullato dal suo tag complementare, ad esempio:
|
1 |
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill |
In questa regola, gli utenti in GROUPTWO possono eseguire il comando updatedb comando senza inserire una password. Tuttavia, devono fornire una password prima di eseguire il comando kill.
In alcuni casi, potresti voler limitare gli utenti dall'eseguire determinati comandi per prevenire alcune esecuzioni pericolose. Ecco dove entra in gioco il tag NOEXEC. Alcuni programmi possono eseguire altri comandi dall'interno della loro interfaccia. Un esempio di tale programma è less. Se digiti un comando con la seguente sintassi all'interno dell'interfaccia less, questo verrà eseguito, causando comportamenti imprevisti.
|
1 |
!name_of_command_to_run |
Per prevenire tale comportamento, puoi aggiungere la seguente regola al file /etc/sudoers per limitare un determinato utente identificato con username:
|
1 |
username ALL = NOEXEC: /usr/bin/less |
Informazioni aggiuntive
In questa sezione, includiamo alcune informazioni aggiuntive, direttive e comandi che potresti ritenere necessari quando lavori con sudo.
Se hai utilizzato Runas_Alias nella configurazione, specificando che un utente o un gruppo può essere eseguito come un altro utente, puoi eseguire comandi como quegli utenti utilizzando il flag -u sull'utente e il flag -g sui gruppi. Ecco la sintassi:
|
1 2 |
sudo -u run_as_user command sudo -g run_as_group command |
Ciascuno dei comandi ti chiederà di inserire la password associata. Per comodità, sudo salva la password per un certo periodo di tempo, in modo da non doverla inserire continuamente ogni volta che esegui un comando con sudo. Potresti voler azzerare questo tempo una volta terminato con i comandi con privilegi sudo inserendo il seguente comando:
|
1 |
sudo -k |
Nel caso in cui tu abbia altre attività da eseguire con i privilegi di sudo e desideri estendere il tempo prima della richiesta della password, o desideri evitare che il comando sudo richieda una password in seguito, puoi rinnovare il tempo digitando il seguente comando:
|
1 |
sudo -v |
Il comando richiede una password e la memorizza nella cache per i successivi utilizzi di sudo.
Per elencare i privilegi sudo definiti per il tuo nome, puoi inserire il seguente comando:
|
1 |
sudo -l |
Il comando elenca tutte le regole configurate nel file /etc/sudoers che si applicano al tuo nome utente. Dalle regole, puoi farti un'idea di quali attività il tuo nome utente può eseguire sul sistema. Ecco uno screenshot di esempio:

In alcuni casi, potresti eseguire dei comandi che falliscono perché hai dimenticato di anteporre sudo. In tali scenari, potresti dover digitare nuovamente il comando iniziando con sudo. Per evitare di dover digitare nuovamente il comando, puoi utilizzare la funzionalità bash per "ripetere l'ultimo comando". La sintassi prevede due punti esclamativi. Puoi eseguire l'ultimo comando eseguito sul terminale inserendo quanto segue:
|
1 |
sudo !! |
Infine, è importante sapere che sudo eleva semplicemente il comando da eseguire con i privilegi di sudo. Per ulteriori informazioni, puoi seguire le istruzioni su questo link per divertirti un po' con i tuoi utenti.
Conclusione
Quando si lavora con più utenti, è fondamentale saper gestire il comando sudo e il file sudoers. In questo tutorial abbiamo introdotto le basi per la lettura e la modifica del file sudoers, nonché i vari metodi che puoi utilizzare per ottenere i privilegi di root.
Tieni sempre presente che la separazione dei privilegi è ciò che rende sicuri i sistemi Linux. Pertanto, i privilegi di super-utente non dovrebbero essere concessi agli utenti normali. Assegna solo i privilegi che sono assolutamente necessari a un particolare utente per eseguire i suoi compiti specifici nel sistema e non tutti i privilegi.
Buon computing!
Commenti
Ancora nessun commento. Scrivi il primo.