Sudo

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Élévation de privilèges
Fichiers /etc/sudoers, /etc/sudoers.d/*
Commandes sudo, visudo
Contexte Linux (toutes distributions) — délégation contrôlée de droits root
Voir aussi PAM (authentification du service sudo)

sudo (substitute user do) permet d'exécuter une commande avec les privilèges d'un autre utilisateur — le plus souvent root — sans partager le mot de passe de ce compte. Les autorisations sont décrites dans /etc/sudoers (et les fichiers inclus sous /etc/sudoers.d/), ce qui permet d'accorder des droits fins et auditables plutôt qu'un accès root complet et anonyme.

Vérifier ses droits

sudo -l          # liste les commandes autorisées en sudo pour l'utilisateur courant

Obtenir un shell root

sudo -s          # ouvre un shell root en conservant l'environnement de l'utilisateur courant
sudo -i          # ouvre un shell root de connexion (environnement root complet, comme un login direct)

sudo -s dépanne notamment quand le mot de passe root a été perdu : tant qu'un compte dispose des droits sudo, il peut ouvrir un shell root sans jamais saisir le mot de passe de root lui-même. Si aucun compte n'a de droits sudo, il faut redémarrer la machine en mode single/rescue pour réinitialiser le mot de passe root directement.

Éditer /etc/sudoers

Ne jamais éditer /etc/sudoers avec un éditeur classique : visudo verrouille le fichier contre les écritures concurrentes et valide la syntaxe avant d'enregistrer, ce qui évite de se retrouver avec un fichier corrompu et plus aucun moyen d'obtenir les droits root pour le corriger.

sudo visudo

Pour choisir l'éditeur utilisé par visudo (ici vi) :

export EDITOR=/usr/bin/vi

Syntaxe du fichier sudoers

Ligne simple : autoriser un compte à lancer une liste de commandes précises, sans mot de passe.

confmach ALL=(ALL) NOPASSWD: /sbin/fdisk -l, /usr/sbin/dmidecode, /usr/sbin/vgdisplay, /bin/df, /bin/cat

Alias : pour un jeu de règles réutilisable, on peut nommer des groupes d'utilisateurs, de comptes cibles et de commandes.

User_Alias  UTILISATEURS_HABILITES = user1, user3
Runas_Alias EXEC_EN_TANT_QUE = user2
Cmnd_Alias  COMMANDES_AUTORISEES = /bin/ls, /bin/cat

UTILISATEURS_HABILITES ALL=(EXEC_EN_TANT_QUE) NOPASSWD: COMMANDES_AUTORISEES

Cette règle autorise user1 et user3 à exécuter /bin/ls et /bin/cat en tant que user2 (et non root), sans avoir à saisir de mot de passe. À l'usage :

sudo -u user2 /bin/cat /home/user1/.bashrc

Accès administratif complet à un utilisateur ou un groupe :

UserName  ALL=(ALL) ALL
%GroupName ALL=(ALL) ALL

Autoriser une seule commande précise, y compris ses arguments :

UserName localhost=/usr/sbin/shutdown -r now

Durée de validité du mot de passe saisi (timestamp) : par défaut sudo ne redemande pas le mot de passe pendant quelques minutes après une saisie réussie.

Defaults timestamp_timeout=1   # ne redemande pas le mot de passe pendant 1 minute
Defaults timestamp_timeout=0   # redemande le mot de passe à chaque commande

Points de sécurité à auditer

Une revue de /etc/sudoers (et de /etc/sudoers.d/) doit vérifier :

  • les permissions excessives — une règle trop large permet un usage détourné (accès à des fichiers ou commandes hors du périmètre prévu) ;
  • les chemins non sécurisés dans les commandes autorisées — un chemin relatif ou modifiable par l'utilisateur permet de substituer le binaire réellement exécuté ;
  • les directives #includedir/#include — les fichiers qu'elles chargent doivent être aussi bien protégés que /etc/sudoers lui-même, sinon ils offrent un contournement ;
  • les Cmnd_Alias personnalisés — vérifier que les commandes autorisées ne permettent pas d'obtenir indirectement un shell root ou d'éditer des fichiers sensibles ;
  • les journaux système — sudo journalise chaque invocation (par défaut via syslog/journald), à surveiller pour détecter un usage anormal ;
  • l'intention métier de chaque règle — une règle doit correspondre à un besoin identifié, pas à une facilité accordée « au cas où ».

Voir aussi

  • PAM — pile d'authentification utilisée par le service sudo
  • SSH — autre point d'entrée fréquemment combiné à sudo pour l'administration à distance