Sudo : Utiliser et paramétrer (sudoers)
Table des matières
sudo (abréviation de substitute user do) est une commande permettant à l'administrateur système d'accorder à certains utilisateurs (ou groupes d'utilisateurs) la possibilité de lancer une commande en tant qu'administrateur.
sudo s'utilise en ligne de commande, dans un terminal. Il permet de prendre les droits root pour exécuter une commande.
Le mot de passe demandé est celui de l'utilisateur qui a saisi sudo, ici adrien.
La commande sera exécutée si le mot de passe entré est correct et que l'utilisateur courant peut effectuer des tâches d'administration.
Le mot de passe est mémorisé par défaut pour une durée de 15 minutes.
Pendant ce laps de temps, on peut toujours saisir des commandes avec sudo mais le mot de passe ne sera pas demandé.
Il, par sécurité, on souhaite "oublier" le mot de passe mémorisé, on peut utiliser :
On peut ouvrir une "session root" avec sudo, via
Les autorisations pour utiliser sudo sont définies dans le fichier /etc/sudoers.
Pour l'éditer, il est préférable d'utiliser la commande suivante :
En effet, avec visudo, lors de l’enregistrement, l’outil nous indique s'il y a une erreur de syntaxe.
Le fichier qui se modifie est /etc/sudores mais il est possible de créer le nom de son choix dans le dossier /etc/sudoers.d !
Chaque ligne du fichier est structurée de cette façon :
On peut indiquer dans le fichier sudoers de ne pas utiliser de mot de passe pour certaines commandes (utile dans le cadre d'un script)
Voici un exemple avec un utilisateur (fonctionne aussi avec les groupes) :
Ici, la commande 1 est autorisée via sudo avec un mot de passe, commande2 est autorisée via sudo sans demande de mot de passe.
Autoriser apache à lancer la commande service avec sudo sans demande de mot de passe :
Autoriser l'utilisateur à exécuter toutes les commandes via sudo :
Autoriser adrien à exécuter toutes les commandes via sudo mais que sudo reboot ne demande pas le mot de passe (faire 2 lignes) :
Introduction
sudo (abréviation de substitute user do) est une commande permettant à l'administrateur système d'accorder à certains utilisateurs (ou groupes d'utilisateurs) la possibilité de lancer une commande en tant qu'administrateur.
Utiliser sudo
sudo s'utilise en ligne de commande, dans un terminal. Il permet de prendre les droits root pour exécuter une commande.
Le mot de passe demandé est celui de l'utilisateur qui a saisi sudo, ici adrien.
La commande sera exécutée si le mot de passe entré est correct et que l'utilisateur courant peut effectuer des tâches d'administration.
Code BASH :
adrien@linux: ~ $ ls /root ls: impossible d ouvrir le répertoire /root: Permission non accordée adrien@linux: ~ $ sudo ls /root [sudo] password for adrien: script-de-root.sh
Le mot de passe est mémorisé par défaut pour une durée de 15 minutes.
Pendant ce laps de temps, on peut toujours saisir des commandes avec sudo mais le mot de passe ne sera pas demandé.
Code BASH :
adrien@superlinux: ~ $ sudo touch /root/test
Il, par sécurité, on souhaite "oublier" le mot de passe mémorisé, on peut utiliser :
Code BASH :
sudo -k
On peut ouvrir une "session root" avec sudo, via
Code BASH :
sudo -i
Configurer sudo
Les autorisations pour utiliser sudo sont définies dans le fichier /etc/sudoers.
Pour l'éditer, il est préférable d'utiliser la commande suivante :
Code BASH :
visudo
En effet, avec visudo, lors de l’enregistrement, l’outil nous indique s'il y a une erreur de syntaxe.
Le fichier qui se modifie est /etc/sudores mais il est possible de créer le nom de son choix dans le dossier /etc/sudoers.d !
Généralités
Chaque ligne du fichier est structurée de cette façon :
Code BASH :
user ALL = (user) commande1,commande2,... %groupe ALL = (user) commande1,commande2,...
- user indique le nom d'utilisateur auquel le droit sudo s'appliquera ou %groupe indique le nom du groupe auquel le droit sudo s'appliquera. Le nom du groupe doit donc être précédé d'un %.
- ALL désigne la ou les systèmes dans lesquels le droit sudo s'appliquera
- (user) désigne l'utilisateur dont on prend les droits (ALL pour tous, y compris root)
- commande représente des commandes pouvant être exécutées par l'utilisateur ou le groupe désigné en début de ligne. (si plusieurs commandes, les séparer par une virgule (AL pour toutes). Utiliser le chemin complet de la commande. (Si on ne connaît pas le chemin de la commande, utiliser which : which ls) Il est possible de mettre un point d'exclamation (!) devant la commande pour interdire à l'utilisateur de l'exécuter avec sudo.
Utiliser sudo sans mot de passe
On peut indiquer dans le fichier sudoers de ne pas utiliser de mot de passe pour certaines commandes (utile dans le cadre d'un script)
Voici un exemple avec un utilisateur (fonctionne aussi avec les groupes) :
Code BASH :
user ALL = commande1, NOPASSWD: commande2
Ici, la commande 1 est autorisée via sudo avec un mot de passe, commande2 est autorisée via sudo sans demande de mot de passe.
Exemples
Autoriser apache à lancer la commande service avec sudo sans demande de mot de passe :
Code BASH :
apache ALL=(ALL) NOPASSWD: /usr/sbin/service
Autoriser l'utilisateur à exécuter toutes les commandes via sudo :
Code BASH :
adrien ALL=(ALL) ALL
Autoriser adrien à exécuter toutes les commandes via sudo mais que sudo reboot ne demande pas le mot de passe (faire 2 lignes) :
Code BASH :
adrien ALL=(ALL) ALL adrien ALL=(ALL) NOPASSWD: /usr/sbin/reboot