3 155
contributi
Wtf (discussione | contributi) |
Wtf (discussione | contributi) Nessun oggetto della modifica |
||
Riga 178: | Riga 178: | ||
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. | ||
== Specifiche == | |||
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 diversi parametri strutturati in questo modo: | |||
<pre>CHI HOST=(ALTRO_UTENTE:ALTRO_GRUPPO) EVENTUALI_TAG:COMANDO</pre> | |||
I parametri obbligatori sono: | |||
* '''CHI''', cioè il nome dell'utente linux cui è consentito eseguire <code>sudo</code> | |||
* '''HOST''', cioè il ''luogo'' da cui è permesso eseguire <code>sudo</code> | |||
* Il carattere <code>=</code> | |||
* '''COMANDO''', cioè il comando che ''CHI'' può eseguire, avendo cura di specificarlo dandone il percorso (''path'') assoluto (''/path/to/command''). | |||
I parametri facoltativi sono: | |||
* '''ALTRO_UTENTE''' e '''ALTRO_GRUPPO''' permettono di specificare con che nome utente e gruppo il comando dovrà essere eseguito. Omettere questi due parametri significa dire implicitamente al sistema che il comando deve essere eseguito con i privilegi di '''root''' (il comportamento desiderato nella maggior parte dei casi). Se però si decide di specificarli è necessario specificare entrambi i parametri come sopra indicato, ovvero racchiudendoli tra parentesi e separandoli col carattere <code>:</code>.. | |||
* '''EVENTUALI_TAG'''. Devono essere inseriti prima del comando a cui si applicano e separati da questo da un carattere <code>:</code> | |||
Di seguito un semplice esempio del tutto teorico: | |||
<pre>pippo topolinia = (topolino:topolino) NOPASSWD:/path/assoluto/del/comando</pre> | |||
Questa riga indica che l'utente pippo (CHI) potrà eseguire il comando solo dall'host "topolinia" e con le credenziali dell'utente topolino (ALTRO_UTENTE) e del gruppo topolino (ALTRO_GRUPPO) senza richiedere la password di pippo prima di eseguire il comando (NOPASSWD è proprio uno degli EVENTUALI_TAG che è possibile dichiarare). | |||
=== Chi === | |||
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: | |||
<pre> | |||
User_Alias DISNEY = cenerentola, biancaneve | |||
pippo ALL = comando | |||
%topolia ALL = comando2 | |||
+paperopoli ALL = comando3 | |||
DISNEY ALL = comando4 | |||
</pre> | |||
L'utente pippo può eseguire il comando: | |||
<pre>$ sudo comando</pre> | |||
L'utente topolino può eseguire: | |||
<pre>sudo comando2</pre> | |||
ma solo se fa parte del gruppo "topolinia".<br/> | |||
L'utente paperino può eseguire: | |||
<pre>$ sudo comando3</pre> | |||
ma solo se fa parte del gruppo di rete "paperopoli".<br/> | |||
Biancaneve e cenerentola possono eseguire: | |||
<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 <code>sudo</code>: | |||
<pre>Sorry, user nomeutente is not allowed to execute comando as root on nomehost.</pre> | |||
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: | |||
<pre>pippo ALL = /usr/bin/ifconfig -a</pre> | |||
con cui pippo può eseguire un comando che richiede i permessi di root: | |||
<pre>$ sudo ifconfig -a</pre> | |||
questo visualizzerà le interfacce di rete previo inserimento da parte di pippo della propria password. | |||
=== Da dove === | |||
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 <code>sudo</code> da qualsiasi host.<br/> | |||
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> | |||
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: | |||
<pre>$ hostname</pre> | |||
Ad esempio: | |||
<pre>$ hostname | |||
pippohost</pre> | |||
e la configurazione sarà: | |||
<pre>pippo pippohost = comando</pre> | |||
=== 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)--> | |||
== Alias == | == Alias == | ||
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. | 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. | ||
Riga 319: | Riga 401: | ||
se l'utente topolino fa parte del gruppo <code>adm</code>.<br/> | 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. | ||
== Opzioni == | == Opzioni == | ||
Riga 684: | Riga 684: | ||
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 == |
contributi