Mémo sudo


« sudo » Permet de déléguer certaines tâches d’administrations sans laisser un accès complet à une machine. L’utilisateur autorisé pourra exécuter un certain nombre de commandes définies par l’administrateur.

Paramétrage de base

La configuration de « sudo » s’effectue dans « /etc/sudoers ». Le fichier est en lecture seule par défaut mais peut être édité par « root » avec l’utilitaire « /usr/sbin/visudo » qui incorpore une vérification syntaxique du fichier.

mafalda ~ # cat /etc/sudoers
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
...
root    ALL=(ALL) ALL
...

La syntaxe d’une entrée est du type :

utilisateur(s)  machine(s)=(< utilisateur effectif >) commande(s)

où :

  • utilisateur(s) : définit les utilisateurs ou groupes ciblés ;
  • machine(s) : définit les machines sur lequelles s’appliquent cette règles ;
  • utilisateur effectif : est l’utilisateur ou les utilisateurs dont l’identité pourra être endossée ;
  • commande(s) : est la ou les commandes autorisées.

Le premier champ ne laisse aucun doute sur son utilité :

fhh       ALL=(ALL) ALL
%wheel    ALL=(ALL) ALL
+admins   ALL=(ALL) ALL

donne à l’utilisateur « fhh », aux membres du groupe « wheel » et aux membres du netgroupe « admins », tous les droits administrateur sur toutes les machines contenant CE fichier « sudoers ».

Le champ machine(s) est destiné à créer un fichier de configuration générique déployé sur un ensemble de machine :

fhh       mafalda.=(ALL) ALL
%wheel    srv=(ALL) ALL
+admins   backup=(ALL) ALL

Un fichier tel que celui ci déployé sur les machines mafalda.rez0.lan, srv.rez0.lan, backup.rez0.lan donnera les autorisations « root » :

  • à l’utilisateur « fhh » uniquement sur « mafalda »,
  • aux membres du groupe « wheel » sur « srv »,
  • aux membres du netgroupe « admins » sur « backup ».

Le paramètre suivant, mis entre parenthèse, définit l’utilisateur effectif pouvant effectuer une commande. Par exemple :

fhh       mafalda=(apache,mysql) ALL

permet à fhh d’endosser l’identité d' »apache » ou de « mysql » pour effectuer toutes les commandes souhaitées :

fhh@mafalda ~ $ sudo -u apache touch /tmp/test.apache
Password:
fhh@mafalda ~ $ ls -al /tmp/
...
-rw-r--r--  1 apache apache     0 2009-10-08 13:09 test.apache
fhh@mafalda ~ $ sudo -u ldap touch /tmp/test.ldap
Sorry, user fhh is not allowed to execute '/bin/touch /tmp/test.ldap' as ldap on mafalda.

Enfin le dernier paramètre permet de spécifier toutes les commandes autorisées en tant qu’utilisateur définit précédemment (entre parenthèse) :

fhh     mafalda=(ALL) /etc/init.d/apache2 reload

Dans cet exemple l’utilisateur « fhh » est seulement autorisé à recharger la configuration d’apache :

fhh@mafalda ~ $ sudo /etc/init.d/apache2 reload
 * Caching service dependencies ...  [ ok ]
 * Gracefully restarting apache2 ...  [ ok ]
fhh@mafalda ~ $ sudo /etc/init.d/apache2 restart
Sorry, user fhh is not allowed to execute '/etc/init.d/apache2 restart' as root on mafalda.
fhh@mafalda ~ $ sudo /etc/init.d/apache2 stop
Sorry, user fhh is not allowed to execute '/etc/init.d/apache2 stop' as root on mafalda.

Note : Si le paramètre entre parenthèse est oublié, il est immédiatement assimilé à « (ALL) » .

Il est possible de donner les droits d’endossement de plusieurs personnes pour des commandes différentes sur une seule ligne :

fhh     srv=(apache) ALL, (root) /usr/bin/su apache

ici, « fhh » peut, sur « srv » effectuer toutes les commandes qu’il souhaite sous l’identité d' »apache » et en « root », il ne pourra qu’effectuer un « su apache ».

La déclaration des commandes autorise quelques « wildcards » (caractères de substitution), ainsi :

fhh     mafalda=(ALL) /etc/init.d/apache2 re*

donne à l’exécution :

fhh@mafalda ~ $ sudo /etc/init.d/apache2 restart
Password:
 * Stopping apache2 ...  [ ok ]
 * Starting apache2 ...  [ ok ]
fhh@mafalda ~ $ sudo /etc/init.d/apache2 reload
 * Gracefully restarting apache2 ...  [ ok ]
fhh@mafalda ~ $ sudo /etc/init.d/apache2 stop
Sorry, user fhh is not allowed to execute '/etc/init.d/apache2 stop' as root on mafalda.

Utilisation des alias

Sudo permet l’utilisation de quatre types d’alias dans le fichier « sudoers » pour

  • l’énumération d’utilisateurs,
  • de liste de machines,
  • d’utilisateurs cible
  • ou de commandes.
User_Alias  ADMINISTRATEURS=fhh,jmarc,paul
User_Alias  WEBMASTERS=fhh,paul
 
Host_Alias  WEBSERVERS=srv,webserver
 
Runas_Alias  WEBUSERS=apache,mysql
 
Cmnd_Alias  WEBUTILITIES=/etc/init.d/apache2 reload,/etc/init.d/mysql reload

qui donne les règles sudoers suivante :

WEBMASTERS  WEBSERVERS=(WEBUSERS)  WEBUTILITIES
ADMINISTRATEURS  WEBSERVERS=(ALL)  ALL

Comportement par défaut

Il est possible de définir quelques paramètres par défaut de sudo :

Defaults               syslog=auth
Defaults:fhh       !authenticate
Defaults@WEBSERVERS       log_year, logfile=/var/log/sudo.log
Defaults>root          !set_logname

« sudo » Loguera au niveau « auth » dans syslog. « fhh » N’aura pas besoin de saisir son mot de passe lors de l’appel de « sudo ». Un fichier de log additionnel des commandes « sudo » sera conservé sur les machines de l’alias « WEBSERVERS ». Enfin les variables LOGNAME, USER et USERNAME ne seront pas réinitialisée lors de l’appel de « sudo » par « root ».

TAG spéciaux

« sudo » autorise l’utilisation de TAG spéciaux :

  • PASSWD et NOPASSWD : obligent ou non à saisir un mot de passe lors de l’appel de « sudo » par un utilisateur autorisé ;
  • NOEXEC and EXEC : désactive ou active les échappements shell.
  • Exemple :

    Cmnd_Alias     PAGERS = /usr/bin/more,/usr/bin/less,/usr/bin/vi
     
    %privileges  mafalda=(ALL)  NOEXEC:  PAGERS

    permet l’utilisation des visualiseurs de page « more », « vi » et « less » mais n’autorisent pas les accès au shell.

  • SETENV and NOSETENV : active ou non l’importation des variables d’environnement pour l’exécution d’une commande.

Paramètres supplémentaires

Le fichier « sudoers » autorise une multitude d’autres options pour « sudo ». Par exemple :

Defaults mailfrom=sudo@mafalda.rez0.lan
Defaults mailto=admin@rez0.lan
Defaults mailsub="*** Un petit malin utilise SUDO sur %h ***"
Defaults mail_always
Defaults lecture=always
Defaults editor=/usr/bin/vi
Defaults lecture_file=/etc/sudo.txt
Defaults timestamp_timeout=5
Defaults passprompt="Mot de passe de %u : "

envois un mail provenant de « sudo@mafalda.rez0.lan » et ayant comme sujet « *** Un petit malin utilise SUDO sur mafalda *** » à « admin@rez0.lan » à chaque appel de « sudo ». Bien sûr en cas d’utilisation fréquente de « sudo », vous préfèrerez sans doute une valeur du type :

  • mail_no_user : l’utilisateur n’est pas dans le fichier « sudoers » ;
  • mail_no_perms : la commande n’est pas autorisée à cet utilisateur ;
  • mail_no_host : la commande est autorisée à cet utilisateur, mais depuis une autre machine ;
  • mail_badpass : l’utilisateur à saisi un mauvais mot de passe.

« lecture always » affichera un message d’avertissement (ici redéfinit dans le fichier associé à « lecture_file ») à chaque appel à « sudo ». « timestamp_timeout » définit le temps pendant lequel l’authentification reste valide tandis que « passprompt » définit la chaine de caractère affichée pour la demande du mot de passe. Enfin « editor » fixe l’éditeur de texte utilisé par « visudo ».

A l’execution d’une commande via « sudo », nous obtenons :

fhh@asus:~$ sudo ls /
Vous entrez en mode élévation de droits par l'utilitaire sudo.
 
Mot de passe de fhh :

Appel de « sudo »

L’appel de la fonction sudo autorise différentes options. La plus courante, déja aperçue plus haut est le « -u » désignant l’identité à endosser pour l’execution de la fonction suivante :

fhh@mafalda ~ $ sudo -u apache touch /tmp/test.apache
fhh@mafalda ~ $ ls -al /tmp/test.apache
-rw-r--r--  1 apache apache     0 2009-10-08 13:09 test.apache

Références

man sudo : http://www.sudo.ws/sudo/man/sudo.html
man sudoers : http://www.gratisoft.us/sudo/man/sudoers.html

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *