In Linux, il file sudoers è il punto in cui concedi agli utenti privilegi elevati. Per impostazione predefinita, solo l'utente root ha questi privilegi. Ma, in alcuni casi, potrebbe essere necessario che anche gli utenti normali dispongano di privilegi elevati.
Non sei un lettore? Guarda questo video tutorial correlato! Non vedi il video? Assicurati che il blocco degli annunci sia disattivato.Il file sudoers è principalmente per la gestione degli amministratori di sistema e può essere un po' scoraggiante per i nuovi arrivati. Non lasciare che questo ti scoraggi! Con pazienza e attenzione ai dettagli, chiunque può imparare a gestire il file sudoers in modo efficace.
Questa guida ti insegnerà come modificare i sudoer e dare agli utenti privilegi elevati in modo sicuro. Imparerai anche alcune best practice da tenere a mente quando lavori con i sudoer. Non andare da nessuna parte; preparati a portare la gestione dei privilegi degli utenti Linux a un livello superiore!
Prerequisiti
Questo tutorial sarà una dimostrazione pratica. Se desideri continuare, assicurati di avere un sistema Linux con un normale account utente che puoi utilizzare. Questa guida utilizza un sistema Ubuntu 20.04, ma dovrebbe funzionare anche qualsiasi altra distribuzione Linux.
Panoramica del file Linux Sudoers
Il file sudoers risiede in /etc/sudoers, un file di testo normale contenente le politiche sui privilegi che un utente ottiene quando esegue il comando sudo. Prima di andare oltre, è essenziale familiarizzare con i contenuti e le sezioni predefiniti del file sudoers.
Lo screenshot seguente mostra il contenuto del file sudoers predefinito su Ubuntu 20.04. Il contenuto predefinito del file sudoers può differire tra le distribuzioni Linux.
Quello che segue è un rapido riassunto delle sezioni nel file sudoers.
Sezione Default
Defaults env_reset - Executing commands with sudo creates a new environment with minimal or default environment variables. In most Linux distros, sudo will load the environment variable in the /etc/environment file.
- Defaults mail_badpass:questa riga attiva l'invio di un'e-mail alla radice quando un utente inserisce una password errata con sudo.
Defaults secure_path - This line defines the PATH environment variable that sudo uses instead of the user’s PATH environment.
privilegi sudo utente e gruppo
Questa riga definisce i privilegi sudo per utenti o membri di gruppi specifici.
Nota:la % all'inizio indica che la norma si applica ai membri del gruppo.
- Il primo campo definisce che la sua politica si applica al
root
utente e i membri deladmin
esudo
gruppi. - Il primo
ALL
significa che la regola si applica a tutti gli host. - Il secondo
ALL
consente ilroot
account per eseguire comandi come qualsiasi utente. - Il terzo
ALL
consente ilroot
account per eseguire comandi come qualsiasi gruppo. - L'ultimo
ALL
significa che questa politica si applica ai comandi di comando.
Includi direttive
Alla fine del file, vedrai una riga che sembra un commento ma non lo è. Le righe che iniziano con #include e #includedir sono chiamate direttive include.
#includedir /etc/sudoers.d – Questa riga dice a sudo di cercare in /etc/sudoers.d directory per eventuali file di configurazione aggiuntivi.
Modificare il file Sudoers con lo strumento giusto
Il file sudoers è un semplice file di testo che puoi aprire con il tuo editor di testo preferito, ma non è consigliabile farlo. Come mai? Poiché i contenuti del file sudoers seguono una sintassi specifica, un normale editor di testo non ha protezioni per impedirti di rovinare il file sudoers.
Una configurazione errata può portare a problemi di sicurezza; peggio, ogni utente potrebbe perdere la possibilità di elevare i propri privilegi.
Qual è lo strumento corretto? — visudo
. Questo strumento apre il file sudoers nell'editor di testo predefinito. Inoltre, visudo
impedisce la modifica simultanea ed esegue il controllo degli errori prima di uscire.
In Ubuntu 20.04, l'editor predefinito è vim
, ma puoi impostare un editor alternativo, come nano
, se preferisci.
1. Apri una sessione terminale o SSH nella tua macchina Linux.
2. Esegui il comando seguente per elencare gli editor di testo disponibili sul tuo computer.
sudo update-alternatives --config editor
Come puoi vedere, l'attuale editor predefinito è la selezione 5, che è vim. Supponiamo che tu preferisca mantenere l'impostazione predefinita, premi Invio. Se preferisci un altro editor, premi il numero di selezione corrispondente, ad esempio 0 per nano, e premi Invio.
3. Ora, esegui il comando seguente per aprire il file sudoers nell'editor predefinito.
sudo visudo
Se il file sudoers è aperto in un'altra sessione, vedrai l'errore seguente e visudo ti impedirà di aprire il file. In questo modo, nessun utente può apportare modifiche in conflitto contemporaneamente.
visudo:/etc/sudoers occupato, riprova più tardi
4. Una volta aperto il file sudoers, causa deliberatamente un errore di sintassi eliminando l'ultima istanza di ALL, quindi salva ed esci dall'editor.
5. visudo will warn you that there’s a syntax error and asks, “What now?”. At this point, you have three options.
- Digita
e
e premere Invio per modificare nuovamente il file. Questa opzione ti consente di correggere nuovamente il file sudoers nell'editor.
- Digita
x
e premi Invio per annullare le modifiche ed uscire davisudo
.
- Digitare Q, premere Invio per ignorare l'errore, salvare il file sudoers ed uscire da visudo. Non scegliere questa opzione se non sei sicuro delle conseguenze.
In questo esempio, premi x per annullare le modifiche e conservare il vecchio contenuto del file sudoers.
Come puoi vedere, sarebbe difficile rovinare il file sudoers con visudo
permanentemente.
Concessione di privilegi specifici
Apportare modifiche direttamente al file sudoers è fattibile ma può diventare ingestibile man mano che le politiche e le regole crescono. L'alternativa migliore consiste nell'utilizzare invece le direttive include. In questo modo, puoi creare più file di configurazione contenenti diversi criteri e regole personalizzate.
Si supponga di voler dare a un gruppo di utenti l'esecuzione di comandi di rete specifici come root. Per farlo, dovresti creare un file nella directory /etc/sudoers.d contenente le regole personalizzate per quel gruppo.
1. Innanzitutto, crea il gruppo che desideri che sarà l'obiettivo della regola personalizzata. In questo esempio, il nome del gruppo è netadmin.
sudo addgroup netadmin
2. Successivamente, crea un account utente normale e rendilo membro del gruppo netadmin.
sudo adduser ata
sudo usermod -aG netadmin ata
id ata
3. Ora crea un nuovo file sudoers chiamato /etc/sudoers.d/networking e aprilo con visudo.
sudo visudo -f /etc/sudoers.d/networking
4. Copia e incolla le seguenti righe nella rete file.
Cmnd_Alias CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias SERVERS = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias NETALL = CAPTURE, SERVERS
%netadmin ALL=NETALL
Le righe Cmnd_Alias creano alias per i comandi. In questo esempio, assegni l'alias CAPTURE per il comando tcpdump e SERVERS per i comandi apache2ctl e htpasswd. Pensa a queste righe come a un raggruppamento di comandi e a un nome collettivo.
L'ultima riga specifica che i membri del gruppo netadmin possono eseguire qualsiasi comando nell'alias NETALL come root. Questa riga deve essere successiva alle righe Cmnd_Alias.
5. Per testare i privilegi sudo dell'account ata, passa all'account utente ata.
su - ata
6. Ora, esegui uno dei comandi a cui l'utente ha accesso sudo, come tcpdump.
sudo tcpdump -c 5
Come puoi vedere di seguito, il comando sudo dovrebbe funzionare perché l'account ha accesso per eseguirlo.
7. Quindi, verifica e conferma che l'account non può eseguire altri comandi che non sono nella regola personalizzata, come lshw.
sudo lshw
Di conseguenza, il tentativo sudo non riesce perché il tuo account non ha il privilegio per eseguire il comando come root.
8. Infine, torna al tuo account eseguendo il comando seguente.
exit
Miglioramento della sicurezza utilizzando l'opzione passwd_tries
Non puoi permettere a nessuno di provare a inserire una password sbagliata con sudo tutte le volte che vogliono:sarebbe un invito aperto per attacchi di forza bruta o spray di password. Come misura preventiva, devi impostare il numero massimo di tentativi aggiungendo l'opzione passwd_tries all'interno del file sudoers.
1. Innanzitutto, apri il file sudoers personalizzato con visudo.
sudo visudo -f /etc/sudoers.d/networking
2. Aggiungi la riga sottostante alla fine del file sudoers. Questa riga consentirà fino a quattro tentativi di sudo password errati prima di impedire ulteriori tentativi.
Defaults passwd_tries=4
I file sudoers personalizzati ora dovrebbero avere lo stesso aspetto dello screenshot qui sotto. Assicurati di salvare il file e di uscire dall'editor.
3. Ora, passa all'account utente ata ed esegui nuovamente il comando tcpdump come root. Ma questa volta, inserisci una password errata fino al termine della richiesta della password.
sudo tcpdump
Dopo il quarto tentativo con una password errata, vedi che sudo ti impedisce di inserire un'altra password per la quinta volta.
Conclusione
In questo tutorial, hai appreso le basi del file sudoers predefinito. Hai creato regole personalizzate in un file sudoers separato per la concessione di privilegi personalizzati. La creazione e l'applicazione di regole personalizzate è più sicura rispetto all'aggiunta di utenti al sudo
gruppo.
Hai anche imparato come applicare l'opzione passwd_tries per specificare quanti tentativi di password errate un utente può effettuare prima che sudo termini il tentativo di autenticazione. Puoi aumentare il controllo granulare quali utenti hanno accesso a quali comandi.
Non fermarti qui! Puoi fare molto di più con il file sudoers, come aggiungere un file di lezione per rendere più piccante l'esperienza sudo dell'utente. Grazie per aver letto e divertiti a proteggere il tuo sistema Linux!