Lors de l'utilisation de sudo, il est demandé de saisir un mot de passe pour obtenir une élévation de privilège.
Il est possible s'affranchir de cette saisie, idéal pour scripter des commandes et mettre en place de la supervision sans utiliser un compte admin ou root.
Voici un exemple avec docker:
username@host:~$ sudo docker ps -a
[sudo] Mot de passe de username :
Pour le parametrage il faudra récupérer le chemin complet qui est utilisé par docker. La commande suivante vous donnera l'info:
username@host:~$ whereis docker
docker: /usr/bin/docker /etc/docker /usr/libexec/docker /usr/share/man/man1/docker.1.gz
Il suffira de modifier ensuite le fichier de configuration des sudoers, avec la ligne:
username ALL=(ALL:ALL) NOPASSWD: /usr/bin/docker
Il faut donc placer l'instruction de la façon suivante en utilisant l'éditeur visudo.
sudo visudo
Contenu du fichier
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
nico ALL=(ALL:ALL) NOPASSWD: /usr/bin/docker
username ALL=(ALL:ALL) NOPASSWD: /usr/bin/docker
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Pour finir, il faut ajouter l'utilisateur au groupe sudo (déclaré dans le fichier ci-dessus).
su - root -c "usermod -aG sudo username;"
La commande docker devrait alors ne plus vous demander de mot de passe pour être exectuée en root
username@host:~$ sudo docker ps -a
Commandes utiles
Vérification de groupe
On peut vérifier si l'utilisateur est dans le bon groupe (27(sudo)):
username@host:~$ id username
uid=1000(username) gid=1000(username) groupes=1000(username),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),109(netdev)
Vérification des droits
Il est possible d'afficher les droits associés à un utilisteur.
username@host:~$ sudo -l
Entrées par défaut pour username sur host :
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
L'utilisateur username peut utiliser les commandes suivantes sur host :
(ALL : ALL) ALL
(ALL : ALL) NOPASSWD: /usr/bin/docker
(ALL : ALL) NOPASSWD: ALL
Suppression de l'autorisation sudo
Lors d'un sudo et saisie de mot de passe, l'autorisation reste stockée 15min, durée pendant laquelle il n'est pas necessaire de s'authentifier.
Lors des tests il est utile de pouvoir supprimer le jeton d'autorisation avec la commande suivante :
sudo -k
Ceci vous obligera simplement à vous reconnecter en tapant le mot de passe.