Translation(s): العربية - English - Español - Français - Italiano - Русский
Root > sudo
Sudo (a volte considerato l'abbreviazione di Super-user do) è un programma progettato per far sì che gli amministratori di sistema permettano ad alcuni utenti di eseguire certi comandi come root (o altro utente). La filosofia di base è quella di dare meno privilegi possibile, ma permettere ancora di compiere il lavoro. Sudo è anche un modo efficace per registrare chi ha usato un dato comando e quando.
A partire da Debian Squeeze, se si richiede il task Desktop durante l'installazione, questo richiamerà sudo con una configurazione predefinita che automaticamente garantisce i diritti per usare sudo a tutti i membri del gruppo sudo. A seconda di quale account utente si imposta durante l'installazione iniziale, è comunque possibile che il proprio account non sia stato aggiunto a quel gruppo; si può controllare eseguendo il comando groups.
Per aggiungere un utente al gruppo sudo:
# adduser pippo sudo
Dopo essere stati aggiunto ad un nuovo gruppo, l'utente deve fare il logout e quindi di nuovo il login affinché l'impostazione del nuovo gruppo abbia effetto. I gruppi vengono assegnati agli utenti solamente al momento del login. Una della maggiori fonti di confusione viene proprio dal fatto che gli utenti si aggiungono ad un gruppo, ma poi non fanno il logout e di nuovo il login e poi hanno problemi perché non sono ancora stati assegnati ad un gruppo. Si può controllare di quali gruppi si fa parte usando i comandi id o groups.
Perché sudo
Usare sudo è meglio (più sicuro) che aprire una sessione come root per svariati motivi, inclusi:
non è necessario che alcuno conosca la password di root (sudo richiede la password dell'utente attuale); si possono dare privilegi extra a utenti specifici temporaneamente e poi rimuoverli senza dover cambiare password;
è facile eseguire soltanto i comandi che richiedono privilegi speciali come root, usando sudo; per tutto il resto del tempo si lavora come utente non privilegiato, il che riduce i danni che possono essere causati da sbagli;
- verifica/registrazione: quando un comando è eseguito con sudo il nome dell'utente e il comando sono registrati.
Per le ragioni esposte, il passaggio a root con sudo -i (o sudo su) è generalmente sconsigliato perché annulla le caratteristiche di cui sopra.
Panoramica sulla configurazione
Ecco un esempio veloce se si desidera consentire ad alcuni utenti di eseguire determinati programmi (per maggiori informazioni leggere il manuale).
# /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
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
User_Alias MYADMINS = jdoe
# User alias specification
# Cmnd alias specification
Cmnd_Alias SHUTDOWN = /sbin/shutdown, /sbin/reboot, /sbin/halt
Cmnd_Alias PKGMGMT = /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude
# User privilege specification
# Users listed above (MYADMINS) can run package managers and reboot the system.
MYADMINS ALL = PKGMGMT, SHUTDOWN
# Users in the group wheel can execute any command impersonating any user.
#%wheel ALL= ALL
#Default rule for root.
root ALL=(ALL) ALL
#includedir /etc/sudoers.d
Problemi e suggerimenti
PATH not impostato
Un errore tipico che si verifica usando sudo per installare un pacchetto è:
dpkg: attenzione: 'ldconfig' non è stato trovato nella variabile PATH o non è un eseguibile. dpkg: attenzione: 'start-stop-daemon' non è stato trovato nella variabile PATH o non è un eseguibile. dpkg: error: 2 expected programs not found in PATH or not executable. Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin.
Il file /etc/sudoers nel pacchetto contiene questa riga:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Le versioni precedenti non la includevano. Se si ha un file /etc/sudoers modificato localmente (questo è il caso della maggior parte di persone) e poi si aggiorna mantenendo la propria versione locale modificata, allora il file mancherà di questa riga necessaria. Non scavalcherà più l'impostazione del PATH quando si usa sudo; ciò con ogni propabibilità avrà come risultato un PATH non impostato in modo corretto e che non include le directory di sistema. La soluzione è quella di fondere le modifiche locali nel nuovo file /etc/sudoers del pacchetto, oppure di mettere le modifiche locali nella nuova posizione /etc/sudoers.d/ in un file con un nome univoco come /etc/sudoers.d/local-sudoers. Per i dettagli vedere il bug Debian 639841.
Spiacente, all'utente mario non è consentito eseguire ...
Una sessione tipica si presenta così:
$ sudo test We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for mario: Sorry, user mario is not allowed to execute '/usr/bin/test' as root on localhost.
Questo messaggio significa esattamente ciò che dice: l'utente che si sta usando non ha il permesso di eseguire il comando specificato sulla macchina. Una ragione possibile che può indurre in confusione è il fatto che l'amministratore ha appena aggiunto mario al gruppo privilegiato, ma si sta usando sempre un accesso alla macchina vecchio che non ha le nuove informazioni sui gruppi e perciò non ha i nuovi permessi sudo. A coloro che si trovano in questa situzione viene solitamente consigliato di fare un logout e poi nuovamente il login, anche se a volte la cosa si può risolvere facendo solamente un nuovo "login a caldo" con su - $USER
La direttiva include
Il file /etc/sudoers standard in Wheezy, nella versione 1.8.2-1, termina con la riga:
#includedir /etc/sudoers.d
Questo rende possibile ad altri pacchetti fornire pezzetti di configurazione in /etc/sudoers.d/<nomepacchetto>, che modificano la configurazione di sudo. Può sembrare che sia necessario modificare la riga eliminando il carattere "#" iniziale (detto anche cancelletto), ma non è così: il carattere "#" fa parte della direttiva!
sudoers è in sola lettura
Sì, il file /etc/sudoers è intenzionalmente impostato in sola lettura, anche per root!
La spiegazione solitamente fornita è che questa impostazione assicura che gli amministratori modifichino il file solamente usando il comando visudo. Tuttavia, questa teoria è un po' zoppicante. Il fatto di avere permessi 0440 non impedisce affatto di fare sudo nano /etc/sudoers: la maggior parte degli editor di testo permette di modificare file senza lamentarsi del fatto che sia in sola lettura. Inoltre, se si danneggia /etc/sudoers, la soluzione è semplice quanto eseguire su -c visudo, che è nulla in confronto al tipo di procedura di recupero che si deve fare se si danneggia qualcosa come /etc/inittab (permessi 0644). Perciò, se c'è un buon motivo per questi permessi insoliti, questo rimane un mistero: suggerimenti sono i benvenuti.
Directory HOME (e impostazioni di profilo) sbagliate
Se si hanno problemi quando si usa sudo nella propria shell, e la propria directory $HOME (e le impostazioni di profilo) non si comporta come atteso perché la nuova directory HOME è /root, è bene sapere che la configurazione predefinita di sudo in Squeeze reimposta tutte le variabili d'ambiente. Per ripristinare il vecchio comportamento per cui preservava la variabile d'ambiente $HOME dell'utente, si possono aggiungere le seguenti righe al proprio file di configurazione /etc/sudoers:
Defaults env_keep += HOME
Richiedere password di root
Se per l'uso di sudo si desidera richiedere la password di root piuttosto che la password utente, aggiungere la riga:
Defaults rootpw
Per maggiori informazioni leggere l'elenco originale dei cambiamenti per la versione 1.7.4.
Si veda anche
Pagine man: sudoers(5), sudo(8), visudo(8), sudoedit(8), sudoreplay(8)