Sudo

Sudo in sintesi

apt-get install sudo

la configurazione è in /etc/sudoers.
Se si aggiunge la linea

nomeutente ALL=(ALL) ALL

l'utente potrà eseguire comandi da root
sudo command

Oppure si può lanciare una shell da super user

sudo bash

Per i gruppi invece

%admin ALL=(ALL) ALL

l'appartenenti al gruppo admin possono compiere qualsiasi operazione

Sudo nel dettaglio

Sudo Micro-HOWTO
ho preso questa guida da http://spazioinwind.libero.it/stefko5/Tips/tip3-it.html

Il programma "sudo" permette di eseguire dei programmi che normalmente vengono eseguiti da root anche da utenti "normali". Il suo file di configurazione è /etc/sudoers. Vediamo come configurarlo per ottenere risultati utili.

Si utilizza (almeno con la Slackware…) visudo per modificare questo file. Una volta eseguito questo comando verrà richiamato l'editor specificato nella variabile EDITOR o (se non è impostato nessun valore in questa) nella variabile VISUAL. Probabilmente verrà richiamato vi. Usciti dall'editor verrà avviata una procedura di checking della sintassi, e se il file non è stato modificato correttamente verrà visualizzato un errore e verrà posta la domanda "What now?" Consiglio di scrivere "help" e leggere le varie opzioni messe a disposizione. In linea di massima dovrete premere "e" e rieditare il file.

All'interno di questo file si dovranno specificare prima gli alias (meglio: insiemi) di computers da autorizzare all'esecuzione dei programmi, poi gli insiemi di utenti da autorizzare, poi gli insiemi di programmi da utilizzare, ed infine si dovranno associare questi insiemi ad ogni singolo utente (o gruppo di utenti).

Vediamo il seguente file ed analizziamolo riga per riga:

  1. sudoers file.

#

  1. This file MUST be edited with the 'visudo' command as root.

#

  1. See the man page for the details on how to write a sudoers file.

#

  1. Host alias specification
  2. Permetterà di utilizzare l'host darkstar chiamandolo LO nelle righe di
  3. definizione dei comandi dei singoli utenti.

Host_Alias LO=darkstar

  1. User alias specification
  2. Permette di reggruppare sotto uno stesso nome un insieme di utenti

User_Alias MIOGRUPPO=nando,emma,franco

  1. Cmnd alias specification
  2. Permette di raggruppare la lista di comandi halt e shutdown
  3. all'interno dell'insieme SHUTDOWN e i comandi rm e cat nell'insieme MISC

Cmnd_Alias SHUTDOWN=/sbin/halt,/sbin/shutdown
Cmnd_Alias MISC=/bin/rm,/bin/cat

  1. User privilege specification
  2. Queste sono le righe che associano i comandi ai singoli utenti:
  3. Ovviamente root può tutto!

root ALL=(ALL) ALL

  1. L'utente stefano può utilizzare i comandi dell'insieme SHUTDOWN dall'host
  2. LO senza dover inserire alcuna password

stefano LO=SHUTDOWN,NOPASSWD: ALL

  1. L'utente pasquale può utilizzare i comandi dell'insieme SHUTDOWN dall'host
  2. LO, ma deve inserire la propria password al quando sudo glie la richiederà.

pasquale LO=SHUTDOWN

  1. Gli utenti del gruppo MIOGRUPPO possono utilizzare i comandi dell'insieme
  2. MISC ma NON quelli dell'insieme SHUTDOWN

MIOGRUPPO LO=MISC, !SHUTDOWN

Il file ora mostrato permette di far eseguire agli utenti stefano e pasquale il programma shutdown senza doverlo "suidare".

L'utente stefano per spegnere la macchina potrà scrivere:

$ sudo shutdown -h now

E verrà avviata la procedura di shutdown.

L'utente pasquale per spegnere la macchina potrà scrivere:

$ sudo shutdown -h now

Ma gli verrà richiesta la sua password prima di eseguire questo programma.

Gli utenti nando, emma e franco potranno eseguire rm e cat, ma non potranno spegnere la macchina, ed in più gli verrà richiesta la password prima di eseguire questi comandi.

Queste sono le basi per capire come impostare delle politiche di utilizzo di particolari programmi che solo il root può eseguire. E' altamente consigliata la lettura della pagina di man (5) di sudo.

Grazie a
Stefano Falsetto
Last modified: lun set 16 17:45:44 CEST 2002

Esempi

Un esempio per fare eseguire ad apache uno script con privilegi amministrativi , preso da un tool per l'interfaccia di openvpn.
Da aggiungere in sudoers

www-data ALL=NOPASSWD:/home/openvpn/scripts/install-local.sh

Esempio per eseguire cose di un altro utente

useralfa ALL=(ALL)  NOPASSWD: /bin/su - userbeta
useralfa ALL=(ALL)  NOPASSWD: /bin/su - userbeta

Un buon esempio di sudoesr con privilegi minimi e gruppi con alias

Cmnd_Alias WEBSTART = /usr/local/apache/bin/apachectl start
Cmnd_Alias WEBSTOP  = /usr/local/apache/bin/apachectl stop
Cmnd_Alias TOMSTART = /usr/local/tomcat1/bin/startup.sh
Cmnd_Alias TOMSTOP  = /usr/local/tomcat1/bin/shutdown.sh
Cmnd_Alias RMWORK  = /bin/rm -rf /usr/local/tomcat1/work/*
Cmnd_Alias MKOPT  = /bin/mkdir /opt
utentealfa ALL=(ALL)  NOPASSWD: WEBSTART
utentealfa ALL=(ALL)  NOPASSWD: WEBSTOP
utentealfa ALL=(ALL)  NOPASSWD: TOMSTART
utentealfa ALL=(ALL)  NOPASSWD: TOMSTOP
utentealfa ALL=(ALL)  NOPASSWD: RMWORK
utentealfa ALL=(ALL)  NOPASSWD: MKOPT
utentebeta ALL=(ALL)  NOPASSWD: WEBSTART
utentebeta ALL=(ALL)  NOPASSWD: WEBSTOP
utentebeta ALL=(ALL)  NOPASSWD: TOMSTART
utentebeta ALL=(ALL)  NOPASSWD: TOMSTOP
utentebeta ALL=(ALL)  NOPASSWD: RMWORK
utentegamma ALL=(ALL)  NOPASSWD: WEBSTART
utentegamma ALL=(ALL)  NOPASSWD: WEBSTOP
utentegamma ALL=(ALL)  NOPASSWD: TOMSTART
utentegamma ALL=(ALL)  NOPASSWD: TOMSTOP
utentegamma ALL=(ALL)  NOPASSWD: RMWORK

sudoers.d

the best way is put the permission inside the sudoers.d directory
this permit to user giuseppe to avoid the autentication

echo "giuseppe ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/giuseppe  
chmod 440 /etc/sudoers.d/giuseppe
Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License