Configurare SUDO per gestire le attività degli amministratori
Versioni Compatibili Tutte le versioni supportate di Debian |
Introduzione
Sudo è un programma progettato per permettere ad alcuni utenti di eseguire certi comandi come root (o altro utente).
La filosofia alla base della sua creazione in particolare è stata quella di consentire pieni privilegi di amministratore a meno comandi possibili, ma permettere ancora di compiere determinate attività di amministrazione. Sudo è anche un modo efficace per registrare l'attività di root: chi ha usato sudo
, con che comando e quando.
A partire da Squeeze in Debian sudo
è installato e abilitato, se è stato scelto il metapacchetto Desktop durante l'installazione, ma di default nessun utente può usarlo a meno che in fase di installazione si sia disabilitato l'account root.
Perché sudo
Usare sudo
in alcune circostanze è meglio (più sicuro) che aprire una sessione come root, in particolare per i seguenti motivi:
- Non c'è bisogno di password di root, ma sudo richiede la password dell'utente corrente. È fondamentale nel caso si debba permettere a più persone di svolgere attività di amministrazione, senza bisogno di condividere la stessa password.
- In una shell i comandi vengono eseguiti come utente corrente (cioè non privilegiato) e per impostazione predefinita non viene avviata una shell privilegiata, permettendo di evitare errori. Solo i comandi preceduti da sudo vengono eseguiti come root.
- Verifica/registrazione: quando un comando è eseguito con sudo il nome dell'utente e il comando sono registrati.
Per le ragioni esposte, utilizzare una shell privilegiata con sudo -i
(oppure sudo -s
, sudo sh
, sudo su
e varianti simili) è generalmente sconsigliato perché annulla le caratteristiche di cui sopra. Nel seguito della guida vedremo come disabilitare questa possibilità.
Si noti che per un sistema con un singolo utente, che è il caso per la maggior parte degli utenti desktop, i benefici di ottenere privilegi di amministratore con sudo
sono inesistenti rispetto all'uso di su
, se si permette di eseguire una shell come root. Sarebbe invece necessario studiare il file di configurazione e personalizzarlo in modo opportuno, restringendone l'uso il più possibile, cercando il giusto compromesso tra sicurezza e comodità d'uso.
Per contro sudo
di default permette l'esecuzione di comandi successivi senza ulteriore richiesta di password, se entro 15 minuti dall'ultima richiesta.
Installazione
Per installare sudo
, se non è presente, su Debian basta installare il pacchetto sudo. Per esempio con apt-get e privilegi di amministratore basta:
# apt-get install sudo
Configurazione
Per modificare il file di configurazione, anziche modificare direttamente /etc/sudoers
, è consigliato l'uso del comando visudo
, che effettua anche un controllo sulla sintassi utilizzata. Ed è l'unico modo per trarre beneficio dalla flessibilità permessa da sudo
, in genere a spese della comodità d'uso.
Gruppo sudo
Comunque il file di configurazione di sudo
è già preconfigurato per permettere a un utente di eseguire ogni comando come amministratore, se appartiene al gruppo sudo
. Quindi non è necessario apportare modifiche al file di configurazione se si intende permettere al proprio utente di svolgere qualsiasi comando, previa richiesta della propria password.
Ciò non significa però che si debba aggiungere il proprio utente a tale gruppo, specialmente se l'account root è attivo. Va fatto soltanto se si vuole utilizzare sudo
, con il proprio account, come sostituto per tutte le attività di amministrazione. Non si otterrebbe alcun beneficio in termini di sicurezza, se è anche l'unico account del sistema, si avrebbe solo la comodità di doversi ricordare un'unica password.
Se è questo il caso, per aggiungere il proprio utente (per esempio pippo) al gruppo sudo va eseguito:
# adduser pippo sudo
È necessario un logout e un nuovo login per risultare iscritti al gruppo.
Si può verificare di essere membri di sudo, digitando senza privilegi di amministratore:
$ groups
Per rimuoversi invece da tale gruppo, se per esempio il proprio utente si chiama pippo, basta:
# deluser pippo sudo
Prima di questo comando si consiglia di ottenere i privilegi di amministratore con l'uso di su -
, per verificare che l'account root è attivo prima di rimuoversi dal gruppo.
Disabilitare su e root
Se si modifica la configurazione di default per poter utilizzare sudo
con tutti i comandi, si consiglia che almeno sia l'unico modo per diventare amministratori, nel caso l'account root esista.
Per disabilitare soltanto l'uso di su
, senza disabilitare l'account di root, è sufficiente:
$ sudo nano /etc/pam.d/su
E decommentare (rimuovere il carattere # iniziale) dalla linea:
#auth required pam_wheel.so
dopodiché salvare premendo Ctrl-o
e uscire con Ctrl-x
. Nessuno potrà utilizzarlo, se non i membri del gruppo root (oppure wheel, se creato), ovvero soltanto lo stesso amministratore.
Per ripristinare tutto è sufficiente annullare le proprie modifiche, ripetendo il comando precedente e ricommentando con # la riga:
auth required pam_wheel.so
Se si vuole invece disabilitare l'account di root, digitare il seguente comando:
$ sudo usermod --lock --expiredate 1 root
Ora è possibile ottenere i privilegi di amministratore soltanto utilizzando sudo
, scrivendolo prima del comando da eseguire come amministratore.
Non sarà possibile né effettuare il login come utente root, né utilizzare il comando su
.
Per riattivare root, permettendo nuovamente sia il login che l'utilizzo di su
, dare invece il seguente comando:
$ sudo usermod --unlock --expiredate "" root
Si noti che è necessario anche assegnargli una password, se l'account non era stato creato:
$ sudo passwd
Esempio di configurazione
Per modificare invece il file di configurazione per sfruttare la flessibilità di sudo
, con privilegi di amministratore digitare:
# visudo
Un esempio di configurazione può essere questo:
# /etc/sudoers # # This file MUST be edited with the 'visudo' command as root. # # See the man page for details on how to write a sudoers file. # Defaults env_reset # Configurazione di default per root # L'utente root ha i permessi su ogni comando root ALL=(ALL) ALL # Definisco un alias contenente una lista # di utenti amministratori del server User_Alias ADMINS = utente1, utente2, utente3 User_Alias SUPERUSERS = utente4, utente5 # Definisco eventuali alias per gli utenti # Definisco degli alias per i comandi di sistema Cmnd_Alias SHUTDOWN = /sbin/shutdown, /sbin/reboot, /sbin/halt Cmnd_Alias PKGMGMT = /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude # Definisco degli alias per i comandi che voglio impedire Cmnd_Alias NSHELLS = /bin/sh,/bin/bash Cmnd_Alias NSU = /bin/su Cmnd_Alias NVISUDO = /usr/sbin/visudo # Definisco eventuali privilegi degli utenti # Gli utenti del gruppo ADMINS possono gestire i pacchetti deb e riavviare # il server ADMINS ALL = PKGMGMT, SHUTDOWN # Gli utenti del gruppo SUPERUSERS possono fare tutto e impersonare qualsiasi # utente, tranne eseguire una shell di root, usare l'hack "sudo su" e # modificare la configurazione di sudo SUPERUSERS ALL = ALL, !NSHELLS, !NSU, !NVISUDO
ATTENZIONE Le restrizioni operate con ! non sono MAI realmente efficaci contro malintenzionati se si permette l'uso di ALL, vista la difficoltà di immaginare a priori tutti i comandi possibilit. Al limite comunicano che i SUPERUSERS non dovrebbero eseguire tali comandi o equivalenti con lo stesso effetto. Infatti le restrizioni sono facilmente aggirabili modificando direttamente L'unico modo per restringere le attività che un utente può eseguire come amministratore è limitarlo a una lista predeterminata di eseguibili, valutando singolarmente che non siano sfruttabili anche per altre azioni, come per esempio eseguire una shell o alterare il sistema in modo arbitrario. |
Esempio di sessione sudo
Una tipica sessione di sudo
si presenta così:
utente1@server $ sudo comando Ci auguriamo tu abbia ricevuto la notifica dall'amministratore locale di sistema. Che si riduce solitamente a queste tre cose: #1) Rispetta la privacy altrui. #2) Pensa prima di digitare. #3) Da grandi poteri derivano grandi responsabilità. [sudo] password for utente1:
Si ricordi che, di default, ogni successivo comando non richiederà nuovamente la password, finché non saranno passati 15 minuti dall'ultima richiesta. Si possono invalidare le credenziali memorizzate, comportando la richiesta di password per i comandi successivi, eseguendo manualmente:
$ sudo -k
e si possono personalizzare i minuti di timeout, modificando con visudo
il file di configurazione per aggiungere in cima al file:
Defaults timestamp_timeout=MINUTI
Nel caso dopo l'esecuzione di un comando con sudo
si ricevesse la risposta:
Spiacente, all'utente utente1 non è consentito eseguire '/usr/bin/comando' come root su localhost
significa che l'utente non ha i permessi, in base al file di configurazione creato, di eseguire tale comando.
File di log
Il comando sudo
logga tutte le sue attività nel file /var/log/auth.log
Sitografia
Guida scritta da: Ferdybassi 12:42, 6 nov 2010 (CET) | Debianized 60% |
Estesa da: | |
Verificata da: | |
Verificare ed estendere la guida | Cos'è una guida Debianized |