Nei sistemi operativi Linux e in altri sistemi simili a Unix, solo l’utente root può eseguire tutti i comandi e svolgere determinate operazioni critiche sul sistema come installare e aggiornare, rimuovere pacchetti, creare utenti e gruppi, modificare importanti file di configurazione di sistema e così via.
Tuttavia, un amministratore di sistema che assume il ruolo di utente root può permettere ad altri normali utenti di sistema, con l’aiuto del comando sudo e alcune configurazioni, di eseguire alcuni comandi così come svolgere una serie di operazioni vitali di sistema tra cui quelle menzionate in precedenza.
In alternativa, l’amministratore di sistema può condividere la password dell’utente root (che non è un metodo consigliato) in modo che i normali utenti di sistema abbiano accesso all’account utente root tramite il comando su.
sudo consente a un utente autorizzato di eseguire un comando come root (o un altro utente), come specificato dalla policy di sicurezza:
- Legge e analizza /etc/sudoers, cerca l’utente che ha invocato il comando e i suoi permessi,
- poi chiede all’utente che ha invocato il comando una password (di solito la password dell’utente, ma può anche essere la password dell’utente di destinazione. Oppure può essere saltata con il tag NOPASSWD),
- dopodiché sudo crea un processo figlio in cui chiama setuid() per passare all’utente di destinazione
- successivamente, esegue una shell o il comando fornito come argomenti nel processo figlio sopra.
Di seguito sono riportate dieci configurazioni del file /etc/sudoers per modificare il comportamento del comando sudo utilizzando le voci Defaults.
$ sudo cat /etc/sudoers
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults logfile="/var/log/sudo.log" Defaults lecture="always" Defaults badpass_message="Password is wrong, please try again" Defaults passwd_tries=5 Defaults insults Defaults log_input,log_output
Tipi di voci Defaults
Defaults parameter, parameter_list #affect all users on any host Defaults@Host_List parameter, parameter_list #affects all users on a specific host Defaults:User_List parameter, parameter_list #affects a specific user Defaults!Cmnd_List parameter, parameter_list #affects a specific command Defaults>Runas_List parameter, parameter_list #affects commands being run as a specific user
Per gli scopi di questa guida, ci concentreremo sul primo tipo di Defaults nelle forme riportate di seguito. I parametri possono essere flag, valori interi, stringhe o liste.
Si dovrebbe notare che i flag sono booleani impliciti e possono essere disattivati utilizzando l’operatore '!'
, e le liste hanno due operatori di assegnazione aggiuntivi, +=
(aggiungi alla lista) e -=
(rimuovi dalla lista).
Defaults parameter OR Defaults parameter=value OR Defaults parameter -=value Defaults parameter +=value OR Defaults !parameter
1. Imposta un PATH sicuro
Questo è il percorso utilizzato per ogni comando eseguito con sudo, ha due importanze:
- Utilizzato quando un amministratore di sistema non si fida degli utenti sudo di avere una variabile d’ambiente PATH sicura
- Per separare il “percorso root” e il “percorso utente”, solo gli utenti definiti da exempt_group non sono influenzati da questa impostazione.
Per impostarlo, aggiungi la riga:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. Abilita sudo su sessione utente di login TTY
Per abilitare sudo da invocare da un vero tty ma non attraverso metodi come cron o cgi-bin script, aggiungi la riga:
Defaults requiretty
3. Esegui il comando sudo utilizzando un pty
A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.
Per evitare una tale situazione, puoi configurare sudo per eseguire altri comandi solo da un pseudo-pty utilizzando il parametro use_pty
, indipendentemente dal fatto che l’I/O logging sia attivato o meno come segue:
Defaults use_pty
4. Crea un file di log sudo
Per impostazione predefinita, sudo registra tramite syslog(3). Tuttavia, per specificare un file di log personalizzato, utilizzare il parametro del file di log come segue:
Defaults logfile="/var/log/sudo.log"
Per registrare l’hostname e l’anno a quattro cifre nel file di log personalizzato, utilizzare rispettivamente i parametri log_host e log_year come segue:
Defaults log_host, log_year, logfile="/var/log/sudo.log"
Ecco un esempio di un file di log sudo personalizzato:

5. Registra l’Input/Output del Comando Sudo
I parametri log_input e log_output consentono a sudo di eseguire un comando in pseudo-tty e registrare tutto l’input dell’utente e tutto l’output inviato allo schermo rispettivamente.
La directory predefinita per il log I/O è /var/log/sudo-io, e se c’è un numero di sequenza della sessione, viene memorizzato in questa directory. È possibile specificare una directory personalizzata tramite il parametro iolog_dir.
Defaults log_input, log_output
Alcune sequenze di escape sono supportate come %{seq}
che si espande in un numero di sequenza base-36 in aumento monotono, come 000001, dove ogni due cifre vengono utilizzate per formare una nuova directory, ad es. 00/00/01 come nell’esempio seguente:
$ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log

È possibile visualizzare il resto dei file in quella directory utilizzando il comando cat.
6. Lezione agli Utenti Sudo
Per dare una lezione agli utenti sudo sull’uso delle password nel sistema, utilizzare il parametro lecture come segue.
Ha 3 valori possibili:
- always – dare sempre una lezione a un utente.
- Una volta – dare una lezione all’utente solo la prima volta che esegue il comando sudo (questo viene utilizzato quando non viene specificato alcun valore)
- Mai – non dare mai lezioni all’utente.
Defaults lecture="always"
Inoltre, puoi impostare un file di lezione personalizzato con il parametro lecture_file, digitando il messaggio appropriato nel file:
Defaults lecture_file="/path/to/file"

7. Mostra un Messaggio Personalizzato Quando Inserisci una Password Sudo Errata
Quando un utente inserisce una password errata, compare un determinato messaggio sulla riga di comando. Il messaggio predefinito è “scusa, riprova“, puoi modificare il messaggio utilizzando il parametro badpass_message nel seguente modo:
Defaults badpass_message="Password is wrong, please try again"
8. Aumenta il Limite di Tentativi della Password Sudo
Il parametro passwd_tries viene utilizzato per specificare il numero di volte che un utente può provare a inserire una password.
Il valore predefinito è 3:
Defaults passwd_tries=5

Per impostare un timeout della password (il valore predefinito è 5 minuti) utilizzando il parametro passwd_timeout, aggiungi la riga seguente:
Defaults passwd_timeout=2
9. Fai Sì che Sudo Ti Insulti Quando Inserisci una Password Errata
Se un utente digita una password errata, sudo mostrerà degli insulti sul terminale con il parametro degli insulti. Questo disattiverà automaticamente il parametro badpass_message.
Defaults insults

Leggi Altro: Fai Sì che Sudo Ti Insulti Quando Inserisci una Password Errata
10. Scopri Altre Configurazioni di Sudo
Puoi imparare ulteriori configurazioni del comando sudo leggendo: Differenza tra su e sudo e Come Configurare sudo in Linux.
Ecco! Puoi condividere altre utili configurazioni del comando sudo o trucchi e suggerimenti con gli utenti Linux attraverso la sezione commenti qui sotto.
Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/