Ricerca nel sito web

10 utili configurazioni dei sudoer per impostare "sudo" in Linux


In Linux e in altri sistemi operativi simili a Unix, solo l'utente root può eseguire tutti i comandi ed eseguire determinate operazioni critiche sul sistema come installazione e aggiornamento, rimozione di pacchetti, creazione di utenti e gruppi, modifica di sistemi importanti file di configurazione e così via.

Tuttavia, un amministratore di sistema che assume il ruolo di utente root può consentire ad altri normali utenti del sistema con l'aiuto del comando sudo e alcune configurazioni di eseguire alcuni comandi nonché di eseguire una serie di operazioni vitali del sistema, comprese quelle menzionate sopra.

In alternativa, l'amministratore di sistema può condividere la password dell'utente root (che non è un metodo consigliato) in modo che i normali utenti del sistema possano accedere 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 politica di sicurezza:

  1. Legge e analizza /etc/sudoers, cerca l'utente invocante e i suoi permessi,
  2. quindi richiede all'utente chiamante una password (normalmente la password dell'utente, ma può anche essere la password dell'utente di destinazione. Oppure può essere saltata con il tag NOPASSWD),
  3. successivamente, sudo crea un processo figlio in cui chiama setuid() per passare all'utente di destinazione
  4. successivamente, esegue una shell o il comando fornito come argomento nel processo figlio sopra.

Di seguito sono riportate dieci configurazioni di 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 predefinite

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

Ai fini di questa guida, azzereremo il primo tipo di Predefiniti nei moduli seguenti. I parametri possono essere flag, valori interi, stringhe o elenchi.

Tieni presente che i flag sono implicitamente booleani e possono essere disattivati utilizzando l'operatore '!' e che gli elenchi hanno due operatori di assegnazione aggiuntivi, += (aggiungi alla lista) e -= (rimuovi dall'elenco).

Defaults     parameter
OR
Defaults     parameter=value
OR
Defaults     parameter -=value   
Defaults     parameter +=value  
OR
Defaults     !parameter       

1. Imposta un PERCORSO sicuro

Questo è il percorso utilizzato per ogni comando eseguito con sudo, ha due importanza:

  1. Utilizzato quando un amministratore di sistema non si fida degli utenti sudo per avere una variabile di ambiente PATH sicura
  2. Per separare il "percorso root" e il "percorso utente", solo gli utenti definiti da exempt_group non sono interessati 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 nella sessione di accesso utente TTY

Per consentire l'invocazione di sudo da una vera tty ma non tramite metodi come script cron o cgi-bin, aggiungi la riga:

Defaults  requiretty   

3. Esegui il comando Sudo utilizzando un pty

Alcune volte, gli aggressori possono eseguire un programma dannoso (come un virus o un malware) utilizzando sudo, che ancora una volta biforcherebbe un processo in background che rimane sul dispositivo terminale dell’utente anche quando il programma principale ha terminato l’esecuzione.

Per evitare uno scenario del genere, puoi configurare sudo per eseguire altri comandi solo da uno psuedo-pty utilizzando il parametro use_pty, indipendentemente dal fatto che la registrazione I/O sia attivata o meno come segue:

Defaults  use_pty

4. Crea un file di registro Sudo

Per impostazione predefinita, sudo registra tramite syslog(3). Tuttavia, per specificare un file di registro personalizzato, utilizzare il parametro logfile in questo modo:

Defaults  logfile="/var/log/sudo.log"

Per registrare il nome host e l'anno a quattro cifre nel file di registro personalizzato, utilizzare rispettivamente i parametri log_host e log_year come segue:

Defaults  log_host, log_year, logfile="/var/log/sudo.log"

Di seguito è riportato un esempio di file di registro sudo personalizzato:

5. Registra input/output del comando Sudo

I parametri log_input e log_output consentono a sudo di eseguire un comando in pseudo-tty e registrare in modo ricettivo tutti gli input dell'utente e tutti gli output inviati allo schermo.

La directory di registro I/O predefinita è /var/log/sudo-io e, se è presente un numero di sequenza della sessione, viene archiviato in questa directory. È possibile specificare una directory personalizzata tramite il parametro iolog_dir.

Defaults   log_input, log_output

Sono supportate alcune sequenze di escape come %{seq} che si espande in un numero di sequenza base 36 monotonicamente crescente, 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

Puoi visualizzare il resto dei file in quella directory usando il comando cat.

6. Lezione Utenti Sudo

Per dare lezioni agli utenti sudo sull'utilizzo della password nel sistema, utilizzare il parametro lecture come di seguito.

Ha 3 possibili valori:

  1. sempre – impartisci sempre lezioni a un utente.
  2. once – impartisce lezioni a un utente solo la prima volta che esegue il comando sudo (viene utilizzato quando non viene specificato alcun valore)
  3. mai – mai dare lezioni all’utente.
 
Defaults  lecture="always"

Inoltre, puoi impostare un file di lezione personalizzato con il parametro lecture_file, digita 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, sulla riga di comando viene visualizzato un determinato messaggio. Il messaggio predefinito è "scusa, riprova", puoi modificare il messaggio utilizzando il parametro badpass_message come segue:

Defaults  badpass_message="Password is wrong, please try again"

8. Aumenta il limite di tentativi di password sudo

Il parametro passwd_tries viene utilizzato per specificare il numero di volte in cui 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. Lascia che Sudo ti insulti quando inserisci una password sbagliata

Nel caso in cui un utente digiti una password errata, sudo visualizzerà gli insulti sul terminale con il parametro insulti. Ciò disattiverà automaticamente il parametro badpass_message.

Defaults  insults 

Leggi di più: lascia che Sudo ti insulti quando inserisci una password errata

10. Ulteriori informazioni sulle configurazioni Sudo

Inoltre, puoi saperne di più sulle configurazioni dei comandi sudo leggendo: Differenza tra su e sudo e Come configurare sudo in Linux.

Questo è tutto! Puoi condividere altre utili configurazioni dei comandi sudo o trucchi e suggerimenti con gli utenti Linux tramite la sezione commenti qui sotto.