Gestione Sudoers
1. Introduzione
Quando si ha a che fare con sistemi Unix-like ci si trova spesso davanti a dover affrontare la gestione dei permessi riguardo a determinate cartelle, in questo articolo si vedrà come impostare invece il sistema per assegnare ad un determinato utente dei privilegi diversi per un determinato programma.
Ogni qual volta che l'utente necessita di permessi particolari per accedere ad una directory o ad un comando si deve avvalere di sudo (super user do).
2. Creazione dell'utente
Il primo passo da fare è quello di creare l'utente per il quale si vogliono assegnare i privilegi di root per determinati comandi.
Nel caso l'utente che si vuole utilizzare non sia presente tra quelli del sistema è necessario crearne uno nuovo tramite, in ambienti Unix-like, il comando adduser
.
adduser nomeutente
3. Visudo
Una volta che nel sistema è presente l'utente sul quale operare si passa alla fase successiva: assegnargli i privilegi di root (con o senza l'ausilio di password) per un determinato comando.
Per farlo si lancia il comando visudo
, il quale fa apparire sul terminale una schermata simile alla seguente.
#
# This file must be edited with the "visudo" command as root.
#
# See the man page for details or how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privileges specification
root ALL =(ALL) ALL
Come si può notare il file in questione (/etc/sudoers
) è suddiviso in diverse sezioni, le quali caratteristiche possono essere distinte in 3 categorie: Gestione degli alias, Impostazione delle opzioni e Gestione delle autorizzazioni.
3.1 Alias
Quando si vuole che gruppi di utenti, comandi o host abbiano gli stessi privilegi può essere utile definire gli Alias. Un Alias permette di "raggruppare" più oggetti dello stesso tipo sotto uno stesso nome.
La definizione di un Alias avviene con un comando simile al seguente e termina con un ritorno a capo.
tipo_alias NOME_ALIAS = oggetto1, oggetto2, ... oggettoN
Il nome di un alias viene sempre specificato (per convenzione) in maiuscolo e gli oggetti devono essere separati da virgole; esisitono 3 tipi di alias:
User_Alias
- Alias per una lista di utentiCmnd_Alias
- Alias per una lista di comandiHost_Alias
- Alias per una lista di host.
3.2 Opzioni Defaults
Oltre agli alias, prima di assegnare le autorizzazioni, è possibile impostare alcune opzioni di default per l'utilizzo di sudo. Alcune tra le opzioni più importanti sono descritte dalla seguente tabella, segue poi un breve esempio di utilizzo.
opzione | descrione | esempi di utilizzo |
---|---|---|
syslog |
Se negato disabilita il logging di syslog Valori: auth o authpriv |
!syslog=auth |
set_logname |
Se negato indica che non è necessario il parametro -u di sudo per un determinato utente. |
Defaults>root !set_logname |
mail_always |
Invia una mail all'utente configurato in mailto ogni volta che un utente utilizza sudo.Valori: on o off (default) |
mail_always on oppure mail_always |
mail_badpass |
Invia una mail all'utente configurato in mailto ogni volta che un utente utilizza sudo ed inserisce una password errata.Valori: on o off (default) |
mail_badpass on oppure mail_badpass |
mail_no_user |
Invia una mail all'utente configurato in mailto (se settato) quando un utente non appartente al file /etc/sudoers utilizza sudo.Valori: on (default) o off |
mail_no_user off oppure !mail_no_user |
rootpw |
Indica a sudo di richiedere la password di root anziché la password dell'utente richiedente per l'autenticazione. Valori: on o off (default) |
rootpw on oppure rootpw |
passwd_timeout |
Indica il numerp di minuti dopo il quale sudo richiede la password all'utente. Valori: Numeri interi o frazionari (esempio 3 o 2,5); 5 è il valore di default e 0 indica che la password viene richiesta ad ogni comando. |
passwd_timeout=0 |
mailsub |
Imposta l'oggetto della e-mail inviata all'utente impostato in mailto Valori: di default l'oggetto è: *** SECURITY information for %h *** , dove il parametro %h rappresenta il nome dell'host. Un altro parametro importante può essere %U il quale indica l'utente che ha prodotto l'eccezione. |
mailsub ** BAD AUTHENTICATION: %U %h ** |
mailto |
Imposta l'indirizzo email dell'utente al quale inoltrare le e-mail di segnalazione | mailto="local_mailadress" |
logfile |
Imposta il file di log per sudo | logfile=/var/log/sudo.log |
Esempio di utilizzo delle opzioni Defaults:
Defaults syslog=auth
Defaults>root !set_logname
Defaults logfile=/var/log/sudo.log
Defaults mailto="admin@staff.example.com"
Defaults !mail_always
Defaults mailsub ** BAD AUTHENTICATION: %U %h **
3.3 Autorizzazioni
Le autorizzazioni rappresentano la parte fondamentale della gestione dei sudoers, a differenza delle precedenti due sezioni che spesso non servono nelle applicazioni pratiche.
Attraverso questi comandi l'amministratore ha la possibilità di assegnare ad un utente (o ad un gruppo di utenti) i provilegi per eseguire determinati comandi (o gruppi di comandi) su determinati host (o gruppi di host) come utente root. Di seguito la forma base di un'assegnamento di autorizzazioni.
lista_utenti lista_host = (utente_target) lista_comandi
Ad eccezione della lista_utenti tutti i campi possono avere anche il valore universale ALL
. Entriamo un po' più nel dettaglio.
- Con lista_utenti si intende un utente o una sequenza di utenti separata da virgole o un alias di tipo utente
- Con lista_host si intende una macchina o una sequenza di macchine separate da virgole o un alias di tipo host
- Con il parametro opzionale posto tra parentesi utente_target è possibile assegnare all'utente privilegi differenti da quelli di root (valore di default)
- Con lista_comandi si intende un comando o una sequenza di comandi separati da virgole o un alias di tipo comando. Prima di stilare la lista dei comandi è possibile inserire la parola chiave
NOPASSWD
seguita da un segno di due punti; questa parola chiave indica che agli utenti interessati (nelle macchine specificate), per i comandi definiti, non è richiesta nessuna password (molto utile quando si vuol far eseguire un determinato comando ad uno script)
Di seguito alcuni esempi di assegnazione delle autorizzazioni
utente1 ALL = (ALL) ALL
ALIAS1 macchina1 = ALL
utente1, utente2 ALL= NOPASSWD: /percorso/assoluto/comando1