Difference between revisions of "Sudo (Italiano)"

From ArchWiki
Jump to: navigation, search
(rm temporary i18n template)
(38 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
[[Category:Security (Italiano)]]
 
[[Category:Security (Italiano)]]
[[Category:HOWTOs (Italiano)]]
+
[[cs:Sudo]]
{{i18n|Sudo}}
+
[[en:Sudo]]
{{translateme}}
+
[[es:Sudo]]
{{note|Questo articolo è in fase di traduzione. Seguite per ora le istruzioni della versione inglese.}}
+
[[fr:Sudo]]
 +
[[ru:Sudo]]
 +
[[sr:Sudo]]
 +
[[tr:Sudo]]
 +
[[uk:Sudo]]
 +
[[zh-CN:Sudo]]
 +
{{Article summary start| Sommario}}
 +
{{Article summary text|Una panoramica sulla popolare utility di uso dei privilegi di ''root'' da utente.}}
 +
{{Article summary heading|Overview}}
 +
{{Article summary text|[[Users and Groups (Italiano)|Users and groups]] sono usati su GNU/Linux per il controllo degli accessi. Il superutente (root) ha il completo accesso al sistema operativo ed alla sua configurazione, ma è destinato esclusivamente ad uso amministrativo. Gli utenti non privilegiati possono usare programmi come [[su]] e [[sudo (Italiano)|sudo]] per operazioni con privilegi di root.}}
 +
{{Article summary end}}
  
Sudo (su "do") allows a system administrator to delegate authority to give certain users (or groups of users) the ability to run some (or all) commands as root or another user while providing an audit trail of the commands and their arguments.[http://www.gratisoft.us/sudo/]
+
Sudo (su "do") consente all'amministratore di sistema di delegare a certi utenti (o gruppi di utenti) il permesso e potere di eseguire alcuni, o tutti, i comandi in qualità di root, fornendo nel contempo traccia di tutti i comandi e le azioni eseguite.[http://www.gratisoft.us/sudo/]
  
== Rationale ==
+
== Logica di base ==
  
Sudo is a secure alternative to the traditional [[su]] command. Many times the user utilizes su (substitute user) to gain root priviledges. Generally, it is considered unwise to login as root -- the superuser -- for extended periods of time. The root user enjoys complete and absolute control over the entire system, but at great risk! Simple typos can easily render a system unusable, and any applications run as root share this unfettered access.
+
Sudo è un'alternativa sicura per il comando [[su]] tradizionale. Molto spesso l'utente utilizza su (super user) per ottenere i privilegi di root. In generale, si ritiene imprudente eseguire il login come root, "il superutente", per periodi di tempo prolungati. L'utente root gode di controllo completo e assoluto su tutto il sistema, ma a grande rischio! Alcuni semplici errori possono facilmente rendere un sistema inutilizzabile, e tutte le applicazioni in esecuzione con privilegi di root consentiranno un libero accesso all'intera struttura gerarchica del file system.
  
Rather, sudo grants ''temporary'' privilege escalation for a single command (whether as root or another user); returning to the unprivileged state after completion, and rendering the system safe from unintended consequences. Additionally, sudo logs all commands and failed access attempts for security auditing.
+
Sudo invece, concede dei privilegi ''temporanei'' per un singolo comando (sia come root che come altro utente), ristabilendo alla fine dell'operazione lo stato di utente normale, senza privilegi di root e rendendo di conseguenza, il sistema nuovamente "in salvo" da azioni e stati a rischio. Sudo fornisce inoltre, come livello sicurezza aggiuntivo, traccia di tutti i comandi eseguiti, come anche di ogni tentativo di accesso fallito.
  
 
== Installazione ==
 
== Installazione ==
Line 18: Line 28:
 
  pacman -S sudo
 
  pacman -S sudo
  
By default, users will not be allowed to run sudo. See [[#Configuration]] for instructions.
+
In maniera predefinita, gli utenti non sono autorizzati a poter utilizzare sudo. Consultare [[#Configurazione]] per ulteriori dettagli.
  
== Usage ==
+
== Utilizzo ==
  
With sudo installed and configured, users are able to prefix commands with {{Codeline|sudo}} to run said command with superuser (or other) privileges. For example:
+
Con sudo installato e configurato, gli utenti sono idonei a eseguire comandi con {{Ic|sudo}} per acquisire privilegi di superutente (o anche altri). Per esempio:
 
  $ sudo pacman -Syu
 
  $ sudo pacman -Syu
  
See the [http://www.gratisoft.us/sudo/man/sudo.html sudo manual] for more information.
+
Consultare [http://www.gratisoft.us/sudo/man/sudo.html sudo manual] per maggiori informazioni.
  
== Configuration ==
+
== Configurazione ==
 +
Il file di configurazione di sudo è {{ic|/etc/sudoers}}. '''Questo file non deve mai essere modificato direttamente!'''
  
The configuration file for sudo is {{Filename|/etc/sudoers}}. '''This file should not be edited directly!''' Instead, users must run the command {{Codeline|visudo}} as root, which opens a temporary copy of the configuration file in ''$EDITOR''. (If uncomfortable with ''vi'' (default), try the command {{Codeline|<nowiki>export EDITOR=nano</nowiki>}} first.)
+
=== Utilizzare visudo ===
# visudo
+
Il file di configurazione di sudo è {{ic|/etc/sudoers}}, e dovrebbe essere sempre modificato con il comando {{Ic|visudo}}, che apre una copia temporanea del file di configurazione in {{ic|/etc/sudoers}}, e controlla la sintassi prima di salvare le modifiche in quella reale. È imperativo che {{ic|sudoers}} sia privo di errori di sintassi poiché sudo non verrà altrimenti eseguito.
  
When the file is saved, {{Codeline|visudo}} will double-check the file for syntax errors before overwriting the existing {{Filename|/etc/sudoers}} file. This safety feature exists because sudo will be rendered unusable if the configuration file contains errors.
+
{{Warning|Eventuali errori in {{ic|/etc/sudoers}} possono rendere sudo inutilizzabile. Editarlo '''sempre''' con {{Ic|visudo}} per prevenirli.}}
  
To allow a user to gain full root privileges when he/she precedes a command with "sudo", add the following line:
+
L'editor predefinito è {{Ic|vi}}, che sarà utilizzato se non si prefissa il comando con ''EDITOR=<editor>''. Si possono utilizzare altri editor, ad esempio, gedit:
 +
 
 +
# EDITOR=gedit visudo
 +
 
 +
Si può modificare in modo permanente l'impostazione a livello di sistema, per esempio {{Ic|vim}} aggiungendo
 +
export EDITOR=vim
 +
al file {{ic|~/.bashrc}}. Si noti che questo non avrà effetto sulle shell già in esecuzione.
 +
 
 +
O per fare in modo che il comando {{Ic|visudo}} utilizzi il proprio EDITOR favorito in modo permanente, aggiungendo a {{ic|/etc/sudoers}} il seguente:
 +
# Defaults specification
 +
# Reset environment by default
 +
Defaults      env_reset
 +
# Set default EDITOR to vim, and do not allow visudo to use EDITOR/VISUAL.
 +
Defaults      editor=/usr/bin/vim, !env_editor
 +
 
 +
Notare che è necessario comunque lanciare il comando {{Ic|visudo}} sempre da root, anche se si utilizza un differente editor.
 +
 
 +
Prima che l'utente possa utilizzare il comando "sudo" con privilegi di root, bisogna aggiungerlo alla seguenti righe:
 
  USER_NAME  ALL=(ALL) ALL
 
  USER_NAME  ALL=(ALL) ALL
  
Allow a user sudo access from the local machine only:
+
Permette all'utente l'accesso sudo solamente dalla macchina locale:
 
  USER_NAME  HOSTNAME=(ALL) ALL
 
  USER_NAME  HOSTNAME=(ALL) ALL
  
Allow members of [[Groups|group]] wheel sudo access requiring no password:
+
Permette ai membri del [[Users and Groups (Italiano)#Gruppi|gruppo]] wheel l'accesso sudo senza richiedere la password:
 
  %wheel      ALL=(ALL) NOPASSWD: ALL
 
  %wheel      ALL=(ALL) NOPASSWD: ALL
  
where USER_NAME is the user name of the individual.
+
dove USER_NAME è il nome utente individuale.
  
A detailed {{Filename|sudoers}} example can be found [http://www.gratisoft.us/sudo/sample.sudoers here]. Otherwise, see the [http://www.gratisoft.us/sudo/man/sudoers.html sudoers manual] for detailed information.
+
Un breve esempio per abilitare un utente a qualche privilegio:
 +
USER_NAME HOST_NAME=/sbin/halt,/sbin/poweroff,/sbin/reboot,/usr/bin/pacman -Syu
 +
L'utente è abilitato ad eseguire solo halt, poweroff, reboot e aggiornamento del sistema tramite il comando pacman, sul computer host specifico.
  
{{note|PARTE VECCHIA DELLA TRADUZION- E Per far sì che un utente sia un utente sudo (un "sudoer"), digitare "visudo" da root. Questo comando aprirà il file /etc/sudoers in una speciale sessione di vi. (Non editare /etc/sudoers direttamente con un editor). Per dare all'utente pieni privilegi quando lui o lei digitano "sudo" prima di un comando, aggiungere la riga seguente- USER_NAME  ALL=(ALL) ALL dove USER_NAME è il nome utente dell'individuo.}}
+
Un {{ic|sudoers}} dettagliato d'esempio, è reperibile su [http://www.gratisoft.us/sudo/sample.sudoers qui]. Altrimenti, consultare [http://www.gratisoft.us/sudo/man/sudoers.html sudoers manual] per ulteriori informazioni.
  
 +
=== Sudoers: il file dei permessi predefinito ===
 +
Il proprietario e il gruppo del file sudoers devono essere impostati entrambi 0. Il file dei permessi dovrebbe essere impostato 0440. Questi permessi sono impostati di default, ma se modificati accidentalmente, dovrebbero essere nuovamente riconfigurati.
 +
  # chown -c root:root /etc/sudoers
 +
  # chmod -c 0440 /etc/sudoers
  
 
=== Password timeout ===
 
=== Password timeout ===
  
Users may wish to change the default timeout before the password expires. This is accomplished by adding following to {{Filename|/etc/sudoers}} ({{Codeline|visudo}}) for example:
+
Alcuni utenti potrebbero voler modificare il timeout predefinito prima che la password scada. È possibile farlo aggiungendo la riga seguente a {{ic|/etc/sudoers}} ({{Ic|visudo}}) per esempio:
 
  Defaults:USER_NAME timestamp_timeout=20
 
  Defaults:USER_NAME timestamp_timeout=20
  
where the password expires for user USER_NAME if unused for over 20 minutes.
+
nel cui caso la password dell'utente USER_NAME scade se non usata per 20 minuti. Sono ammessi anche i valori tra 0 e 1.
  
{{Tip|To ensure sudo always asks for a password, set the timeout to zero.}}
+
{{Tip|Per assicurarsi che sudo richieda sempre la password, impostare il timeout a zero.}}
  
== Tips and tricks ==
+
== Suggerimenti ==
  
 
=== Abilitare il completamento con TAB per gli utenti sudo ===
 
=== Abilitare il completamento con TAB per gli utenti sudo ===
Line 74: Line 108:
 
la shell non farebbe niente.
 
la shell non farebbe niente.
  
Se si utilizza il completamento programmabile della bash, si devono decommentare le seguenti righe nel file /etc/bash_completion:
+
Per abilitare il completamento automatico con sudo, aggiungere il seguente al proprio {{ic|~/.bashrc}}:
 +
complete -cf sudo
  
# user commands see only users
+
In alternativa, si potrebbe anche installare e attivare bash-completion per i comandi come sudo, vedere [[bash (Italiano)#Auto-completamento|questo articolo]] per ulteriori informazioni.
complete -u su usermod userdel passwd chage write chfn groups slay w
+
  
# group commands see only groups
+
===Eseguire applicazioni X11 con sudo===
[ -n "$bash205" ] && complete -g groupmod groupdel newgrp 2>/dev/null
+
  
Altrimenti aggiungere la seguente riga al proprio ~/.bashrc (solo se non si è modificato il file bash_completion perché sovrascrive le impostazioni per sudo):
+
Per consentire a sudo di avviare un'applicazione grafica in X11, è necessario aggiungere
 +
Defaults env_keep += "HOME"
 +
a visudo.
  
complete -cf sudo
+
===Disabilitare sudo ad ogni terminale===
  
=== Environment variables ===
+
{{Attenzione|Questo permetterà a tutti i processi di utilizzare la sessione sudo}}
  
If you have a lot of environment variables, or you export your proxy settings via <tt>export http_proxy="..."</tt>, when using sudo these variables do not get passed to the root account unless you run sudo with the {{Codeline|-E}} option.
+
Se infastiditi dalle impostazioni di defaults di sudo, che richiedono l'inserimento della password ogni volta che si apre un nuovo terminale, disabilitare '''tty_tickets''':
 +
Defaults !tty_tickets
 +
 
 +
=== Variabili d'ambiente ===
 +
 
 +
Se ci si ritrova con molte variabili d'ambiente, o si esportano le impostazioni del proxy con <tt>export http_proxy="..."</tt>, quando si usa sudo queste variabili non vengono accettate da root se non si esegue sudo con l'opzione {{Ic|-E}}.
 
  $ sudo -E pacman -Syu
 
  $ sudo -E pacman -Syu
  
Because of this you may wish to add an alias in {{Filename|~/.bashrc}}:
+
Per questo motivo potrebbe essere utile aggiungere un alias in {{ic|~/.bashrc}}:
 
  alias sudo="sudo -E"
 
  alias sudo="sudo -E"
  
Another way of fixing this would be to add in {{Filename|/etc/sudoers}}:
+
Un'altra modo analogo è l'aggiunta in {{ic|/etc/sudoers}} di:
 
  Defaults !env_reset
 
  Defaults !env_reset
  
If you want to just pass <tt>*_proxy</tt> variables, add the following:
+
Volendo solamente passare le variabili {{Ic|*_proxy}}, aggiungere il seguente:
 
  Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"
 
  Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"
  
=== Passing aliases ===
+
=== Aggiungere /sbin e /usr/sbin al percorso di root ===
  
If you use a lot of aliases, you might have noticed that they do not carry over to the root account when using sudo. However, there is an easy way to make them work. Simply add the following to your {{Filename|~/.bashrc}} or {{Filename|/etc/bash.bashrc}}:
+
Se si desidera eseguire comandi amministrativi (quelli in {{ic|/sbin}} o {{ic|/usr/sbin}}) con sudo senza utilizzare il loro percorso completo, aggiungere:
 +
Defaults secure_path="/bin:/sbin:/usr/bin:/usr/sbin"
 +
in {{ic|/etc/sudoers}}
 +
 
 +
Questo permette di dare il comando
 +
$ sudo command
 +
invece di:
 +
$ sudo /sbin/command
 +
o:
 +
$ sudo /usr/sbin/command
 +
 
 +
=== Abilitare alias ===
 +
 
 +
Se si utilizzano vari alias, si noterà che non vengono accettati da root usando sudo. Tuttavia, vi è un modo semplice per farli funzionare. Basta aggiungere quanto segue a {{ic|~/.bashrc}} o {{ic|/etc/bash.bashrc}}:
 
  alias sudo='sudo '
 
  alias sudo='sudo '
  
=== Insults ===
+
=== Insulti ===
  
Users can configure sudo to display clever insults when an incorrect password is entered instead of printing the default "wrong password" message. Find the Defaults line in {{Filename|/etc/sudoers}} and append "insults" after a comma to existing options. The final result might look like this:
+
È possibile configurare sudo per visualizzare degli "insulti intelligenti" quando viene immessa una password errata, al posto dell'output di default "wrong password". Trovare la linea di default in {{ic|/etc/sudoers}} e aggiungere "insults", separandola con una virgola dalle voci esistenti. Il risultato dovrebbe essere simile a questo:
 
  #Defaults specification
 
  #Defaults specification
 
  Defaults insults
 
  Defaults insults
  
To test, type {{Codeline|sudo -K}} to end the current session a let sudo ask for the password again.
+
Per fare una prova, scrivere {{Ic|sudo -K}} per terminare la sessione corrente e lasciare che sudo chieda nuovamente la password.
  
=== Root password ===
+
=== Password di root ===
  
Users can configure sudo to ask for the root password instead of the user password by adding "rootpw" to the Defaults line in {{Filename|/etc/sudoers}}:
+
Si può istruire sudo a richiedere la password di root invece di quella dell'utente normale aggiungendo "rootpw" alla linea di defaults in {{ic|/etc/sudoers}}:
 
  Defaults timestamp_timeout=0,rootpw
 
  Defaults timestamp_timeout=0,rootpw
  
=== Disable root login ===
+
=== Disabilitare il login root ===
  
{{Warning|Arch Linux is not fine-tuned to run with a disabled root account. Users may encounter problems with this method.}}
+
{{Attenzione|Arch Linux non è stato sviluppato per funzionare con l'account root disabilitato. Con questo metodo si rischiano possibili ed eventuali problemi.}}
  
With sudo installed and configured, users may wish to disable the root login. Without root, attackers must first guess a user name configured as a sudoer as well as the user password.
+
Con sudo installato e configurato, qualcuno potrebbe voler disabilitare il login di root. Senza root, eventuali malintenzionati dovrebbero prima individuare un nome utente configurato come sudoer, e poi la password dell'utente.
  
'''Ensure a user is properly configured as a sudoer ''before'' disabling the root account!'''
+
{{Attenzione|Assicurarsi che l'utente sia correttamente configurato come sudoer ''prima'' di disabilitare l'account di root!}}
  
The account can be locked via {{Codeline|passwd}}:
+
L'account può essere bloccato con {{Ic|passwd}}:
 
  # passwd -l root
 
  # passwd -l root
  
A similar command unlocks root.
+
Un comando simile sblocca root.
 
  $ sudo passwd -u root
 
  $ sudo passwd -u root
  
Alternatively, edit {{Filename|/etc/shadow}} and replace the root's encrypted password with "!":
+
In alternativa, modificare {{ic|/etc/shadow}} e sostituire la password di root criptata con "!":
 
  root:!:12345::::::
 
  root:!:12345::::::
  
To enable root login again:
+
Per abilitare il login di root di nuovo:
 
  $ sudo passwd root
 
  $ sudo passwd root
  
 
==== kdesu ====
 
==== kdesu ====
  
kdesu may be used under KDE to launch GUI applications with root privileges. It is possible that by default kdesu will try to use su even if the root account is disabled. Fortunately one can tell kdesu to use sudo instead of su. Create/edit the file {{Filename|/usr/share/config/kdesurc}}:
+
kdesu può essere usato con KDE per lanciare applicazioni grafiche con privilegi di root. In maniera predefinita, è possibile che kdesu provi ad usare su anche se l'account di root è disabilitato. Fortunatamente si può istruire kdesu ad usare sudo invece di su. Creare o modificare il file {{ic|/usr/share/config/kdesurc}}:
 
  [super-user-command]
 
  [super-user-command]
 
  super-user-command=sudo
 
  super-user-command=sudo
  
 +
==== Policykit ====
 +
 +
Disabilitando l'account root, diventa necessario modificare la configurazione [[PolicyKit]] per fare in modo che le autorizzazioni locali agiscano di conseguenza. L'impostazione predefinita è chiedere la password di root, di modo che questo deve essere modificato. Con polkit-1, ciò può essere ottenuto modificando {{ic|/etc/polkit-1/localauthority.conf.d/50-localauthority.conf}} così:
 +
 +
AdminIdentities=unix-user:0
 +
 +
è sostituito da qualcosa d'altro, a seconda della configurazione del sistema. Può essere un elenco di utenti e gruppi, per esempio
 +
 +
AdminIdentities=unix-group:wheel
 +
 +
oppure
 +
 +
AdminIdentities=unix-user:me;unixuser:mom;unix-group:wheel
 +
 +
Per ulteriori informazioni, consultare {{Ic|man pklocalauthority}}
 +
 +
== Sudo in modalità debug ==
 +
 +
=== Problemi SSH TTY ===
 +
SSH non assegna una tty per impostazione predefinita quando si esegue un comando remoto. Senza un terminale, sudo non può disabilitare echo quando viene richiesta una password.  Si può usare ssh con l'opzione "-tt" per forzarlo a destinare una tty.  (usare -tt due volte).
 +
 +
L'opzione di default requiretty consente solo agli utenti di eseguire sudo se hanno una tty
 +
<pre>
 +
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. You have to run "ssh -t hostname sudo <cmd>".
 +
#
 +
#Defaults    requiretty
 +
</pre>
 +
 +
=== Visualizzare privilegi utente ===
 +
Si possono controllare i privilegi di un utente specifico con il seguente comando:
 +
  sudo -lU proprionomeutente
  
 +
O visualizzare i propri con
 +
  sudo -l
 +
<pre style='overflow:auto'>
 +
Matching Defaults entries for proprionomeutente on this host:
 +
    loglinelen=0, logfile=/var/log/sudo.log, log_year, syslog=auth, mailto=sqpt.webmaster@gmail.com, mail_badpass, mail_no_user, mail_no_perms, env_reset, always_set_home, tty_tickets, lecture=always, pwfeedback, rootpw, set_home
  
 +
L'utente proprionomeutente può eseguire i seguenti comandi su questo host:
 +
    (ALL) ALL,
 +
    (ALL) NOPASSWD: /usr/sbin/lsof, /bin/nice, /bin/netstat, /usr/bin/su, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync, /usr/bin/strace,
 +
    (ALL) /bin/nice, /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/kill, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill,
 +
    (ALL) /usr/sbin/gparted, /usr/bin/pacman, /usr/bin/powerpill,
 +
    (ALL) /usr/local/bin/synergyc, /usr/local/bin/synergys,
 +
    (ALL) /usr/bin/vim, /usr/bin/nano, /usr/bin/cat
 +
    (root) NOPASSWD: /usr/local/bin/synergyc
 +
</pre>
  
{{warning| DA QUI PARTE VECCHIA EVENTUALMENTE CANCELLABILE}}
+
=== Umask permissivo ===
== Sommario ==
+
Sudo riunisce il valore [[umask]] dell'utente con il  proprio (che per impostazione predefinita è 0022). Questo impedisce a sudo di creare file con più autorizzazioni di quante l'umask dell'utente permetta. Nonostante sia un valore predefinito accettabile se non ci sono umask personalizzati in uso, potrebbe portare a situazioni in cui un programma gestito con sudo crei dei file con autorizzazioni diverse da quelle ottenute se fosse stato eseguito da root. Se si incorre in questo tipo di errori, sudo fornisce un mezzo per fissare l'umask, anche nel caso l'umask sia più permissivo rispetto all'umask specificato dall'utente. L'aggiunta delle seguenti righe (usando {{Ic | visudo}}) modificheranno tale comportamento predefinito di sudo
 +
Defaults umask = 0022
 +
Defaults umask_override
 +
impostandone i valori umask predefiniti a quelli di root (0022).
  
Per sintetizzare, le seguenti impostazioni soddisfano la maggior parte delle esigenze, dove USER_NAME è il nome utente dell'individuo:
+
== Esempio di sudoers ==
1. pacman -S sudo
+
Ciò è particolarmente utile a coloro che usano i terminali multiplexer come screen, tmux, o ratpoison, o che usano sudo da scripts e/o cronjobs.
2. aggiungere "USER_NAME  ALL=(ALL) ALL" al file /etc/sudoers utilizzando il comando "visudo"
+
<pre>
3. aggiungere "complete -cf sudo" al file /home/USER_NAME/.bashrc
+
  
== Vedi anche ==
+
Cmnd_Alias WHEELER = /usr/sbin/lsof, /bin/nice, /bin/ps, /usr/bin/top, /usr/local/bin/nano, /bin/netstat, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync
 +
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/kill, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill
 +
Cmnd_Alias EDITS = /usr/bin/vim, /usr/bin/nano, /usr/bin/cat, /usr/bin/vi
 +
Cmnd_Alias ARCHLINUX = /usr/sbin/gparted, /usr/bin/pacman, /usr/bin/pacman-color, /usr/bin/powerpill
  
* [[Disable root password and gain su sudo with no password]]
+
root ALL = (ALL) ALL
 +
proprionomeutente ALL = (ALL) ALL, NOPASSWD: WHEELER, NOPASSWD: PROCESSES, NOPASSWD: ARCHLINUX, NOPASSWD: EDITS
 +
 +
Defaults !requiretty, !tty_tickets, !umask
 +
Defaults visiblepw, path_info, insults, lecture=always
 +
Defaults loglinelen = 0, logfile =/var/log/sudo.log, log_year, log_host, syslog=auth
 +
Defaults mailto=webmaster@proprionomeutente.com, mail_badpass, mail_no_user, mail_no_perms
 +
Defaults passwd_tries = 8, passwd_timeout = 1
 +
Defaults env_reset, always_set_home, set_home, set_logname
 +
Defaults !env_editor, editor="/usr/bin/vim:/usr/bin/vi:/usr/bin/nano"
 +
Defaults timestamp_timeout=360
 +
Defaults passprompt="Sudo invoked by [%u] on [%H] - Cmd run as %U - Password for user %p:"
 +
</pre>

Revision as of 07:59, 16 June 2012

Sommario help replacing me
Una panoramica sulla popolare utility di uso dei privilegi di root da utente.
Overview
Users and groups sono usati su GNU/Linux per il controllo degli accessi. Il superutente (root) ha il completo accesso al sistema operativo ed alla sua configurazione, ma è destinato esclusivamente ad uso amministrativo. Gli utenti non privilegiati possono usare programmi come su e sudo per operazioni con privilegi di root.

Sudo (su "do") consente all'amministratore di sistema di delegare a certi utenti (o gruppi di utenti) il permesso e potere di eseguire alcuni, o tutti, i comandi in qualità di root, fornendo nel contempo traccia di tutti i comandi e le azioni eseguite.[1]

Logica di base

Sudo è un'alternativa sicura per il comando su tradizionale. Molto spesso l'utente utilizza su (super user) per ottenere i privilegi di root. In generale, si ritiene imprudente eseguire il login come root, "il superutente", per periodi di tempo prolungati. L'utente root gode di controllo completo e assoluto su tutto il sistema, ma a grande rischio! Alcuni semplici errori possono facilmente rendere un sistema inutilizzabile, e tutte le applicazioni in esecuzione con privilegi di root consentiranno un libero accesso all'intera struttura gerarchica del file system.

Sudo invece, concede dei privilegi temporanei per un singolo comando (sia come root che come altro utente), ristabilendo alla fine dell'operazione lo stato di utente normale, senza privilegi di root e rendendo di conseguenza, il sistema nuovamente "in salvo" da azioni e stati a rischio. Sudo fornisce inoltre, come livello sicurezza aggiuntivo, traccia di tutti i comandi eseguiti, come anche di ogni tentativo di accesso fallito.

Installazione

Per installare Sudo:

pacman -S sudo

In maniera predefinita, gli utenti non sono autorizzati a poter utilizzare sudo. Consultare #Configurazione per ulteriori dettagli.

Utilizzo

Con sudo installato e configurato, gli utenti sono idonei a eseguire comandi con sudo per acquisire privilegi di superutente (o anche altri). Per esempio:

$ sudo pacman -Syu

Consultare sudo manual per maggiori informazioni.

Configurazione

Il file di configurazione di sudo è /etc/sudoers. Questo file non deve mai essere modificato direttamente!

Utilizzare visudo

Il file di configurazione di sudo è /etc/sudoers, e dovrebbe essere sempre modificato con il comando visudo, che apre una copia temporanea del file di configurazione in /etc/sudoers, e controlla la sintassi prima di salvare le modifiche in quella reale. È imperativo che sudoers sia privo di errori di sintassi poiché sudo non verrà altrimenti eseguito.

Warning: Eventuali errori in /etc/sudoers possono rendere sudo inutilizzabile. Editarlo sempre con visudo per prevenirli.

L'editor predefinito è vi, che sarà utilizzato se non si prefissa il comando con EDITOR=<editor>. Si possono utilizzare altri editor, ad esempio, gedit:

# EDITOR=gedit visudo

Si può modificare in modo permanente l'impostazione a livello di sistema, per esempio vim aggiungendo

export EDITOR=vim

al file ~/.bashrc. Si noti che questo non avrà effetto sulle shell già in esecuzione.

O per fare in modo che il comando visudo utilizzi il proprio EDITOR favorito in modo permanente, aggiungendo a /etc/sudoers il seguente:

# Defaults specification
# Reset environment by default
Defaults      env_reset
# Set default EDITOR to vim, and do not allow visudo to use EDITOR/VISUAL.
Defaults      editor=/usr/bin/vim, !env_editor

Notare che è necessario comunque lanciare il comando visudo sempre da root, anche se si utilizza un differente editor.

Prima che l'utente possa utilizzare il comando "sudo" con privilegi di root, bisogna aggiungerlo alla seguenti righe:

USER_NAME   ALL=(ALL) ALL

Permette all'utente l'accesso sudo solamente dalla macchina locale:

USER_NAME   HOSTNAME=(ALL) ALL

Permette ai membri del gruppo wheel l'accesso sudo senza richiedere la password:

%wheel      ALL=(ALL) NOPASSWD: ALL

dove USER_NAME è il nome utente individuale.

Un breve esempio per abilitare un utente a qualche privilegio:

USER_NAME HOST_NAME=/sbin/halt,/sbin/poweroff,/sbin/reboot,/usr/bin/pacman -Syu

L'utente è abilitato ad eseguire solo halt, poweroff, reboot e aggiornamento del sistema tramite il comando pacman, sul computer host specifico.

Un sudoers dettagliato d'esempio, è reperibile su qui. Altrimenti, consultare sudoers manual per ulteriori informazioni.

Sudoers: il file dei permessi predefinito

Il proprietario e il gruppo del file sudoers devono essere impostati entrambi 0. Il file dei permessi dovrebbe essere impostato 0440. Questi permessi sono impostati di default, ma se modificati accidentalmente, dovrebbero essere nuovamente riconfigurati.

 # chown -c root:root /etc/sudoers
 # chmod -c 0440 /etc/sudoers

Password timeout

Alcuni utenti potrebbero voler modificare il timeout predefinito prima che la password scada. È possibile farlo aggiungendo la riga seguente a /etc/sudoers (visudo) per esempio:

Defaults:USER_NAME timestamp_timeout=20

nel cui caso la password dell'utente USER_NAME scade se non usata per 20 minuti. Sono ammessi anche i valori tra 0 e 1.

Tip: Per assicurarsi che sudo richieda sempre la password, impostare il timeout a zero.

Suggerimenti

Abilitare il completamento con TAB per gli utenti sudo

Il completamento con TAB, di default, non funzionerà quando un utente è stato aggiunto inizialmente al file dei sudoers. Ad esempio, normalmente, Marco deve soltanto digitare:

fir<TAB>

e la shell completerà il comando come segue:

firefox

Se, comunque, Marco fosse aggiunto al file dei sudoers e digitasse:

sudo fir<TAB>

la shell non farebbe niente.

Per abilitare il completamento automatico con sudo, aggiungere il seguente al proprio ~/.bashrc:

complete -cf sudo

In alternativa, si potrebbe anche installare e attivare bash-completion per i comandi come sudo, vedere questo articolo per ulteriori informazioni.

Eseguire applicazioni X11 con sudo

Per consentire a sudo di avviare un'applicazione grafica in X11, è necessario aggiungere

Defaults env_keep += "HOME"

a visudo.

Disabilitare sudo ad ogni terminale

Attenzione: Questo permetterà a tutti i processi di utilizzare la sessione sudo

Se infastiditi dalle impostazioni di defaults di sudo, che richiedono l'inserimento della password ogni volta che si apre un nuovo terminale, disabilitare tty_tickets:

Defaults !tty_tickets

Variabili d'ambiente

Se ci si ritrova con molte variabili d'ambiente, o si esportano le impostazioni del proxy con export http_proxy="...", quando si usa sudo queste variabili non vengono accettate da root se non si esegue sudo con l'opzione -E.

$ sudo -E pacman -Syu

Per questo motivo potrebbe essere utile aggiungere un alias in ~/.bashrc:

alias sudo="sudo -E"

Un'altra modo analogo è l'aggiunta in /etc/sudoers di:

Defaults !env_reset

Volendo solamente passare le variabili *_proxy, aggiungere il seguente:

Defaults env_keep += "ftp_proxy http_proxy https_proxy no_proxy"

Aggiungere /sbin e /usr/sbin al percorso di root

Se si desidera eseguire comandi amministrativi (quelli in /sbin o /usr/sbin) con sudo senza utilizzare il loro percorso completo, aggiungere:

Defaults secure_path="/bin:/sbin:/usr/bin:/usr/sbin" 

in /etc/sudoers

Questo permette di dare il comando

$ sudo command

invece di:

$ sudo /sbin/command

o:

$ sudo /usr/sbin/command

Abilitare alias

Se si utilizzano vari alias, si noterà che non vengono accettati da root usando sudo. Tuttavia, vi è un modo semplice per farli funzionare. Basta aggiungere quanto segue a ~/.bashrc o /etc/bash.bashrc:

alias sudo='sudo '

Insulti

È possibile configurare sudo per visualizzare degli "insulti intelligenti" quando viene immessa una password errata, al posto dell'output di default "wrong password". Trovare la linea di default in /etc/sudoers e aggiungere "insults", separandola con una virgola dalle voci esistenti. Il risultato dovrebbe essere simile a questo:

#Defaults specification
Defaults insults

Per fare una prova, scrivere sudo -K per terminare la sessione corrente e lasciare che sudo chieda nuovamente la password.

Password di root

Si può istruire sudo a richiedere la password di root invece di quella dell'utente normale aggiungendo "rootpw" alla linea di defaults in /etc/sudoers:

Defaults timestamp_timeout=0,rootpw

Disabilitare il login root

Attenzione: Arch Linux non è stato sviluppato per funzionare con l'account root disabilitato. Con questo metodo si rischiano possibili ed eventuali problemi.

Con sudo installato e configurato, qualcuno potrebbe voler disabilitare il login di root. Senza root, eventuali malintenzionati dovrebbero prima individuare un nome utente configurato come sudoer, e poi la password dell'utente.

Attenzione: Assicurarsi che l'utente sia correttamente configurato come sudoer prima di disabilitare l'account di root!

L'account può essere bloccato con passwd:

# passwd -l root

Un comando simile sblocca root.

$ sudo passwd -u root

In alternativa, modificare /etc/shadow e sostituire la password di root criptata con "!":

root:!:12345::::::

Per abilitare il login di root di nuovo:

$ sudo passwd root

kdesu

kdesu può essere usato con KDE per lanciare applicazioni grafiche con privilegi di root. In maniera predefinita, è possibile che kdesu provi ad usare su anche se l'account di root è disabilitato. Fortunatamente si può istruire kdesu ad usare sudo invece di su. Creare o modificare il file /usr/share/config/kdesurc:

[super-user-command]
super-user-command=sudo

Policykit

Disabilitando l'account root, diventa necessario modificare la configurazione PolicyKit per fare in modo che le autorizzazioni locali agiscano di conseguenza. L'impostazione predefinita è chiedere la password di root, di modo che questo deve essere modificato. Con polkit-1, ciò può essere ottenuto modificando /etc/polkit-1/localauthority.conf.d/50-localauthority.conf così:

AdminIdentities=unix-user:0

è sostituito da qualcosa d'altro, a seconda della configurazione del sistema. Può essere un elenco di utenti e gruppi, per esempio

AdminIdentities=unix-group:wheel

oppure

AdminIdentities=unix-user:me;unixuser:mom;unix-group:wheel

Per ulteriori informazioni, consultare man pklocalauthority

Sudo in modalità debug

Problemi SSH TTY

SSH non assegna una tty per impostazione predefinita quando si esegue un comando remoto. Senza un terminale, sudo non può disabilitare echo quando viene richiesta una password. Si può usare ssh con l'opzione "-tt" per forzarlo a destinare una tty. (usare -tt due volte).

L'opzione di default requiretty consente solo agli utenti di eseguire sudo se hanno una tty

# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. You have to run "ssh -t hostname sudo <cmd>".
#
#Defaults    requiretty

Visualizzare privilegi utente

Si possono controllare i privilegi di un utente specifico con il seguente comando:

 sudo -lU proprionomeutente

O visualizzare i propri con

 sudo -l
Matching Defaults entries for proprionomeutente on this host:
    loglinelen=0, logfile=/var/log/sudo.log, log_year, syslog=auth, mailto=sqpt.webmaster@gmail.com, mail_badpass, mail_no_user, mail_no_perms, env_reset, always_set_home, tty_tickets, lecture=always, pwfeedback, rootpw, set_home

L'utente proprionomeutente può eseguire i seguenti comandi su questo host:
    (ALL) ALL, 
    (ALL) NOPASSWD: /usr/sbin/lsof, /bin/nice, /bin/netstat, /usr/bin/su, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync, /usr/bin/strace, 
    (ALL) /bin/nice, /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/kill, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill, 
    (ALL) /usr/sbin/gparted, /usr/bin/pacman, /usr/bin/powerpill, 
    (ALL) /usr/local/bin/synergyc, /usr/local/bin/synergys, 
    (ALL) /usr/bin/vim, /usr/bin/nano, /usr/bin/cat
    (root) NOPASSWD: /usr/local/bin/synergyc

Umask permissivo

Sudo riunisce il valore umask dell'utente con il proprio (che per impostazione predefinita è 0022). Questo impedisce a sudo di creare file con più autorizzazioni di quante l'umask dell'utente permetta. Nonostante sia un valore predefinito accettabile se non ci sono umask personalizzati in uso, potrebbe portare a situazioni in cui un programma gestito con sudo crei dei file con autorizzazioni diverse da quelle ottenute se fosse stato eseguito da root. Se si incorre in questo tipo di errori, sudo fornisce un mezzo per fissare l'umask, anche nel caso l'umask sia più permissivo rispetto all'umask specificato dall'utente. L'aggiunta delle seguenti righe (usando visudo) modificheranno tale comportamento predefinito di sudo

Defaults umask = 0022
Defaults umask_override

impostandone i valori umask predefiniti a quelli di root (0022).

Esempio di sudoers

Ciò è particolarmente utile a coloro che usano i terminali multiplexer come screen, tmux, o ratpoison, o che usano sudo da scripts e/o cronjobs.


Cmnd_Alias WHEELER = /usr/sbin/lsof, /bin/nice, /bin/ps, /usr/bin/top, /usr/local/bin/nano, /bin/netstat, /usr/bin/locate, /usr/bin/find, /usr/bin/rsync
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/nice, /usr/bin/ionice, /usr/bin/top, /usr/bin/kill, /usr/bin/killall, /usr/bin/ps, /usr/bin/pkill
Cmnd_Alias EDITS = /usr/bin/vim, /usr/bin/nano, /usr/bin/cat, /usr/bin/vi
Cmnd_Alias ARCHLINUX = /usr/sbin/gparted, /usr/bin/pacman, /usr/bin/pacman-color, /usr/bin/powerpill

root ALL = (ALL) ALL
proprionomeutente ALL = (ALL) ALL, NOPASSWD: WHEELER, NOPASSWD: PROCESSES, NOPASSWD: ARCHLINUX, NOPASSWD: EDITS
 
Defaults !requiretty, !tty_tickets, !umask
Defaults visiblepw, path_info, insults, lecture=always
Defaults loglinelen = 0, logfile =/var/log/sudo.log, log_year, log_host, syslog=auth
Defaults mailto=webmaster@proprionomeutente.com, mail_badpass, mail_no_user, mail_no_perms
Defaults passwd_tries = 8, passwd_timeout = 1
Defaults env_reset, always_set_home, set_home, set_logname
Defaults !env_editor, editor="/usr/bin/vim:/usr/bin/vi:/usr/bin/nano"
Defaults timestamp_timeout=360
Defaults passprompt="Sudo invoked by [%u] on [%H] - Cmd run as %U - Password for user %p:"