Guida a Sudo: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
m
compatibilità
m (compatibilità)
(22 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
{{Stub}}
{{Versioni compatibili|Jessie|Stretch|Buster}}
== Prima di iniziare ==
== Prima di iniziare ==
<!--
* SEZIONE COMMENTATA
=== Caveat ===
=== Caveat ===
La stragrande maggioranza degli utenti che utilizza sudo lo fa in maniera sbagliata e, tipicamente, è composta da utenti provenienti da una famosa distribuzione derivata che si affacciano per la prima volta a Debian.<br/>
La stragrande maggioranza degli utenti che utilizza <code>sudo</code> lo fa in maniera sbagliata e, tipicamente, è composta da utenti provenienti da una famosa distribuzione derivata che si affacciano per la prima volta a Debian.<br/>
È necessario, quindi, spender poche parole in proposito.
È necessario, quindi, spender poche parole in proposito.


Riga 12: Riga 14:
- per accrescere la consapevolezza in ciascuna persona sulle operazioni che sta svolgendo
- per accrescere la consapevolezza in ciascuna persona sulle operazioni che sta svolgendo


Purtroppo oggi la stessa famosa distribuzione derivata installa sudo di default con il meritevole intento di 'semplificare' l'interazione uomo-macchina; il risultato, però, ha portato a conseguenza indesiderate:
Purtroppo oggi la stessa famosa distribuzione derivata installa <code>sudo</code> di default con il meritevole intento di 'semplificare' l'interazione uomo-macchina; il risultato, però, ha portato a conseguenza indesiderate:
* non si ha la percezione di cosa si sta facendo
* non si ha la percezione di cosa si sta facendo
* non si ha la percezione della distinzione amministratore - utente
* non si ha la percezione della distinzione amministratore - utente
* non si ha la percezione di sé nei confronti della macchina
* non si ha la percezione di sé nei confronti della macchina
Tutto questo, per un utente Debian, è inaccettabile.
Tutto questo, per un utente Debian, è inaccettabile.
-->


=== Mi serve sudo? ===
=== Mi serve <code>sudo</code>? ===
Dopo questa premessa, torniamo a sudo per rispondere alla domanda: "Mi serve sudo?"<br/>
<!-- Dopo questa premessa, torniamo a <code>sudo</code> per rispondere alla domanda: "Mi serve <code>sudo</code>?"<br/> -->
La risposta è, come sempre, "dipende".
La risposta è, come sempre, "dipende".


Se non sai qual è la sua funzione o come si configura, probabilmente non ti serve.<br/>
Se non sai qual è la sua funzione o come si configura, probabilmente non ti serve.<br/>
Su una macchina desktop monoutente (il computer di casa, il portatile, il PC dell'ufficio), sudo è inutile. Esiste il comando ''su''' (e le sue interfacce grafiche ''gksu'' e ''kdesu'') che permette di eseguire comandi con i permessi di root (o, se presente, di qualsiasi altro utente) in tutta sicurezza e, soprattutto, senza dover modificare alcun file di configurazione. Questo previene errori dovuti a configurazioni sbagliate.
Su una macchina desktop monoutente (il computer di casa, il portatile, il PC dell'ufficio), <code>sudo</code> è inutile. Esiste il comando ''su''' (e le sue interfacce grafiche ''gksu'' e ''kdesu'') che permette di eseguire comandi con i permessi di root (o, se presente, di qualsiasi altro utente) in tutta sicurezza e, soprattutto, senza dover modificare alcun file di configurazione. Questo previene errori dovuti a configurazioni sbagliate.


Su una macchina server, invece, il comando sudo è a volte necessario se non indispensabile.<br/>
Su una macchina server, invece, il comando <code>sudo</code> è a volte necessario se non indispensabile.<br/>
Sudo permette all'amministratore del server di concedere privilegi di esecuzione per comandi ben precisi e solo ad utentu (o [[host]]) ben definiti.<br/>
Sudo permette all'amministratore del server di concedere privilegi di esecuzione per comandi ben precisi e solo ad utentu (o [[host]]) ben definiti.<br/>
Il tutto si traduce in una maggiore flessibilità nelle operazioni di gestione della macchina.
Il tutto si traduce in una maggiore flessibilità nelle operazioni di gestione della macchina.


Vi è anche una terza di tipologia di sistemi a cui si rivolge sudo: le macchine desktop gestite da utenti consapevoli che utilizzano sudo per operazioni ben definite e che modificano correttamente il file <code>sudoers</code>.
Vi è anche una terza di tipologia di sistemi a cui si rivolge <code>sudo</code>: le macchine desktop gestite da utenti consapevoli che utilizzano <code>sudo</code> per operazioni ben definite e che modificano correttamente il file <code>sudoers</code>.


=== Errori comuni ===
=== Errori comuni ===
Un breve elenco di operazioni da evitare nell'uso e configurazione di sudo.
Un breve elenco di operazioni da evitare nell'uso e configurazione di <code>sudo</code>.
<!--
* SEZIONE COMMENTATA *
;'''ALL = ALL'''
:Il primo errore consiste nell'inserire la riga:<pre>utente ALL = ALL</pre>oppure la riga:<pre>utente ALL = (ALL) ALL</pre>In questo modo si dà il permesso a ''utente'' di fare qualunque cosa previo inserimento della propria password.<br/>Ma perché ricorrere a tale soluzione quando si può essere ugualmente distruttivi con...


;'''ALL : ALL'''
;Aggiungere il proprio utente al gruppo <code>sudo</code>
:Il primo errore consiste nell'inserire la riga:<pre>utente ALL:ALL</pre>oppure la riga:<pre>utente ALL = (ALL) ALL</pre>In questo modo si dà il permesso a ''utente'' di fare qualunque cosa previo inserimento della propria password.<br/>Ma perché ricorrere a tale soluzione quando si può essere ugualmente distruttivi con...
:Altro errore è aggiungere il proprio utente al gruppo <code>sudo</code>:<pre># adduser nome_utente sudo</pre>ed effettuare un logout/login.<br/><br/>Poiché in <code>/etc/sudoers</code> esiste la riga:<pre>%sudo ALL = (ALL):ALL</pre>l'effetto è permettere agli utenti del gruppo <code>sudo</code> di eseguire qualsiasi comando (ultimo ALL) da qualsiasi host (primo ALL) e con qualsiasi credenziale (ALL tra parentesi)<br/>Si otterrà effettivamente il funzionamento di <code>sudo</code>, ma a che prezzo?<br/>L'utente può eseguire qualunque comando semplicemente inserendo la propria password. Quindi:* cade la distinzione tra utente normale e amministratore * si permette a chiunque conosca la password, di eseguire tutti i comandi di sistema<br/>La conclusione è ovvia: state utilizzando Debian come se fosse Win95. Se qualcuno viene in possesso della vostra password utente, potrà fare qualunque cosa senza nemmeno doversi affannare a cercare la password di root.<br/>In pratica siete come dei direttori di banca che, nel portachiavi, portano in giro una chiave che apre sia la porta di ingresso alla banca che la cassaforte.
-->


;Aggiungere il proprio utente al gruppo sudo
;Rimuovere l'autenticazione
:Altro errore è aggiungere il proprio utente al gruppo sudo:<pre># adduser nome_utente sudo</pre>ed effettuare un logout/login.<br/><br/>Poiché in <code>/etc/sudoers</code> esiste la riga:<pre>%sudo ALL = (ALL):ALL</pre>l'effetto è permettere agli utenti del gruppo sudo di eseguire qualsiasi comando (ultimo ALL) da qualsiasi host (primo ALL) e con qualsiasi credenziale (ALL tra parentesi).<br/>Si otterrà effettivamente il funzionamento di sudo, ma a che prezzo?<br/>L'utente può eseguire qualunque comando semplicemente inserendo la propria password. Quindi:* cade la distinzione tra utente normale e amministratore * si permette a chiunque conosca la password, di eseguire tutti i comandi di sistema<br/>La conclusione è ovvia: state utilizzando Debian come se fosse Win95. Se qualcuno viene in possesso della vostra password utente, potrà fare qualunque cosa senza nemmeno doversi affannare a cercare la password di root.<br/>In pratica siete come dei direttori di banca che, nel portachiavi, portano in giro una chiave che apre sia la porta di ingresso alla banca che la cassaforte.
:La rimozione dell'autenticazione (vedere l'opzione "authenticate") è, di per sé, un'operazione generalmente da evitare in quanto, senza ulteriori configurazioni, elimina la richiesta di inserimento password per un utente che, attraverso <code>sudo</code>, esegue un comando (o più comandi). Inoltre è foriera di sicuri errori di configurazione quando il file <code>/etc/sudoers</code> contiene numerose linee.<br/>In congiunzione con uno dei due errori descritti in precedenza, però, questa operazione assume i caratteri del cataclisma: chiunque può eseguire comandi di sistema attraverso <code>sudo</code>, da qualunque parte del mondo si trovi e senza nessuna password da immettere. L'unica limitazione sarà l'accesso (fisico o remoto) al vostro host.


;Modifiche frequenti ai file
;Modifiche frequenti ai file
:Se modificate frequentemente i file di sistema, potrebbe sorgere l'illusoria esigenza di dover installare sudo.<br/>Qui l'errore è concettuale: se modificate spesso i file di sistema, c'è qualcosa che non va. A meno che non siate amministratori di un server.<br/>La soluzione non è installare sudo, ma capire il perché di tante modifiche su una macchina Debian che non necessita di interventi continui come root. Spesso, infatti, l'intervento come root si riduce ad una prima configurazione iniziale (che resta poi praticamente invariata) e a successive operazioni di installazione, rimozione e aggiornamento di pacchetti (per cui esistono programmi a interfaccia grafica o il comando su).
:Se modificate frequentemente i file di sistema, potrebbe sorgere l'illusoria esigenza di dover installare <code>sudo</code>.<br/>Qui l'errore è concettuale: se modificate spesso i file di sistema, c'è qualcosa che non va. A meno che non siate amministratori di un server.<br/>La soluzione non è installare <code>sudo</code>, ma capire il perché di tante modifiche su una macchina Debian che non necessita di interventi continui come root. Spesso, infatti, l'intervento come root si riduce ad una prima configurazione iniziale (che resta poi praticamente invariata) e a successive operazioni di installazione, rimozione e aggiornamento di pacchetti (per cui esistono programmi a interfaccia grafica o il comando su).


;Sudo semplifica l'amministrazione
;Sudo semplifica l'amministrazione
Riga 47: Riga 55:


;Sudo e l'escape della shell
;Sudo e l'escape della shell
:Un errore molto meno marchiano è utilizzare sudo con programmi che permettono l'escape della shell, ossia che consentono, una volta eseguiti, di poter avviare una shell.<br/>Consideriamo la seguente riga in <code>/etc/sudoers</code>:<pre>pippo ALL = /usr/bin/vim /etc/apt/sources.list</pre>in buona fede si potrebbe pensare di concedere all'utente pippo la sola modifica del file <code>/etc/apt/sources.list</code> attraverso Vim. Malauguratamente Vim, e altri programmi, permettono di eseguire un shell (vedere qui). Per cui l'utente pippo, un volta eseguito il comando:<pre>$ sudo vim /etc/apt/sources.list</pre>potrà, dopo aver inserito la propria password, aprire una shell con i permessi di root e, subito dopo, eseguire qualunque comando con i permessi di superutente; esattamente ciò che non vogliamo.<br/>La soluzione è modificare il file sudoers così:<pre>pippo localhost = NOEXEC : /usr/bin/vim /etc/apt/sources.list</pre>o utilizzare altro editor (nano) che non permetta l'escape della shell.
:Un errore molto meno marchiano è utilizzare <code>sudo</code> con programmi che permettono l'escape della shell, ossia che consentono, una volta eseguiti, di poter avviare una shell.<br/>Consideriamo la seguente riga in <code>/etc/sudoers</code>:<pre>pippo ALL = /usr/bin/vim /etc/apt/sources.list</pre>in buona fede si potrebbe pensare di concedere all'utente pippo la sola modifica del file <code>/etc/apt/sources.list</code> attraverso Vim. Malauguratamente Vim, e altri programmi, permettono di eseguire una shell (vedere [Vim Cheat Sheet|qui]). Per cui l'utente pippo, un volta eseguito il comando:<pre>$ sudo vim /etc/apt/sources.list</pre>potrà, dopo aver inserito la propria password, aprire una shell con i permessi di root e, subito dopo, eseguire qualunque comando con i permessi di superutente; esattamente ciò che non vogliamo.<br/>La soluzione è modificare il file <code>sudoers</code> così:<pre>pippo localhost = NOEXEC : /usr/bin/vim /etc/apt/sources.list</pre>o utilizzare altro editor (nano) che non permetta l'escape della shell.


;Modifica dei file
;Modifica dei file
Riga 53: Riga 61:


=== Consigli utili ===
=== Consigli utili ===
* Non installare sudo su macchine desktop.<br/>Avvalersi, piuttosto, degli strumenti alternativi (grafici e testuali) che Debian mette a disposizione.
* Non installare <code>sudo</code> su macchine desktop.<br/>Avvalersi, piuttosto, degli strumenti alternativi (grafici e testuali) che Debian mette a disposizione.


* Se si decide di utilizzare sudo, documentarsi sul suo funzionamento e la sua configurazione.<br/>Documentarsi anche sul funzionamento di ogni programma che si è deciso di avviare attraverso sudo.
* Se si decide di utilizzare <code>sudo</code>, documentarsi sul suo funzionamento e la sua configurazione.<br/>Documentarsi anche sul funzionamento di ogni programma che si è deciso di avviare attraverso <code>sudo</code>.


* Utilizzare ''sudoedit'' anziché direttamente programmi che permettono l'escape della shell
* Utilizzare ''sudoedit'' anziché direttamente programmi che permettono l'escape della shell
* Utilizzare ''sudoedit'' ogni volta che si vuol editare un file.


* Tenere sempre presente che la priorità è la sicurezza della Debian box.<br/>In un mondo interconnesso, la compromissione della sicurezza della vostra macchina non è solo un problema per voi stessi ma anche un serio problema per ogni computer del globo.
* Tenere sempre presente che la priorità è la sicurezza della Debian box.<br/>In un mondo interconnesso, la compromissione della sicurezza della vostra macchina non è solo un problema per voi stessi ma anche un serio problema per ogni computer del globo.


* Valutare attentamente i vantaggi e gli svantaggi a cui si va incontro utilizzando sudo.
* Valutare attentamente i vantaggi e gli svantaggi a cui si va incontro utilizzando <code>sudo</code>.


== Installazione ==
== Installazione ==
Riga 71: Riga 81:
Se si vuole riavere una  password di root non vuota, basta eseguire:
Se si vuole riavere una  password di root non vuota, basta eseguire:
<pre>$ sudo passwd root</pre>
<pre>$ sudo passwd root</pre>
e poi rimuovere il proprio utente dal gruppo sudo:
e poi rimuovere il proprio utente dal gruppo <code>sudo</code>:
<pre># deluser nome_utente sudo</pre>
<pre># deluser nome_utente sudo</pre>
Questo disabilita sudo per "nome_utente" e permette di configurarlo successivamente, se si vuole, con sicurezza e precisione maggiori. Oltre che con la piena consapevolezza delle operazioni che ci si accinge a svolgere.
Questo disabilita <code>sudo</code> per "nome_utente" e permette di configurarlo successivamente, se si vuole, con sicurezza e precisione maggiori. Oltre che con la piena consapevolezza delle operazioni che ci si accinge a svolgere.


Se ci si dovesse chiedere del perché Debian non installi sudo di default come altre famose distribuzioni derivate, la risposta è semplice: Debian ha una configurazione di base fortemente orientata alla sicurezza e possiede già di default tutti gli strumenti necessari e coerenti per amministrare la propria macchina.
Se ci si dovesse chiedere del perché Debian non installi <code>sudo</code> di default come altre famose distribuzioni derivate, la risposta è semplice: Debian ha una configurazione di base fortemente orientata alla sicurezza e possiede già di default tutti gli strumenti necessari e coerenti per amministrare la propria macchina.


== Configurazione ==
== Configurazione ==
La configurazione di sudo si ottiene con la modifica del file <code>/etc/sudoers</code> oppure con la creazione di file di configurazione nella directory <code>/etc/sudoers.d/</code> .
La configurazione di <code>sudo</code> si ottiene con la modifica del file <code>/etc/sudoers</code> oppure con la creazione di file di configurazione nella directory <code>/etc/sudoers.d/</code> .


=== Il file <code>/etc/sudoers</code> ===
=== Il file <code>/etc/sudoers</code> ===
Per modificare il file sudoers c'è un'unica strada, utilizzare da root il comando:
Per modificare il file <code>sudoers</code> c'è un'unica strada, utilizzare da root il comando:
<pre># visudo</pre>
<pre># visudo</pre>
In questo modo viene eseguito l'editor di default, rigorosamente testuale.
In questo modo viene eseguito l'editor di default, rigorosamente testuale.
Riga 115: Riga 125:
  '''#includedir /etc/sudoers.d'''
  '''#includedir /etc/sudoers.d'''


Le righe in grassetto sono quelle significative. I commenti (righe che iniziano con #) o le righe vuote non contribuiscono alla configurazione di sudo ma sono comunque importanti per la leggibilità del file.<br/>
Le righe in grassetto sono quelle significative. I commenti (righe che iniziano con #) o le righe vuote non contribuiscono alla configurazione di <code>sudo</code> ma sono comunque importanti per la leggibilità del file.<br/>
L'ultima linea, in cui è contenuta la direttiva "#includedir", rappresenta un'eccezione alla regola precedente e non viene vista come un commento.
L'ultima linea, in cui è contenuta la direttiva "#includedir", rappresenta un'eccezione alla regola precedente e non viene vista come un commento.


Prestare attenzione al fatto che aggiornamenti del pacchetto sudo potrebbero chiedere di sovrascrivere questo file.<br/>
Prestare attenzione al fatto che aggiornamenti del pacchetto <code>sudo</code> potrebbero chiedere di sovrascrivere questo file.<br/>
Benché in fase di aggiornamento gli avvertimenti siano piuttosto chiari (verrà chiesto esplicitamente se mantenere il file, se sovrascriverlo, guardare i cambiamenti introdotti etc.), è consigliato creare una copia di backup e custodirla al sicuro.
Benché in fase di aggiornamento gli avvertimenti siano piuttosto chiari (verrà chiesto esplicitamente se mantenere il file, se sovrascriverlo, guardare i cambiamenti introdotti etc.), è consigliato creare una copia di backup e custodirla al sicuro.


=== La directory <code>/etc/sudoers.d/</code> ===
=== La directory <code>/etc/sudoers.d/</code> ===
In caso si debba scrivere un elevato numero di righe, si può far uso della directory /etc/sudoers.d/ in cui è possibile creare tutti i file che si ritengono necessari per configurare sudo. Questi verranno visti in sequenza come un unico file di configurazione.
In caso si debba scrivere un elevato numero di righe, si può far uso della directory <code>/etc/sudoers.d/</code> in cui è possibile creare tutti i file che si ritengono necessari per configurare <code>sudo</code>. Questi verranno visti in sequenza come un unico file di configurazione.
* Il file sudoers viene comunque e sempre letto per primo
* Il file <code>sudoers</code> viene comunque e sempre letto per primo
* Affinché questi file possano essere considerati come file di configurazione, è necessario che sia presente in /etc/sudoers la riga:<pre>#includedir /etc/sudoers.d</pre>
* Affinché questi file possano essere considerati come file di configurazione, è necessario che sia presente in <code>/etc/sudoers</code> la riga:<pre>#includedir /etc/sudoers.d</pre>
* I file non possono contenere punti nel loro nome
* I file non possono contenere punti nel loro nome
* I file che terminano con ~ non vengono considerati
* I file che terminano con ~ non vengono considerati
* È opportuno dare i permessi 0440 a questi file:<pre># chmod 0440 /etc/sudoers.d/*</pre>in modo che siano leggibili e scrivibili solo da root
* È opportuno dare i permessi 0440 a questi file:<pre># chmod 0440 /etc/sudoers.d/*</pre>in modo che siano leggibili e scrivibili solo da root
* I file sono letti in ordine alfabetico. Si consiglia di anteporre un numero al loro nome in modo da avere la certezza che i file vengano letti nell'ordine desiderato. Ad esempio: 00topolino, 01pippo, 02 pluto, .... , 99gambadilegno
* I file sono letti in ordine alfabetico. Si consiglia di anteporre un numero al loro nome in modo da avere la certezza che i file vengano letti nell'ordine desiderato. Ad esempio: 00topolino, 01pippo, 02 pluto, .... , 99gambadilegno
* Scegliere nomi significativi (07alias_comandi_per_l_utente_pippo è preferibile a 07config).
* Scegliere nomi significativi ("07alias_comandi_per_l_utente_pippo" è preferibile a "07config").
* Le configurazioni presenti in un file possono sovrascrivere identiche configurazioni contenute in un file che lo precede. Se possibile, fare in modo che le configurazioni comuni siano contenute nel primo file o nel file sudoers.
* Le configurazioni presenti in un file possono sovrascrivere identiche configurazioni contenute in un file che lo precede. Se possibile, fare in modo che le configurazioni comuni siano contenute nel primo file o nel file <code>sudoers</code>.
* Suddividere i file in maniera logica (per utente, per host, per gruppi, per comandi, etc.) e commentare ogni aggiunta o modifica. Questo consentirà, sia a voi sia a chi si troverà a leggerli, di interpretarli con maggior semplicità e chiarezza
* Suddividere i file in maniera logica (per utente, per host, per gruppi, per comandi, etc.) e commentare ogni aggiunta o modifica. Questo consentirà, sia a voi sia a chi si troverà a leggerli, di interpretarli con maggior semplicità e chiarezza
* A differenza del file sudoers, è possibile creare e modificare questi file con un editor grafico attraverso gksu o kdesu<pre>$ gksu gedit /etc/sudoers.d/01pippo</pre>
* A differenza del file <code>sudoers</code>, è possibile creare e modificare questi file con un editor grafico attraverso "gksu" o "kdesu"<pre>$ gksu gedit /etc/sudoers.d/01pippo</pre>
* Tutti i file presenti in questa directory non saranno sovrascritti o cancellati da futuri aggiornamenti del pacchetto sudo
* Tutti i file presenti in questa directory non saranno sovrascritti o cancellati da futuri aggiornamenti del pacchetto <code>sudo</code>


Leggere anche il file <code>/etc/sudoers.d/README</code>
Leggere anche il file <code>/etc/sudoers.d/README</code>


=== Struttura ===
=== Struttura ===
Riprendiamo il file /etc/sudoers per analizzarne la struttura. Possiamo vedere che esistono quattro sezioni.
Riprendiamo il file <code>/etc/sudoers</code> per analizzarne la struttura. Possiamo vedere che esistono quattro sezioni.


'''Opzioni di default'''<br/>
'''Opzioni di default'''<br/>
Riga 163: Riga 173:
</pre>
</pre>


'''Direttiva #includedir (TODO #include)'''<br/>
'''Direttiva #includedir <!--(TODO #include)-->'''<br/>
<pre>#includedir /etc/sudoers.d</pre>
<pre>#includedir /etc/sudoers.d</pre>
Quest'ultima sezione indica la directory in cui leggere eventuali e ulteriori file di configurazione di sudo. Andrebbe lasciata in fondo al file ed, eventualmente, modificata specificando altra directory se si hanno esigenze particolari.
Quest'ultima sezione indica la directory in cui leggere eventuali e ulteriori file di configurazione di <code>sudo</code>. Andrebbe lasciata in fondo al file ed, eventualmente, modificata specificando altra directory se si hanno esigenze particolari.
   
   
Le prime tre sezioni verranno analizzate separatamente ed è raccomandato mantenerle separate e nell'ordine indicato. Benché sia possibile mescolare gli alias con le specifiche e con le opzioni di default, il risultato sarebbe solo quello di rendere illeggibile il file di configurazione e, spesso, sperimentare comportamenti indesiderati.
Le prime tre sezioni verranno analizzate separatamente ed è raccomandato mantenerle separate e nell'ordine indicato. Benché sia possibile mescolare gli alias con le specifiche e con le opzioni di default, il risultato sarebbe solo quello di rendere illeggibile il file di configurazione e, spesso, sperimentare comportamenti indesiderati.
   
   
== Alias ==
== Alias ==
Iniziamo ad analizzare gli alias, inizialmente non specificati. Questo indica che, in sostanza, non sono strettamente necessari per configurare sudo, anche se il loro ruolo diventa fondamentale quando il numero di linee inizia a crescere ed è facile ritrovarsi nella sgradevole situazione di perdere tempo nell'analizzare i file di configurazione.
Iniziamo ad analizzare gli alias, inizialmente non specificati. Questo indica che, in sostanza, non sono strettamente necessari per configurare <code>sudo</code>, anche se il loro ruolo diventa fondamentale quando il numero di linee inizia a crescere ed è facile ritrovarsi nella sgradevole situazione di perdere tempo nell'analizzare i file di configurazione.


Come lascia intuire il nome, gli alias permettono di raggruppare logicamente il nome di un certo numero di utenti, di host, di gruppi o di comandi, in modo da farvi riferimento in modo semplice e veloce attraverso una sola stringa identificativa (il nome dell'alias).<br/>
Come lascia intuire il nome, gli alias permettono di raggruppare logicamente il nome di un certo numero di utenti, di host, di gruppi o di comandi, in modo da farvi riferimento in modo semplice e veloce attraverso una sola stringa identificativa (il nome dell'alias).<br/>
Riga 270: Riga 280:
==== Alias di tipo Cmnd_Alias ====
==== Alias di tipo Cmnd_Alias ====
Lista che contiene uno o più comandi o directory.
Lista che contiene uno o più comandi o directory.
* I comandi devono essere scritti esattamente insieme al loro path assoluto (whereis nomecomando per trovarlo)
* I comandi devono essere scritti esattamente insieme al loro path assoluto ("whereis nomecomando" per trovarlo)
* I comandi funzionano anche se vengono eseguiti insieme a dei parametri, per cui se:
* I comandi funzionano anche se vengono eseguiti insieme a dei parametri, per cui se:
<pre>
<pre>
Riga 287: Riga 297:
<pre>Cmnd_Alias LS = /bin/ls -[la]
<pre>Cmnd_Alias LS = /bin/ls -[la]
pippo ALL = LS</pre>
pippo ALL = LS</pre>
* È possibile inserire anche il percorso assoluto di una directory, questo indicherà che potranno essere eseguiti con sudo tutti i programmi contenuti in quella directory ma non nelle sottodirectory. Ad esempio con:
* È possibile inserire anche il percorso assoluto di una directory, questo indicherà che potranno essere eseguiti con <code>sudo</code> tutti i programmi contenuti in quella directory ma non nelle sottodirectory. Ad esempio con:
<pre>Cmnd_Alias BIN = /bin/
<pre>Cmnd_Alias BIN = /bin/
pippo ALL = BIN</pre>
pippo ALL = BIN</pre>
è possibile eseguire con sudo tutto ciò che si trova in /bin/
è possibile eseguire con <code>sudo</code> tutto ciò che si trova in <code>/bin/</code>. Ad esempio il comando "cat":
<pre>$ sudo cat /var/log/kern.log</pre>
<pre>$ sudo cat /var/log/kern.log</pre>


==== Alias di tipo Runas_Alias ====
==== Alias di tipo Runas_Alias ====
Questa lista può essere  composta da nomi utente, gruppi (preceduti dal carattere "%"), [[UID]] (preceduti dal carattere "#"), gruppi di rete (preceduti dal carattere "+") o altri alias di tipo Runas_Alias e specifica con i permessi di quale utente deve essere eseguito un comando attraverso sudo.
Questa lista può essere  composta da nomi utente, gruppi (preceduti dal carattere "%"), [[UID]] (preceduti dal carattere "#"), gruppi di rete (preceduti dal carattere "+") o altri alias di tipo Runas_Alias e specifica con i permessi di quale utente deve essere eseguito un comando attraverso <code>sudo</code>.
Ad esempio:
Ad esempio:
<pre>
<pre>
Riga 307: Riga 317:
ma anche:
ma anche:
<pre>$ sudo -u topolino /usr/local/bin/script.sh</pre>
<pre>$ sudo -u topolino /usr/local/bin/script.sh</pre>
se l'utente topolino fa parte del gruppo adm.
se l'utente topolino fa parte del gruppo <code>adm</code>.<br/>
Ovviamente tutti gli utenti coinvolti devono avere il permesso di eseguire lo script.
Ovviamente tutti gli utenti coinvolti devono avere il permesso di eseguire lo script.


== Specifiche ==
== Specifiche ==
Eccoci giunti al cuore del file sudoers: le righe che indicano in che modo e con quali comandi è possibile invocare sudo.<br/>
Eccoci giunti al cuore del file <code>sudoers</code>: le righe che indicano in che modo e con quali comandi è possibile invocare <code>sudo</code>.<br/>
Una riga è costituita da diverse parti strutturate in questo modo:
Una riga è costituita da diverse parti strutturate in questo modo:
<pre>
<pre>
Riga 320: Riga 330:
significa che l'utente pippo potrà eseguire il comando solo dall'host "topolinia" e con le credenziali dell'utente topolino e del gruppo topolino. Non verrà chiesta la password.
significa che l'utente pippo potrà eseguire il comando solo dall'host "topolinia" e con le credenziali dell'utente topolino e del gruppo topolino. Non verrà chiesta la password.
Le uniche parti obbligatorie sono:<br/>
Le uniche parti obbligatorie sono:<br/>
- L'utente a cui è consentito eseguire sudo<br/>
- L'utente a cui è consentito eseguire <code>sudo</code><br/>
- L'host da cui si esegue sudo<br/>
- L'host da cui si esegue <code>sudo</code><br/>
- Il carattere "="<br/>
- Il carattere "="<br/>
- Il path assoluto del comando da eseguire<br/>
- Il path assoluto del comando da eseguire<br/>
Riga 329: Riga 339:


=== Chi ===
=== Chi ===
La prima parola indica chi può eseguire sudo. Questa può essere uno username, un gruppo (preceduto da %), un netgroup (preceduto da "+") o un alias di tipo User_Alias.<br/>
La prima parola indica chi può eseguire <code>sudo</code>. Questa può essere uno username, un gruppo (preceduto da %), un netgroup (preceduto da "+") o un alias di tipo User_Alias.<br/>
Quindi se:
Quindi se:
<pre>
<pre>
Riga 350: Riga 360:
<pre>$ sudo comando4</pre>
<pre>$ sudo comando4</pre>


Di default a tutti viene chiesta la propria password. Nel caso l'utente non sia abilitato ad eseguire un comando con sudo:
Di default a tutti viene chiesta la propria password. Nel caso l'utente non sia abilitato ad eseguire un comando con <code>sudo</code>:
<pre>Sorry, user nomeutente is not allowed to execute comando as root on nomehost.</pre>
<pre>Sorry, user nomeutente is not allowed to execute comando as root on nomehost.</pre>
Come si vede chiaramente, di default sudo cerca di eseguire il comando con i permessi di root (che è poi il compito per cui viene utilizzato).
Come si vede chiaramente, di default <code>sudo</code> cerca di eseguire il comando con i permessi di root (che è poi il compito per cui viene utilizzato).


Un esempio funzionante è il seguente:
Un esempio funzionante è il seguente:
Riga 361: Riga 371:


=== Da dove ===
=== Da dove ===
La seconda parola specifica il nome dell'host da cui è permesso eseguire sudo. Possono essere specificati anche indirizzi IP o indirizzi di rete con submask. Vedi ...<br/>
La seconda parola specifica il nome dell'host da cui è permesso eseguire <code>sudo</code>. Possono essere specificati anche indirizzi IP o indirizzi di rete con submask.<br/>
La parola "ALL" indica che gli utenti potranno eseguire sudo da qualsiasi host.<br/>
La parola "ALL" indica che gli utenti potranno eseguire <code>sudo</code> da qualsiasi host.<br/>
Lo scopo di questa voce è chiaro, magari si vuol consentire a pippo di eseguire sudo solo da una macchina della rete locale:
Lo scopo di questa voce è chiaro, magari si vuol consentire a pippo di eseguire <code>sudo</code> solo da una macchina della rete locale:
<pre>pippo 192.168.1.80 = comando</pre>
<pre>pippo 192.168.1.80 = comando</pre>
A questo proposito è sempre opportuno specificare l'IP o l'host e non utilizzare la parola "ALL". Il nome dell'host si può ricavare con il comando:
A questo proposito è sempre opportuno specificare l'IP o l'host e non utilizzare la parola "ALL". Il nome dell'host si può ricavare con il comando:
Riga 373: Riga 383:
<pre>pippo pippohost = comando</pre>
<pre>pippo pippohost = comando</pre>


(TODO: permessi utente/gruppo tag comando)
=== Tag ===
I [[tag]] utilizzati da <code>sudo</code> precedono immediatamente il [[path]] assoluto del comando e sono separati da questo da un carattere di ":". Ad esempio:
utente host = '''TAG''':comando
Sono permessi più tag, in questo caso è necessario separarli con un carattere ":", ad esempio:
utente host = '''TAG1:TAG2''':comando
I tag consentiti sono dieci:
*PASSWD e NOPASSWD
*EXEC e NOEXEC
*SETENV e NOSETENV
*LOG_INPUT e NOLOG_INPUT
*LOG_OUTPUT e NOLOG_OUTPUT
Questi tag, come si può notare, compongono delle coppie duali in cui un tag della coppia può sovrascrivere una precedente impostazione creata dall'altro componente della coppia.
 
Dovrebbe essere facilmente intuibile l'assoluta inutilità, benché sia consentito farlo, di specificare tag duali sulla stessa riga. Ad esempio:
utente host = PASSWD:NOPASSWD:comando
Questa notazione è assolutamente identica a:
utente host = NOPASSWD:comando
in quanto il tag che crea l'impostazione sovrascrive l'impostazione creata dal tag duale. In questo caso, quindi, avrà effetto solo l'impostazione creata dal tag della coppia che viene scritto per ultimo.
<!--(TODO: permessi utente/gruppo comando)-->


== Opzioni ==
== Opzioni ==
'''lecture'''<br/>
'''lecture'''<br/>
Visualizza un avvertimento prima che un utente esegua un comando attraverso sudo. I possibili valori sono:<br/>
Visualizza un avvertimento prima che un utente esegua un comando attraverso <code>sudo</code>. I possibili valori sono:<br/>
always = l'avvertimento viene sempre visualizzato<br/>
- always: l'avvertimento viene sempre visualizzato<br/>
never = l'avvertimento non viene mai visualizzato<br/>
- never: l'avvertimento non viene mai visualizzato<br/>
once = l'avvertimento viene visualizzato solo la prima volta che un utente esegue sudo
- once: l'avvertimento viene visualizzato solo la prima volta che un utente esegue <code>sudo</code>


Di default l'avvertimento è:
Di default l'avvertimento è:
Riga 406: Riga 435:
</pre>
</pre>


'''passprompt (TODO: andata a capo)'''<br/>
'''passprompt<!--(TODO: andata a capo)-->'''<br/>
Permette di definire il prompt che verrà visualizzato alla richiesta password. Di default questo valore è impostato a:
Permette di definire il prompt che verrà visualizzato alla richiesta password. Di default questo valore è impostato a:
<pre>[sudo] password for %p: </pre>
<pre>[sudo] password for %p: </pre>
Riga 412: Riga 441:
-%H : il nome dell'host (FQDN)<br/>
-%H : il nome dell'host (FQDN)<br/>
-%h : host non FQDN<br/>
-%h : host non FQDN<br/>
-%p : l'utente la cui password viene richiesta (%p può essere diverso dall'utente che esegue sudo)<br/>
-%p : l'utente la cui password viene richiesta (%p può essere diverso dall'utente che esegue <code>sudo</code>)<br/>
-%U : l'utente con i cui permessi verrà eseguito il comando (di default è root)<br/>
-%U : l'utente con i cui permessi verrà eseguito il comando (di default è root)<br/>
-%u : l'utente che esegue il comando attraverso sudo<br/>
-%u : l'utente che esegue il comando attraverso <code>sudo</code><br/>
Ad esempio:
Ad esempio:
<pre>Defaults passprompt="%u sta utilizzando sudo su %H. Il comando verrà eseguito con i permessi di %U. Inserisci la password di %p"</pre>
<pre>Defaults passprompt="%u sta utilizzando <code>sudo</code> su %H. Il comando verrà eseguito con i permessi di %U. Inserisci la password di %p"</pre>


LOG<br/>
LOG<br/>
'''logfile'''<br/>
'''logfile'''<br/>
Per il file di log per sudo, di default, viene utilizzato <code>/var/log/syslog</code>. È sempre conveniente avere un log separato e specifico in cui leggere eventuali messaggi di errore (o minacce alla sicurezza del sistema attraverso sudo) senza rischiare di perderli nella lettura di un file di log più generale. Utilizzare [[logrotate]] per evitare che il file di log cresca troppo.<br/>
Per il file di log per <code>sudo</code>, di default, viene utilizzato <code>/var/log/syslog</code>. È sempre conveniente avere un log separato e specifico in cui leggere eventuali messaggi di errore (o minacce alla sicurezza del sistema attraverso <code>sudo</code>) senza rischiare di perderli nella lettura di un file di log più generale. Utilizzare [[logrotate]] per evitare che il file di log cresca troppo.<br/>
Creare il file di log:
Creare il file di log:
<pre># touch /var/log/sudo.log</pre>
<pre># touch /var/log/sudo.log</pre>
e poi, in /etc/sudoers :
e poi, in <code>/etc/sudoers</code> :
<pre>Defaults logfile="/var/log/sudo.log"
<pre>Defaults logfile="/var/log/sudo.log"</pre>


'''log_host'''<br/>
'''log_host'''<br/>
Nel file di log (diverso da syslog) viene specificato l'host. Di default questa opzione è disabilitata, per abilitarla:
Nel file di log (diverso da <code>syslog</code>) viene specificato l'host. Di default questa opzione è disabilitata, per abilitarla:
<pre>Defaults log_host</pre>
<pre>Defaults log_host</pre>


Riga 445: Riga 474:


'''log_input'''<br/>
'''log_input'''<br/>
Tutti gli input dell'utente attraverso una sessione sudo verranno loggati nella directory <code>/var/log/sudo-io/</code>. Ciascun file di questa directory ha un nome univoco in base al TSID (Terminal Session ID).<br/>
Tutti gli input dell'utente attraverso una sessione <code>sudo</code> verranno loggati nella directory <code>/var/log/sudo-io/</code>. Ciascun file di questa directory ha un nome univoco in base al TSID (Terminal Session ID).<br/>
Questa opzione è disabilita di default. Per abilitarla:
Questa opzione è disabilitata di default. Per abilitarla:
<pre>Defaults log_input</pre>
<pre>Defaults   log_input</pre>
TUTTI gli input degli utenti saranno loggati in chiaro, anche le password eventualmente digitate durante una sessione sudo. I log si trovano in <code>/var/log/sudo-io/nn/nn/nn/ttyin</code> in formato compresso (nn sono stringhe di numeri-cifre), ad esempio per leggere l'input della sessione con TSID=000001:
TUTTI gli input degli utenti saranno loggati in chiaro, anche le password eventualmente digitate durante una sessione <code>sudo</code>. I log si trovano in <code>/var/log/sudo-io/nn/nn/nn/ttyin</code> in formato compresso (nn sono stringhe di numeri-cifre), ad esempio per leggere l'input della sessione con TSID=000001:
<pre># zless /var/log/sudo-io/00/00/01/ttyin</pre>
<pre># zless /var/log/sudo-io/00/00/01/ttyin</pre>


'''log_output (TODO:CAMBIARE LA DATA)'''<br/>
'''log_output<!--(TODO:CAMBIARE LA DATA)-->'''<br/>
Tutti i messaggi visualizzati a schermo in una sessione sudo saranno loggati nella directory <code>/var/log/sudo-io/</code>, anche questi in base al TSID.<br/>
Tutti i messaggi visualizzati a schermo in una sessione <code>sudo</code> saranno loggati nella directory <code>/var/log/sudo-io/</code>, anche questi in base al TSID.<br/>
Questa opzione è disabilita di default. Per abilitarla:
Questa opzione è disabilitata di default. Per abilitarla:
<pre>Defaults log_output</pre>
<pre>Defaults log_output</pre>
Per visualizzare questi log si può utilizzare il comodo comando "sudoreplay" che permette di replicare esattamente tutto ciò che è stato visualizzato a schermo durante la sessione sudo.
Per visualizzare questi log si può utilizzare il comodo comando "sudoreplay" che permette di replicare esattamente tutto ciò che è stato visualizzato a schermo durante la sessione <code>sudo</code>.
Ad esempio, se si vuol vedere ciò che ha visto l'utente pippo (e quindi anche ciò che ha digitato se è stato stampato a schermo) durante la sessione TSID=nnnnnn, si può innanzitutto trovare il TSID (supponiamo che sia 000003):
Ad esempio, se si vuol vedere ciò che ha visto l'utente pippo (e quindi anche ciò che ha digitato se è stato stampato a schermo) durante la sessione TSID=nnnnnn, si può innanzitutto trovare il TSID (supponiamo che sia 000003):
<pre>
<pre>
Riga 467: Riga 496:
vedere:
vedere:
<pre>man sudoreplay</pre>
<pre>man sudoreplay</pre>
per ottenere maggiori informazioni sul funzionamento di sudoreplay.
per ottenere maggiori informazioni sul funzionamento di <code>sudoreplay</code>.
 
{{Box|Nota|Nel caso abbiate la possibilità di utilizzare <code>sudo</code> su una macchina diversa dalla vostra, informatevi sulle politiche adottate dall'amministratore della macchina remota in merito alla gestione dei log di <code>sudo</code>. In ogni caso prestate attenzione all'inserimento, in sessioni <code>sudo</code>, di password o di qualunque altra informazione sensibile.}}


PASSWORD<br/>
PASSWORD<br/>
'''authenticate'''<br/>
'''authenticate'''<br/>
L'utente deve inserire una password per poter utilizzare sudo (di default: la propria password). Questo comportamento può essere bypassato attraverso i tag PASSWD e NOPASSWD.<br/>
L'utente deve inserire una password per poter utilizzare <code>sudo</code> (di default: la propria password). Questo comportamento può essere bypassato attraverso i tag PASSWD e NOPASSWD.<br/>
Di default questa opzione è attiva. Per disabilitarla:
Di default questa opzione è attiva. Per disabilitarla:
<pre>Defaults !authenticate</pre>
<pre>Defaults !authenticate</pre>
Riga 491: Riga 522:


'''passwd_tries'''<br/>
'''passwd_tries'''<br/>
Di default è 3. Ciò vuol dire che si hanno tre tentativi per inserire correttamente la password prima che sudo termini con questo messaggio d'errore:
Di default è 3. Ciò vuol dire che si hanno tre tentativi per inserire correttamente la password prima che <code>sudo</code> termini con questo messaggio d'errore:
<pre>sudo: 3 incorrect password attempts</pre>
<pre>sudo: 3 incorrect password attempts</pre>
Questo valore può essere cambiato. Se si vogliono concedere cinque tentativi:
Questo valore può essere cambiato. Se si vogliono concedere cinque tentativi:
Riga 497: Riga 528:


'''passwd_timeout'''<br/>
'''passwd_timeout'''<br/>
È il numero di minuti trascorsi i quali il prompt di immissione della password viene chiuso. Di default questo valore è 0, cioè sudo rimane indefinitivamente in attesa della password.
È il numero di minuti trascorsi i quali il prompt di immissione della password viene chiuso. Di default questo valore è 0, cioè <code>sudo</code> rimane indefinitivamente in attesa della password.
Per chiudere il prompt dopo tre minuti:
Per chiudere il prompt dopo tre minuti:
<pre>Defaults passwd_timeout=3</pre>
<pre>Defaults passwd_timeout=3</pre>
Riga 505: Riga 536:
'''timestamp_timeout'''<br/>
'''timestamp_timeout'''<br/>
È il numero di minuti trascorsi i quali verrà nuovamente richiesta una password.<br/>
È il numero di minuti trascorsi i quali verrà nuovamente richiesta una password.<br/>
Di default questo valore è 15. Ciò vuol dire che, dal momento in cui si inserisce correttamente una password, passeranno quindici minuti senza che sudo la richieda ancora.
Di default questo valore è 15. Ciò vuol dire che, dal momento in cui si inserisce correttamente una password, passeranno quindici minuti senza che <code>sudo</code> la richieda ancora.<br/>
Per fare in modo che venga sempre richiesta la password ogni volta che si utilizza ''sudo'':
<pre>Defaults timestamp_timeout=0</pre>
Per evitare che venga richiesta la password:
<pre>Defaults timestamp_timeout=-1</pre>
o assegnare all'opzione un qualunque valore negativo.


'''badpass_message'''<br/>
'''badpass_message'''<br/>
Il messaggio che viene visualizzato quando si inserisce una password sbagliata. Di default è:
Il messaggio che viene visualizzato quando si inserisce una password sbagliata. Di default è:
<pre>Sorry, try again.</pre>
<pre>Sorry, try again.</pre>
Per cambiarla:
Per cambiarlo:
<pre>Defaults badpass_message="Password errata. Controlla che non sia stato premuto il tasto delle maiuscole."</pre>
<pre>Defaults badpass_message="Password errata. Controlla che non sia stato premuto il tasto delle maiuscole."</pre>


'''insults'''<br/>
'''insults'''<br/>
Se viene inserita una password sbagliata, verrà visualizzato un messaggio di "insulto" anziché il messaggio di errore di default o ciò che è definito in badpass_message.<br/>
Se viene inserita una password sbagliata, verrà visualizzato un messaggio di "insulto" anziché il messaggio di errore di default o ciò che è definito in "badpass_message".<br/>
I messaggi sono in inglese e non particolarmente offensivi; se volete messaggi in italiano o volete andarci giù pesante con le offese, ricompilatevi sudo con le modifiche apportate.
I messaggi sono in inglese e non particolarmente offensivi; se volete messaggi in italiano o volete andarci giù pesante con le offese, ricompilatevi <code>sudo</code> con le modifiche apportate.
Di default questa opzione è disabilitata. Per abilitarla:
Di default questa opzione è disabilitata. Per abilitarla:
<pre>Defaults insults</pre>
<pre>Defaults insults</pre>


'''pwfeedback'''<br/>
'''pwfeedback'''<br/>
Attiva il feedback per ogni tasto premuto durante l'inserimento della password. Tipicamente un asterisco. (TODO: come è impostato?)
Attiva il feedback per ogni tasto premuto durante l'inserimento della password. Tipicamente un asterisco.<!--(TODO: come è impostato?)-->
<pre>[sudo] password for pippo: *******</pre>
<pre>[sudo] password for pippo: *******</pre>
Per impostare questa opzione:
Per impostare questa opzione:
Riga 528: Riga 564:


'''rootpw'''<br/>
'''rootpw'''<br/>
Con questa opzione viene chiesta la password di root anziché la password dell'utente che esegue sudo.<br/>
Con questa opzione viene chiesta la password di root anziché la password dell'utente che esegue <code>sudo</code>.<br/>
Di default è disabilitata ed è fortemente sconsigliato abilitarla; sudo viene utilizzato proprio per evitare di digitare la password di root.
Di default è disabilitata ed è fortemente sconsigliato abilitarla; <code>sudo</code> viene utilizzato proprio per evitare di digitare la password di root.


'''listpw'''<br/>
'''listpw'''<br/>
Controlla la richiesta della password quando un utente esegue il comando:
Controlla la richiesta della password quando un utente esegue il comando:
<pre>$ sudo -l</pre>
<pre>$ sudo -l</pre>
- all: la password non viene chiesta solo se tutte le entries che riguardano l'utente contengono il tag NOPASSWD<br/>
;all:la password non viene chiesta solo se tutte le entries che riguardano l'utente contengono il tag NOPASSWD<br/>
. any: la password non viene chiesta solo se almeno una entries che riguarda l'utente contiene il tag NOPASSWD<br/>
;any:la password non viene chiesta solo se almeno una entries che riguarda l'utente contiene il tag NOPASSWD<br/>
- always: la password viene sempre chiesta<br/>
;always:la password viene sempre chiesta<br/>
- never: la password non viene mai chiesta. "listpw=never" è equivalente a "!listpw"<br/>
;never:la password non viene mai chiesta. "listpw=never" è equivalente a "!listpw"<br/>


Esempio1
Esempio1
Riga 552: Riga 588:


Esempio2
Esempio2
Come il precedente ma con listpw=all . Questa volta la password viene chiesta perché non tutte le entries hanno il tag NOPASSWD.
Come il precedente ma con "listpw=all" . Questa volta la password viene chiesta perché non tutte le entries hanno il tag NOPASSWD.
<pre>Defaults listpw=all
<pre>Defaults listpw=all
pippo ALL = NOPASSWD:/usr/bin/tail /var/log/syslog
pippo ALL = NOPASSWD:/usr/bin/tail /var/log/syslog
Riga 560: Riga 596:
[sudo] password for pippo:
[sudo] password for pippo:
</pre>  
</pre>  
Il valore di default per questa opzione è "any". Il valore "never" può essere utilizzato dagli amministratori per impedire che, senza l'inserimento di una password, qualcuno possa risalire ai comandi eseguibili da un utente attraverso sudo.
Il valore di default per questa opzione è "any". Il valore "always" può essere utilizzato dagli amministratori per impedire che, senza l'inserimento di una password, qualcuno possa risalire ai comandi eseguibili da un utente attraverso <code>sudo</code>.


'''verifypw'''<br/>
'''verifypw'''<br/>
Riga 567: Riga 603:
Il valore di default è "all".
Il valore di default è "all".


EMAIL /DA CONTROLLARE CON ESEMPI CONCRETI
EMAIL<br/>
'''mailsub'''<br/>
'''mailsub'''<br/>
È il soggetto dell'email che verrà inviata in base ai criteri impostati. Di default è:
È il soggetto dell'email che verrà inviata in base ai criteri impostati. Di default è:
<pre>* * * SECURITY information for %h * * *</pre>
<pre>* * * SECURITY information for %h * * *</pre>
(TODO: gli escpape %)
<!--(TODO: gli escpape %)-->


'''mailto'''<br/>
'''mailto'''<br/>
L'indirizzo di posta a cui verrà inviata l'email. Racchiudere tra doppie virgolette se contiene il carattere @ . Di default l'email viene inviata a root.
L'indirizzo di posta a cui verrà inviata l'email. Racchiudere tra doppie virgolette se contiene il carattere @ . Di default l'email viene inviata a root.
(TODO: posta locale)
<!--(TODO: posta locale)-->


'''mailfrom'''<br/>
'''mailfrom'''<br/>
L'indirizzo da cui verrà inviata l'email. Di default è l'indirizzo dell'utente che esegue sudo.
L'indirizzo da cui verrà inviata l'email. Di default è l'indirizzo dell'utente che esegue <code>sudo</code>.
(TODO)
<!--(TODO)-->


'''mailerpath'''<br/>
'''mailerpath'''<br/>
Riga 589: Riga 625:


'''mail_always'''<br/>
'''mail_always'''<br/>
Viene inviata una email ogni volta che un utente esegue sudo. Di default questa opzione è disabilitata. Per abilitarla:
Viene inviata una email ogni volta che un utente esegue <code>sudo</code>. Di default questa opzione è disabilitata. Per abilitarla:
<pre>Defaults mail_always</pre>
<pre>Defaults mail_always</pre>


Riga 597: Riga 633:


'''mail_no_host'''<br/>
'''mail_no_host'''<br/>
Viene inviata una email se l'utente è abilitato ad eseguire sudo ma non sull'host specificato. Questa opzione è disabilitata di default. Per abilitarla:
Viene inviata una email se l'utente è abilitato ad eseguire <code>sudo</code> ma non sull'host specificato. Questa opzione è disabilitata di default. Per abilitarla:
<pre>Defaults mail_no_host</pre>
<pre>Defaults mail_no_host</pre>
Esempio:
Esempio:
<pre>Defaults mail_no_host
<pre>Defaults mail_no_host
pippo localhost = /usr/bin/tail /var/log/kern.log_host
pippo localhost = /usr/bin/tail /var/log/kern.log_host
</pre>
</pre>
L'email verrà inviata se l'utente pippo si collegherà dall'host sds.dsds.sds e proverà ad eseguire:
L'email verrà inviata se l'utente pippo si collegherà da remoto (quindi non su "localhost") e proverà ad eseguire:
<pre>$ sudo /usr/bin/tail /var/log/kern.log</pre>
<pre>$ sudo /usr/bin/tail /var/log/kern.log</pre>


'''mail:no_perms'''<br/>
'''mail_no_perms'''<br/>
Viene inviata una email se l'utente ha i permessi di eseguire comandi attraverso sudo ma cerca di eseguire altri comandi non consentiti. Di default questa opzione è disabilitata.
Viene inviata una email se l'utente ha i permessi di eseguire comandi attraverso <code>sudo</code> ma cerca di eseguire altri comandi non consentiti. Di default questa opzione è disabilitata.
Per abilitarla:
Per abilitarla:
<pre>Defaults mail_no_perms</pre>
<pre>Defaults mail_no_perms</pre>
Riga 616: Riga 652:
Verrà inviata una email se pippo prova a:
Verrà inviata una email se pippo prova a:
<pre>$ sudo /usr/bin/tail /var/log/syslog</pre>
<pre>$ sudo /usr/bin/tail /var/log/syslog</pre>
ma non se pippo prova ad eseguire lo stesso comando ma con sudoers impostato in questo modo:
ma non se pippo prova ad eseguire lo stesso comando ma con <code>sudoers</code> impostato in questo modo:
<pre>Defaults mail_no_perms
<pre>Defaults mail_no_perms
pluto ALL : /usr/bin/tail /var/log/kern.log
pluto ALL : /usr/bin/tail /var/log/kern.log
Riga 623: Riga 659:


'''mail_no_user'''<br/>
'''mail_no_user'''<br/>
Viene inviata una email se l'utente che esegue sudo non è presente nel file sudoers. Questa opzione è abilitata di default. Per disabilitarla (sconsigliato):
Viene inviata una email se l'utente che esegue <code>sudo</code> non è presente nel file <code>sudoers</code>. Questa opzione è abilitata di default. Per disabilitarla (sconsigliato):
<pre>Defaults !mail_no_user</pre>
<pre>Defaults !mail_no_user</pre>
L'esempio è il contrario dell'esempio precedente:
L'esempio è il contrario dell'esempio precedente:
Riga 633: Riga 669:
Ma non se pippo prova ad eseguire il comando:
Ma non se pippo prova ad eseguire il comando:
<pre>$ sudo /usr/bin/tail /var/log/syslog</pre>
<pre>$ sudo /usr/bin/tail /var/log/syslog</pre>
a meno che non sia abilitata mail_no_perms .
a meno che non sia abilitata "mail_no_perms" .


È opportuno, almeno all'inizio, abilitare tutte queste opzioni:
È opportuno, almeno all'inizio, abilitare tutte queste opzioni:
<pre>Defaults mail_always, mail_badpass, mail_no_host, mail_no_perms</pre>
<pre>Defaults mail_always, mail_badpass, mail_no_host, mail_no_perms</pre>
in modo da rendersi conto di come viene utilizzato sudo dagli utenti della propria rete e, quindi, apportare le opportune correzioni.
in modo da rendersi conto di come viene utilizzato <code>sudo</code> dagli utenti della propria rete e, quindi, apportare le opportune correzioni.
 
<!--
PATH & ENVIRONMENT VARIABLES
PATH & ENVIRONMENT VARIABLES
Qui verrà trattato un aspetto particolarmente importante legato alla sicurezza: le variabili d'ambiente.
Qui verrà trattato un aspetto particolarmente importante legato alla sicurezza: le variabili d'ambiente.
Riga 649: Riga 685:


Facciamo un esempio.
Facciamo un esempio.
Supponiamo che l'utente gambadilegno abbia una variabile d'ambiente così definita nel proprio .bashrc :
Supponiamo che l'utente gambadilegno abbia una variabile d'ambiente così definita nel proprio .bashrc : -->


== Esempi ==
== Esempi ==
In questo paragrafo saranno raccolti gli esempi che descrivono come utilizzare <code>sudo</code> per compiti specifici e che possono essere di qualche utilità per l'utente.<br/>
Queste operazioni non sono obbligatorie e vanno vagliate e adattate con attenzione alle proprie esigenze per evitare di aprire falle di sicurezza del sistema.
Si ricorda che:
* Il nome del proprio host può essere ricavato attraverso il comando "hostname"
* Il [[path]] del comando va trovato con "whereis -b comando". Ad esempio:<pre>$ whereis -b less &#10;less: /bin/less /usr/bin/less /usr/bin/X11/less</pre>
=== Modificare file ===
=== Modificare file ===
La modifica di file di sistema (normalmente riservata a root) è sicuramente il compito più diffuso per cui viene utilizzato <pre>sudo</pre>.<br/>
La modifica di file di sistema (normalmente riservata a root) è sicuramente il compito più diffuso per cui viene utilizzato <code>sudo</code>.<br/>
Con questa configurazione utilizzeremo "sudoedit" per la modifica dei file di sistema utilizzando il nostro [[Impostare l'editor predefinito della shell|editor di default]].
Con questa configurazione utilizzeremo "sudoedit" per la modifica dei file di sistema utilizzando il nostro [[Impostare l'editor predefinito della shell|editor di default]].
<pre>
<pre>
Riga 708: Riga 751:
<pre>
<pre>
$ sudo -g adm less /var/log/syslog
$ sudo -g adm less /var/log/syslog
</pre>
Questo secondo metodo può essere molto utile nel caso in cui l'utente a cui vengono concessi i permessi di lettura non si trovi a particolare agio con "less" ma voglia utilizzare un editor. In questo caso è opportuno che l'utente esegua il comando con i permessi del gruppo "adm" e che, quindi, non abbia la possibilità di modificare i file letti.<br/>
Un esempio potrebbe essere:
<pre>
...
Cmnd_Alias LETTURALOG = sudoedit /var/log/messages, \
                        sudoedit /var/log/kern.log, \
                        sudoedit /var/log/syslog
pippo miolocalhost = (:adm) NOPASSWD:NOEXEC:LETTURALOG
...
</pre>
e il conseguente comando permesso attraverso <code>sudo</code> per leggere, ad esempio, il file <code>/var/log/messages</code> sarà:
<pre>
$ sudoedit -g adm /var/log/messages
</pre>
</pre>


Riga 727: Riga 785:
$ sudo apt-get update
$ sudo apt-get update
</pre>
</pre>
{{Autori
|Autore = [[Utente:S3v|S3v]]
}}
[[Categoria: Programmi da terminale]]
3 581

contributi

Menu di navigazione