Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "AmministrazioneSistema/PrivilegiDiAmministrazione"
Differenze tra le versioni 1 e 70 (in 69 versioni)
Versione 1 del 28/05/2005 21.51.23
Dimensione: 11482
Autore: adsl-213-190-44-43
Commento: imported from the old wiki
Versione 70 del 01/05/2010 13.57.03
Dimensione: 14471
Commento: tolta versioni
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
= ItalianSudo =

Nei sistemi operativi Unix/Linux c'è un utente particolare, il super utente, contraddistinto dall'avere UID 0 (User ID), con username root. L'utente root in un sistema Linux è il mammasantissima, l'onnipotente, colui che ha accesso totale al sistema senza nessuna restrizione.
Normalmente l'amministratore (root) non entra nel sistema come utente root, sia per motivi di sicurezza, sia per non trovarsi in un ambiente diverso da quello a cui è normalmente abituato: desktop, home directory, etc ...

In genere ogni amministratore di sistema ha anche un account utente diciamo "normale" con il quale svolge lavoro di routine; quando ha la necessità di svolgere mansioni di amministratore assume i privilegi di root con il comando su (Substitute User).

Il comando su user, dopo la richiesta della password di user, apre una shell per l'utente user.

Con su, senza parametro, viene aperta per default una shell di root, cioè una sessione di terminale in cui si è a tutti gli effetti root.

Ultimamente si sta diffondendo un altro sistema per l'aquisizione dei privilegi di root: l'utilizzo del comando sudo.

== SUDO ==

Sudo (SUperuser DO) è un programma che consente di eseguire dei comandi come se si fosse un altro utente. Effettua una specie di sostituzione, previa autorizzazione, tra l'utente normale (colui che esegue il comando sudo) e l'utente target (colui che esegue l'effettivo comando).

L'utente target non deve essere necessariamente root, ma può essere un qualsiasi utente del sitema.

Mentre con su si diventa root fino ad un esplicito rilascio dei privilegi, sudo assume i privilegi di root (o di un altro utente) solo per il tempo necessario all'esecuzione del comando.

Con sudo l'amministratore del sistema può assegnare privilegi particolari a qualsiasi utente, definire quali comandi far eseguire e quali no, evere il log di tutte le operazioni effettuate ed anche ricevere via email informazioni su tentativi non autorizzati.

Per eseguire dei comandi utilizzando sudo bisogna digitare sudo e successivamente il comando con gli eventuali parametri.

Dato il comando il sistema vi chiederà una password che è la vostra password utente, non la password di root (a meno che non sia specificato diversamente nelle configurazioni di default in /etc/sudoers).

In genere sudo è configurato per consentire l'esecuzione di più comandi senza dover inserire ogni volta la password. In pratica è possibile impostare un lasso di tempo entro il quale sudo ricorda la password inserita.

== Configurazione di SUDO ==

Sudo è configurato tramite il file /etc/sudoers editabile con visudo (simile a vi, con in più un controllo sintattico).{{{
sudo visudo}}}

Il file di configurazione /etc/sudoers è costituito da tre sezioni:

    * Impostazione degli alias

    * Impostazione delle opzioni di default

    * Impostazione delle autorizzazioni
## docs intrepid
#format wiki
#LANGUAGE it
[[BR]]
[[Indice(depth=2)]]

[[Include(StrumentiWiki/GuideConsigliate)]]

= Introduzione =

Nei sistemi operativi Unix e GNU/Linux c'è un utente particolare, detto '''super utente''' e contraddistinto dall'avere un '''UID''' (User ID) uguale a '''0''' e nome utente '''root''', che ha totale accesso al sistema senza nessuna restrizione, cioè ne è l' '''amministratore'''.

Nella maggior parte dei sistemi GNU/Linux, l'amministratore del computer non usa l'utente ''amministratore'' (per motivi di sicurezza) ma usa un utente ''normale'' per svolgere il lavoro quotidiano. Quando ha la necessità di svolgere mansioni di amministrazione apre un terminale e avvia una sessione come utente '''root''', oppure se si trova già in un terminale come utente normale usa il comando '''su''' per diventare utente '''root'''.

'''Ubuntu''' usa un sistema diverso per compiere operazioni amministrative, basato sull'utilizzo del comando '''sudo'''. Con '''sudo''' l'utente non ha la necessità di ricordare per sempre la password, anche se normalmente userà l'account '''root''' molto raramente. Inoltre, costringendo all'esecuzione controllata dei singoli comandi, si evitano eventuali disattenzioni nell'utilizzo degli stessi, chiedendo la password nel caso si stiano per lanciare comandi amministrativi e mantenendo un [:AmministrazioneSistema/LogDiSistema#autorizzazione:log] completo dei comandi eseguiti, permettendo l'analisi di ciò che è avvenuto nel sistema.

Di contro, se qualcuno scopre la password di un utente abilitato all'utilizzo di '''sudo''' come '''root''' in effetti può facilmente ottenere accesso totale al sistema. Normalmente, le password utente sono più semplici rispetto a quelle scelte per l'utente '''root''' e ciò può rivelarsi fonte di problemi; per tale ragione bisogna prestare molta attenzione nella scelta delle password utente.

Se si ha abilitato l'account '''root''' e si utilizza '''su''', per ottenere i privilegi di amministrazione è necessario inserire due password, quella utente e quella dell'account '''root'''.

Quando in un sistema alcuni compiti amministrativi sono condivisi fra diversi account, l'utilizzo di '''sudo''' evita di dover dare la password di '''root''' a vari utenti. L'amministratore può assegnare temporaneamente a qualsiasi utente privilegi particolari, eliminandoli o limitandoli quando non vi è più necessità.

= Il comando sudo =

'''sudo''' ('''''s'''uper``'''u'''ser '''do''''') consente di eseguire un comando come se si fosse un altro utente. Effettua una specie di sostituzione, previa autorizzazione, tra l'utente attuale (colui che esegue il comando '''sudo''') e l'utente '''target''' (colui che esegue l'effettivo comando). Mentre con il comando '''su''' si cambia utente fino al termine della sessione del terminale, '''sudo''' assegna i privilegi dell'utente '''target''' al solo processo che viene con esso avviato.

Per eseguire dei comandi con privilegi d'amministrazione è sufficiente digitare '''sudo''' e successivamente il comando che si desidera eseguire come utente '''root''', come nel seguente esempio:
{{{
sudo nano /etc/modules
}}}

L'utente '''target''' non deve essere necessariamente l'amministratore, ma può essere un qualsiasi utente del sistema. Per scegliere l'utente '''target''', usare l'opzione '''-u''':
{{{
sudo -u target comando
}}}

Una volta digitato il comando, il sistema chiederà la password dell'utente attuale e non la password dell'utente '''target''' (a meno che non si configuri '''sudo''' in modo diverso). La password viene chiesta la prima volta e memorizzata per un certo lasso di tempo, quindi è possibile usare il comando '''sudo''' più volte consecutive senza dover inserire ogni volta la password.

||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5% ^>[[Immagine(Icone/Piccole/note.png,,center)]] ||<style="padding:0.5em; border:none;">''Per motivi di sicurezza il terminale non mostra nessun carattere di inserimento della password. A differenza delle richieste grafiche, nel terminale non vengono mostrati nemmeno gli asterischi di mascheramento. Digitare correttamente la password e premere'' «'''Invio'''». ||

Con '''sudo''' l'amministratore del sistema può assegnare privilegi particolari a qualsiasi utente, definire quali comandi far eseguire e quali no, avere il log di tutte le operazioni effettuate e ricevere via email informazioni su tentativi di accesso non autorizzati.

[[Anchor(parametri)]]
= Parametri alla riga di comando =

'''sudo''' può essere lanciato con una serie di parametri che ne modificano il funzionamento temporaneamente. Quelli che seguono sono una parte delle opzioni disponibili:

||<tablestyle="width:100%" : 10% style="background-color:#FB8B00;">'''Opzione''' ||<style="background-color:#FB8B00;":>'''Risultato''' ||
||<:>'''-H''' || imposta la variabile di sistema «'''$HOME'''» con la cartella '''Home''' dell'utente '''target''', cioè quello che eseguirà il comando, normalmente '''root'''; in maniera predefinita '''sudo''' lascia inalterata la «'''$HOME'''» ||
||<:>'''-b''' || esegue il comando in background ||
||<:>'''-k''' || serve a eliminare il salvataggio della password per l'utente; al successivo utilizzo di '''sudo''' verrà nuovamente richiesta la password ||
||<:> '''-l''' || visualizza i comandi che si è autorizzati a usare o non usare ||
||<:>'''-i''' || consente di entrare nella [:AmministrazioneSistema/RigaDiComando:riga di comando] come utente '''target''' simulando l'accesso per il nuovo utente e impostando le variabili d'ambiente; in pratica consente all'utente di ''diventare'' '''root''' e quindi non dover utilizzare '''sudo''' ad ogni successivo comando ||
||<:>'''-s''' || consente di entrare nella [:AmministrazioneSistema/RigaDiComando:riga di comando] come utente '''target'''; questa opzione è quasi identica a '''-i''', ma non imposta le variabili d'ambiente dell'utente '''target''' ||

[[Anchor(abilitare_login_root)]]
= Abilitare l'accesso come utente root =

In '''Ubuntu''', in modo predefinito, l'accesso come utente '''root''' è disabilitato, impedendo così l'utilizzo di '''su''', ma permettendo comunque l'utilizzo di '''sudo'''. Questa scelta è dovuta a motivi di sicurezza.

Se strettamente necessario, è possibile abilitare l'accesso come utente '''root''' assegnandogli una password con il seguente comando:
{{{
sudo passwd root
}}}

La prima password richiesta è quella per '''sudo''', successivamente verrà richiesta la password per l'utente '''root''' e la successiva conferma.

Per disabilitare l'accesso come amministratore si può usare il seguente comando:
{{{
sudo passwd -l root
}}}

In questo modo l'accesso come utente '''root''' risulterà nuovamente bloccato.

[[Anchor(applicazioni_grafiche)]]
= Avviare applicazioni grafiche con privilegi di amministrazione =

Quando è necessario avviare da terminale un'applicazione grafica usando i privilegi d'amministrazione, è possibile utilizzare i comandi '''gksudo''', se si utilizza [:AmbienteGrafico/Gnome:GNOME], o '''kdesu''', se si usa [:AmbienteGrafico/Kde:KDE]. Quelli che seguono sono degli esempi:

 * {{{
gksudo gedit /etc/apt/sources.list
}}} Apre il file {{{/etc/apt/sources.list}}} con l'editor '''gedit''' di '''GNOME''' e con i privilegi di amministrazione.

 * {{{
kdesu kate /boot/grub/menu.lst
}}} Apre il file {{{/boot/grub/menu.list}}} con l'editor '''kate''' di '''KDE''' e con i privilegi di amministrazione.

È sconsigliato usare '''sudo''' per avviare un'applicazione grafica, in quanto, soprattutto in '''KDE''', le variabili d'ambiente non verranno impostate nella maniera corretta.

= Configurazione =

È possibile modificare la configurazione di '''sudo''' con il seguente comando:
{{{
sudo visudo
}}}

Il file di configurazione `/etc/sudoers` è composto da tre sezioni:

 * impostazione degli [#definizionealias alias];
 * impostazione delle [#opzionidefault opzioni di default];
 * impostazione delle [#autorizzazioni autorizzazioni].

[[Anchor(definizionealias)]]
Linea 45: Linea 106:
In questa sezione vengono definiti degli alias in modo da potersi riferire in modo più semplice, successivamente, alle informazioni per la configurazione dei privilegi utente. In questa sezione vengono definiti degli ''alias'' in modo da potersi riferire, successivamente, in modo più semplice alle informazioni per la configurazione dei privilegi utente.
Linea 48: Linea 109:

T
ipo_alias NOME_ALIAS = voce1, voce2, voce3 ... vocex

Dove tipo_alias può essere:

User_Alias per definire l'alias per un elenco di utenti
Cmnd_ALias per definire l'alias per un elenco di comandi
Host_Alias per definire l'alias per un elenco di host

E
sempi di alias:
{{{
t
ipo_alias NOME_ALIAS = voce1, voce2, voce3 ... voceX
}}}


Dove «tipo_alias» può essere:

 * «User_Alias»: per definire l'alias per un elenco di utenti;
 * «
Cmnd_Alias»: per definire l'alias per un elenco di comandi;
 * «
Host_Alias»: per definire l'alias per un elenco di host.

Quelli che seguono sono degli e
sempi:

 * {{{
Linea 60: Linea 123:
definisce un gruppo di utenti a cui ci si potrà riferire con AMMINISTRATORI }}} Definisce un gruppo di utenti a cui si potrà far riferimento con la dicitura «AMMINISTRATORI».

 * {{{
Linea 63: Linea 127:
definisce un gruppo di comandi }}} Definisce un gruppo di comandi.

 * {{{
Linea 66: Linea 131:
definisce un gruppo di host

== Impostazione delle opzioni di default ==

Con le impostazioni di default si configura il funzionamento standard di sudo impostando una serie di parametri con la parola chiave Defaults

Ci sono decine di parametri impostabili con Defaults, i principali sono:

mail_always
Invia una mail all'utente configurato con l'opzione mailto per ogni comando eseguito con sudo.

mail_badpass
Invia una mail quando un utente inserisce una password sbagliata

mail_no_user
Invia una mail quando l'utente non è tra gli utenti definiti in sudoers

rootpw
Indica a sudo di richiedere la password di root invece della password utente per l'autenticazione

targetpw
Indica a sudo di richiedere la password di dell'utente target invece della password utente per l'autenticazione

passwd_timeout
Imposta il tempo in minuti dopo il quale sudo dimentica la password inserita dall'utente

mailsub
Imposta il subject delle mail inviate da sudo

mailto
Imposta l'indirizzo e-mail dell'utente al quale sudo inoltra le mail di segnalazione.

logfile
Imposta il file di log per il logging delle operazioni

etc ...
}}} Definisce un gruppo di host.

[[Anchor(opzionidefault)]]
== Impostazione delle opzioni predefinite ==

È possibile configurare il comportamento standard di '''sudo''' impostando una serie di parametri con la parola chiave «Defaults».

Ci sono decine di parametri configurabili con '''Defaults''', i principali sono i seguenti:

 * «mail_always»: invia una mail all'utente configurato con l'opzione '''mailto''' per ogni comando eseguito con '''sudo''';

 * «mail_badpass»: invia una mail quando un utente inserisce una password sbagliata;

 * «mail_no_user»: invia una mail quando l'utente corrente non è tra quelli definiti in `/etc/sudoers`;

 * «rootpw»: indica a '''sudo''' di richiedere la password di '''root''' invece della password utente per l'autenticazione;

 * «targetpw»: indica a '''sudo''' di richiedere la password di dell'utente '''target''' invece della password utente per l'autenticazione;

 * «passwd_timeout»: imposta il tempo in minuti dopo il quale '''sudo''' dimentica la password inserita dall'utente;

 * «timestamp_timeout»: imposta il tempo in minuti dopo il quale verrà richiesta nuovamente la password. Se impostato a 0 ad ogni comando verrà richiesta la password;

 * «mailsub»: imposta l'oggetto delle mail inviate; il messaggio di default è il seguente: {{{
*** SECURITY information for %h ***
}}} È possibile usare il parametro «%h» come nome host;

 * «mailto»: imposta l'indirizzo email dell'utente al quale inoltrare le mail di segnalazione;

 * «logfile»: imposta il [:AmministrazioneSistema/LogDiSistema:file di log] per il logging delle operazioni.
 
[[Anchor(autorizzazioni)]]
Linea 105: Linea 165:
I comandi per l'impostazione dei privilegi, definiscono quali utenti possono utilizzare quali comandi, da quali host e in che modo.

La forma standard è:
I comandi per l'impostazione dei privilegi definiscono quali utenti possono utilizzare quali comandi, da quali host e in che modo.

La forma generale è la seguente:
{{{
Linea 110: Linea 170:

elenco_utenti
Può essere un utente, un alias definito in precedenza o anche un gruppo di sistema definito in /etc/group precedendo il nome del gruppo con %
Possono essere inserite varie voci, separando ciascuna con una [,]

elenco_host
I nomi delle macchine da cui è consentito usare sudo. Si può usare anche un alias definito per gli host.
Possono essere inserite varie voci, separando ciascuna con una [,]
Con ALL si consente l'uso di sudo da qualsiasi host.

(user_target)
E' un parametro opzionale con cui si dice a sudo di eseguire i comandi invece che come root come user_target

elenco_comandi
L'elenco dei comandi a cui si da autorizzazione. Si può usare anche un alias definisto per i comandi.
Possono essere inserite varie voci, separando ciascuna con una [,]
Con ALL si consente l'esecuzione di qualsiasi comando.

Si può anche inserire il nome di una directory, terminando il percorso con [/] per indicare tutti i comandi contenuti nella directory.

La parola chiave NOPASSWD: indica che per i comandi definiti successivamente non è richiesto l'inserimento della password.

Si può negare l'esecuzione di un comando o gruppo inserendo prima dell'elenco_comandi il carattere [!]
Questa modalità è comunque sconsigliata in quanto è sempre possibile aggirare la negazione rinominando il comando.

Esempi di autorizzazioni:
}}}

 * «elenco_utenti»: può essere un utente, un alias definito in precedenza o anche un gruppo di sistema definito in `/etc/group` precedendo il nome del gruppo con il simbolo percentuale «%». Possono essere inserite varie voci, separando ciascuna con una virgola «,»;

 * «elenco_host»: i nomi delle macchine da cui è consentito utilizzare '''sudo'''. Si può usare anche un alias definito per gli host. Possono essere inserite varie voci, separando ciascuna con una virgola «,». Con «ALL» si consente l'uso di '''sudo''' da qualsiasi host;

 * «(user_target)»: è un parametro opzionale con cui si dice a '''sudo''' di eseguire i comandi come utente '''user_target''' invece che '''root''';

 * «elenco_comandi»: l'elenco dei comandi a cui si da autorizzazione; si può usare anche un alias definito per i comandi. Possono essere inserite varie voci, separando ciascuna con una virgola «,». Con «ALL» si consente l'esecuzione di qualsiasi comando. Inoltre, si può anche inserire il nome di una directory, terminando il percorso con uno slash «/» per indicare tutti i comandi contenuti in quella directory;

Con la parola chiave «NOPASSWD» è possibile può indicare a '''sudo''' che per i comandi definiti successivamente non è richiesto l'inserimento della password. Inoltre, si può negare l'esecuzione di un comando, o un gruppo di comandi, inserendo prima di «elenco_comandi» un punto esclamativo «!». Questa modalità è comunque sconsigliata in quanto è sempre possibile aggirare la negazione rinominando il comando.

Quelli che seguono sono degli esempi:

 * {{{
Linea 138: Linea 186:
assegna a pippo qualsiasi privilegio. }}} Assegna all'utente '''pippo''' qualsiasi privilegio.

 * {{{
Linea 141: Linea 190:
assegna agli utenti raggruppati in AMMINISTRATORI i privilegi per eseguire i comandi raggruppati in UTILITY da qualunque host }}} Assegna agli utenti raggruppati in «AMMINISTRATORI» i privilegi per eseguire i comandi raggruppati in «UTILITY» da qualunque host.

 * {{{
Linea 144: Linea 194:
Si da all'utente1 e all'utente2, se connessi sulla macchina1, la possibilità si eseguire il comando1 e i comandi in /directory2 ma non /directory2/comando2 come utente2, senza richiedere la password

== Parametri sulla linea di comando ==

Sudo può essere lanciato con una serie di parametri che ne modificano il funzionamento temporaneamente. Alcuni di essi sono:

-H
L'opzione -H imposta la variabile di sistema HOME con la home directory dell'utente target, cioè quello che eseguirà il comando, normalmente root. Di default sudo lascia inalterata la HOME.
}}} Consente a '''utente1''' e '''utente2''', se collegati sulla '''macchina1''', di eseguire senza inserire la password il '''comando1''' ed i comandi contenuti in {{{/directory2}}}, escludendo '''/directory2/comando2''' all'utente '''utente2'''.

= Possibili problemi con il modello sudo =

Benché l'utilizzo di '''sudo''' per il desktop abbia molti benefici, ci sono dei possibili problemi che è necessario elencare:

 * alcuni pacchetti presenti nel [:Repository/Componenti:componente] '''universe''' sono danneggiati (ad esempio ''webmin'') o pericolosi da utilizzare. Un trucco per evitare problemi è abilitare l'utente '''root''' prima dell'installazione o dell'utilizzo di tali pacchetti, per poi disabilitarlo;
 * redirigere l'output di alcuni comandi eseguiti con '''sudo''' può portare nuovi utenti a strane conclusioni (ad esempio '''sudo ls > /root/file'''). Per raggirare tali problemi si può utilizzare '''sudo sh -c 'ls > /root/file'''', utilizzando [http://www.greenend.org.uk/rjk/2001/06/adverbio.html Adverbio] o semplicemente utilizzando '''sudo -s''' per aprire un terminale in con i privilegi di amministrazione e operare all'interno di esso.

= Ulteriori risorse =
Linea 153: Linea 205:
-b
L'opzione -b indica a sudo di eseguire il comando in background.
 
-k
L'opzione -k serve a eliminare il ricordo della password per l'utente. Al successivo utilizzo di sudo verrà nuovamente richiesta la password.

-l
L'opzione -l mostra i comandi che si ha l'autorizzazione di usare o di non usare.

-i
L'opzione -i consente di entrare nella shell come utente target simulando il login per il nuovo utente ed impostando le variabili ambiente. In pratica vi consente di diventare root e quindi non dover utilizzare sudo per ogni comando.

-s
L'opzione -s consente di entrare nella shell come utente target. Questa opzione è quasi identica a -i, ma non imposta le variabili ambiente dell'utente target.

== Sudo in Ubuntu ==

In Ubuntu per default l'account root è disabilitato, cioè non ha alcuna password impostata, in modo da consigliare al posto dell'utilizzo di root o su, l'utilizzo di sudo.

Questa scelta è stata effettuata per motivi di sicurezza.
E' in ogni caso possibile attivare l'account di root assegnandogli una password con il comando:

sudo passwd root

La prima password richiesta è quella per sudo, successivamente verrà richiesta la password per root e la successiva conferma.

Per disabilitare l'account root si può usare

sudo passwd -l root

La scelta di Ubuntu è dettata da alcune considerazioni:

Il team Ubuntu desiderava rendere il processo di installazione il più semplice possibile. Disabilitando l'account root alcuni passi durante l'installazione non sono più necessari.

Un altro motivo è che abilitando l'account root, l'utente ha la necessità di ricordare per sempre la password anche se normalmente userà l'account root molto raramente. Normalmente la password di root è dimenticata dagli utenti alle prime armi in un ambiente Unix/Linux.

Sudo evita eventuali disattenzioni nell'utilizzo di comandi, chiedendo la password nel caso si stiano per lanciare comandi amministrativi.

Sudo consente un log completo dei comandi eseguiti in /var/log/auth.log consentendo una analisi su ciò che è avvenuto nel sistema.

== Considerazioni ==

In ognuno dei due modelli, sudo e su, ci sono vantaggi e svantaggi.

Sudo, costringendo all'esecuzione controllata di singoli comandi, invece di aprire una shell root:

Riduce il tempo in cui gli utenti sono nel sistema come root e quindi riduce i rischi di lanciare inavvertitamente comandi dannosi per il sistema.

Aumenta la possibilità di ricerca e analisi sul sistema grazie al log dei comandi.

Di contro, se qualcuno scopre la password di un utente abilitato all'utilizzo di sudo come root in effetti può ottenere accesso come root. Normalmente le password utente sono più semplici rispetto a quelle scelte per l'utente root e ciò può dare problemi. Nel caso di utilizzo di sudo bisogna prestare una maggiore attenzione alla scelta della password utente.

I sostenitori del modello su, cioe' account di root abilitato e quindi utilizzo di una shell di root per compiti amministrativi, sostengono che su è più sicuro in quanto il livello di root si ottiene dopo l'inserimento di due password, la password utente e la password di root.

D'altra parte, in genere chi cerca di entrare in un sistema ha necessità di scoprire due cose, il nome utente e la password. Con l'account di root abilitato, una delle due è già nota, serve solo scoprire la password. Con sudo si devono scoprire entrambe (username e password).

Quando in un sistema alcuni compiti amministrativi sono assegnati a vari utenti, l'utilizzo di sudo evita di dover dare la password id root a più utenti.
L'amministratore può assegnare a qualsiasi utente, temporaneamente, privilegi particolari, eliminandoli o limitandoli quando non vi è più necessità.

 * Autore: Benjamin
 * lunedì 07 marzo 2005

Ringrazio swarzy per le precisazioni.

Per correzioni, estensioni e altro: [http://www.ubuntuitalia.it/index.php?option=com_simpleboard&Itemid=47&func=view&id=714&catid=10 qui]
 * [http://www.sudo.ws/ Sito ufficiale del progetto]
 * [:Sicurezza:Guida alla sicurezza in Ubuntu]

----
CategorySicurezza CategoryAmministrazione CategoryConsigliata

BR Indice(depth=2)

Include(StrumentiWiki/GuideConsigliate)

Introduzione

Nei sistemi operativi Unix e GNU/Linux c'è un utente particolare, detto super utente e contraddistinto dall'avere un UID (User ID) uguale a 0 e nome utente root, che ha totale accesso al sistema senza nessuna restrizione, cioè ne è l' amministratore.

Nella maggior parte dei sistemi GNU/Linux, l'amministratore del computer non usa l'utente amministratore (per motivi di sicurezza) ma usa un utente normale per svolgere il lavoro quotidiano. Quando ha la necessità di svolgere mansioni di amministrazione apre un terminale e avvia una sessione come utente root, oppure se si trova già in un terminale come utente normale usa il comando su per diventare utente root.

Ubuntu usa un sistema diverso per compiere operazioni amministrative, basato sull'utilizzo del comando sudo. Con sudo l'utente non ha la necessità di ricordare per sempre la password, anche se normalmente userà l'account root molto raramente. Inoltre, costringendo all'esecuzione controllata dei singoli comandi, si evitano eventuali disattenzioni nell'utilizzo degli stessi, chiedendo la password nel caso si stiano per lanciare comandi amministrativi e mantenendo un [:AmministrazioneSistema/LogDiSistema#autorizzazione:log] completo dei comandi eseguiti, permettendo l'analisi di ciò che è avvenuto nel sistema.

Di contro, se qualcuno scopre la password di un utente abilitato all'utilizzo di sudo come root in effetti può facilmente ottenere accesso totale al sistema. Normalmente, le password utente sono più semplici rispetto a quelle scelte per l'utente root e ciò può rivelarsi fonte di problemi; per tale ragione bisogna prestare molta attenzione nella scelta delle password utente.

Se si ha abilitato l'account root e si utilizza su, per ottenere i privilegi di amministrazione è necessario inserire due password, quella utente e quella dell'account root.

Quando in un sistema alcuni compiti amministrativi sono condivisi fra diversi account, l'utilizzo di sudo evita di dover dare la password di root a vari utenti. L'amministratore può assegnare temporaneamente a qualsiasi utente privilegi particolari, eliminandoli o limitandoli quando non vi è più necessità.

Il comando sudo

sudo (superuser do) consente di eseguire un comando come se si fosse un altro utente. Effettua una specie di sostituzione, previa autorizzazione, tra l'utente attuale (colui che esegue il comando sudo) e l'utente target (colui che esegue l'effettivo comando). Mentre con il comando su si cambia utente fino al termine della sessione del terminale, sudo assegna i privilegi dell'utente target al solo processo che viene con esso avviato.

Per eseguire dei comandi con privilegi d'amministrazione è sufficiente digitare sudo e successivamente il comando che si desidera eseguire come utente root, come nel seguente esempio:

sudo nano /etc/modules

L'utente target non deve essere necessariamente l'amministratore, ma può essere un qualsiasi utente del sistema. Per scegliere l'utente target, usare l'opzione -u:

sudo -u target comando

Una volta digitato il comando, il sistema chiederà la password dell'utente attuale e non la password dell'utente target (a meno che non si configuri sudo in modo diverso). La password viene chiesta la prima volta e memorizzata per un certo lasso di tempo, quindi è possibile usare il comando sudo più volte consecutive senza dover inserire ogni volta la password.

Immagine(Icone/Piccole/note.png,,center)

Per motivi di sicurezza il terminale non mostra nessun carattere di inserimento della password. A differenza delle richieste grafiche, nel terminale non vengono mostrati nemmeno gli asterischi di mascheramento. Digitare correttamente la password e premere «Invio».

Con sudo l'amministratore del sistema può assegnare privilegi particolari a qualsiasi utente, definire quali comandi far eseguire e quali no, avere il log di tutte le operazioni effettuate e ricevere via email informazioni su tentativi di accesso non autorizzati.

Anchor(parametri)

Parametri alla riga di comando

sudo può essere lanciato con una serie di parametri che ne modificano il funzionamento temporaneamente. Quelli che seguono sono una parte delle opzioni disponibili:

Opzione

Risultato

-H

imposta la variabile di sistema «$HOME» con la cartella Home dell'utente target, cioè quello che eseguirà il comando, normalmente root; in maniera predefinita sudo lascia inalterata la «$HOME»

-b

esegue il comando in background

-k

serve a eliminare il salvataggio della password per l'utente; al successivo utilizzo di sudo verrà nuovamente richiesta la password

-l

visualizza i comandi che si è autorizzati a usare o non usare

-i

consente di entrare nella [:AmministrazioneSistema/RigaDiComando:riga di comando] come utente target simulando l'accesso per il nuovo utente e impostando le variabili d'ambiente; in pratica consente all'utente di diventare root e quindi non dover utilizzare sudo ad ogni successivo comando

-s

consente di entrare nella [:AmministrazioneSistema/RigaDiComando:riga di comando] come utente target; questa opzione è quasi identica a -i, ma non imposta le variabili d'ambiente dell'utente target

Anchor(abilitare_login_root)

Abilitare l'accesso come utente root

In Ubuntu, in modo predefinito, l'accesso come utente root è disabilitato, impedendo così l'utilizzo di su, ma permettendo comunque l'utilizzo di sudo. Questa scelta è dovuta a motivi di sicurezza.

Se strettamente necessario, è possibile abilitare l'accesso come utente root assegnandogli una password con il seguente comando:

sudo passwd root

La prima password richiesta è quella per sudo, successivamente verrà richiesta la password per l'utente root e la successiva conferma.

Per disabilitare l'accesso come amministratore si può usare il seguente comando:

sudo passwd -l root

In questo modo l'accesso come utente root risulterà nuovamente bloccato.

Anchor(applicazioni_grafiche)

Avviare applicazioni grafiche con privilegi di amministrazione

Quando è necessario avviare da terminale un'applicazione grafica usando i privilegi d'amministrazione, è possibile utilizzare i comandi gksudo, se si utilizza [:AmbienteGrafico/Gnome:GNOME], o kdesu, se si usa [:AmbienteGrafico/Kde:KDE]. Quelli che seguono sono degli esempi:

  • gksudo gedit /etc/apt/sources.list

    Apre il file /etc/apt/sources.list con l'editor gedit di GNOME e con i privilegi di amministrazione.

  • kdesu kate /boot/grub/menu.lst

    Apre il file /boot/grub/menu.list con l'editor kate di KDE e con i privilegi di amministrazione.

È sconsigliato usare sudo per avviare un'applicazione grafica, in quanto, soprattutto in KDE, le variabili d'ambiente non verranno impostate nella maniera corretta.

Configurazione

È possibile modificare la configurazione di sudo con il seguente comando:

sudo visudo

Il file di configurazione /etc/sudoers è composto da tre sezioni:

  • impostazione degli [#definizionealias alias];
  • impostazione delle [#opzionidefault opzioni di default];
  • impostazione delle [#autorizzazioni autorizzazioni].

Anchor(definizionealias)

Impostazione degli alias

In questa sezione vengono definiti degli alias in modo da potersi riferire, successivamente, in modo più semplice alle informazioni per la configurazione dei privilegi utente.

Le istruzioni di definizione degli alias seguono la forma:

tipo_alias NOME_ALIAS = voce1, voce2, voce3 ... voceX

Dove «tipo_alias» può essere:

  • «User_Alias»: per definire l'alias per un elenco di utenti;
  • «Cmnd_Alias»: per definire l'alias per un elenco di comandi;
  • «Host_Alias»: per definire l'alias per un elenco di host.

Quelli che seguono sono degli esempi:

  • User_Alias AMMINISTRATORI = utente1, utente2, utente3
    Definisce un gruppo di utenti a cui si potrà far riferimento con la dicitura «AMMINISTRATORI».
  • Cmnd_Alias UTILITY = /sbin/comando1, /usr/bin/comando2, etc..
    Definisce un gruppo di comandi.
  • Host_Alias MACCHINE = macchina1, macchina2, macchina3
    Definisce un gruppo di host.

Anchor(opzionidefault)

Impostazione delle opzioni predefinite

È possibile configurare il comportamento standard di sudo impostando una serie di parametri con la parola chiave «Defaults».

Ci sono decine di parametri configurabili con Defaults, i principali sono i seguenti:

  • «mail_always»: invia una mail all'utente configurato con l'opzione mailto per ogni comando eseguito con sudo;

  • «mail_badpass»: invia una mail quando un utente inserisce una password sbagliata;
  • «mail_no_user»: invia una mail quando l'utente corrente non è tra quelli definiti in /etc/sudoers;

  • «rootpw»: indica a sudo di richiedere la password di root invece della password utente per l'autenticazione;

  • «targetpw»: indica a sudo di richiedere la password di dell'utente target invece della password utente per l'autenticazione;

  • «passwd_timeout»: imposta il tempo in minuti dopo il quale sudo dimentica la password inserita dall'utente;

  • «timestamp_timeout»: imposta il tempo in minuti dopo il quale verrà richiesta nuovamente la password. Se impostato a 0 ad ogni comando verrà richiesta la password;
  • «mailsub»: imposta l'oggetto delle mail inviate; il messaggio di default è il seguente:

    *** SECURITY information for %h ***
    È possibile usare il parametro «%h» come nome host;
  • «mailto»: imposta l'indirizzo email dell'utente al quale inoltrare le mail di segnalazione;
  • «logfile»: imposta il [:AmministrazioneSistema/LogDiSistema:file di log] per il logging delle operazioni.

Anchor(autorizzazioni)

Impostazione delle autorizzazioni

I comandi per l'impostazione dei privilegi definiscono quali utenti possono utilizzare quali comandi, da quali host e in che modo.

La forma generale è la seguente:

elenco_utenti elenco_host = (user_target) elenco_comandi
  • «elenco_utenti»: può essere un utente, un alias definito in precedenza o anche un gruppo di sistema definito in /etc/group precedendo il nome del gruppo con il simbolo percentuale «%». Possono essere inserite varie voci, separando ciascuna con una virgola «,»;

  • «elenco_host»: i nomi delle macchine da cui è consentito utilizzare sudo. Si può usare anche un alias definito per gli host. Possono essere inserite varie voci, separando ciascuna con una virgola «,». Con «ALL» si consente l'uso di sudo da qualsiasi host;

  • «(user_target)»: è un parametro opzionale con cui si dice a sudo di eseguire i comandi come utente user_target invece che root;

  • «elenco_comandi»: l'elenco dei comandi a cui si da autorizzazione; si può usare anche un alias definito per i comandi. Possono essere inserite varie voci, separando ciascuna con una virgola «,». Con «ALL» si consente l'esecuzione di qualsiasi comando. Inoltre, si può anche inserire il nome di una directory, terminando il percorso con uno slash «/» per indicare tutti i comandi contenuti in quella directory;

Con la parola chiave «NOPASSWD» è possibile può indicare a sudo che per i comandi definiti successivamente non è richiesto l'inserimento della password. Inoltre, si può negare l'esecuzione di un comando, o un gruppo di comandi, inserendo prima di «elenco_comandi» un punto esclamativo «!». Questa modalità è comunque sconsigliata in quanto è sempre possibile aggirare la negazione rinominando il comando.

Quelli che seguono sono degli esempi:

  • pippo ALL = (ALL) ALL

    Assegna all'utente pippo qualsiasi privilegio.

  • AMMINISTRATORI ALL = UTILITY
    Assegna agli utenti raggruppati in «AMMINISTRATORI» i privilegi per eseguire i comandi raggruppati in «UTILITY» da qualunque host.
  • utente1,utente2 macchina1 = (utente2) NOPASSWD: /directory1/comando1, /directory2/, !/directory2/comando2

    Consente a utente1 e utente2, se collegati sulla macchina1, di eseguire senza inserire la password il comando1 ed i comandi contenuti in /directory2, escludendo /directory2/comando2 all'utente utente2.

Possibili problemi con il modello sudo

Benché l'utilizzo di sudo per il desktop abbia molti benefici, ci sono dei possibili problemi che è necessario elencare:

  • alcuni pacchetti presenti nel [:Repository/Componenti:componente] universe sono danneggiati (ad esempio webmin) o pericolosi da utilizzare. Un trucco per evitare problemi è abilitare l'utente root prima dell'installazione o dell'utilizzo di tali pacchetti, per poi disabilitarlo;

  • redirigere l'output di alcuni comandi eseguiti con sudo può portare nuovi utenti a strane conclusioni (ad esempio sudo ls > /root/file). Per raggirare tali problemi si può utilizzare sudo sh -c 'ls > /root/file', utilizzando [http://www.greenend.org.uk/rjk/2001/06/adverbio.html Adverbio] o semplicemente utilizzando sudo -s per aprire un terminale in con i privilegi di amministrazione e operare all'interno di esso.

Ulteriori risorse


CategorySicurezza CategoryAmministrazione CategoryConsigliata