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.