sudo

La commande sudo permet à un utilisateur d'exécuter des commandes avec les droits root.

Utilisation

Commandes de base

Exécuter une commande en tant que root

sudo <commande>

Ouvrir une session interactive root

sudo -i sudo -s

Oublier le mot de passe mémorisé

sudo -k

Lister ses droits

sudo -l

Donner les droits sudo

sudo adduser <login> sudo

Configuration

/etc/sudoers.d

Tous les fichiers du répertoire /etc/sudoers.d/ ne finissant pas par ~ ou ne contenant pas un . sont lus et analysés lorsque l'on utilise la commande sudo.

Le nom est libre et peut faire référence à la commande et/ou l'utilisateur concerné.

Editer un fichier

visudo -f /etc/sudoers.d/<commande>-<utilisateur>
Pour configurer l'éditeur par défaut pour visudo utiliser la commande : sudo update-alternatives --config editor

Syntaxe

identifiant ALL = (user) /chemin/complet/commande,/chemin/complet/autrecommande %groupe ALL = (user) /chemin/complet/commande,!/chemin/complet/autrecommande

identifiant représente un nom d'utilisateur. Un seul identifiant par ligne.

%groupe désigne un groupe d'utilisateurs. Un seul groupe par ligne.

ALL désigne la ou les machines dans lesquelles les commandes sont autorisées ou refusées pour cet utilisateur ou ce groupe d'utilisateurs. Le mot-clé ALL désigne l'ensemble des machines du parc informatique. Dans le cadre d'une utilisation à domicile, laisser ALL n'est pas un inconvénient. Dans un grand parc d'entreprise, de meilleures stratégies sont à prévoir.

user (entre parenthèses) désigne l'utilisateur dont on prend les droits (peut valoir ALL pour tous).

commande et autrecommande représentent des commandes pouvant être exécutées par l'utilisateur ou le groupe d'utilisateurs désigné en début de ligne.

Les commandes précédées d'un point d'exclamation (!) sont refusées, alors que celles sans point d'exclamation sont autorisées. Les commandes multiples sont séparées par une virgule, sans espace. Les commandes doivent être entrées de manière exacte. Saisir des chemins absolus vers les commandes.

Exemple pour gérer un service

Les lignes suivantes autorisent l'utilisateur <user> à exécuter les commande systemctl stop|start|restart|status nom.service sans mot de passe.

Defaults:user !requiretty user ALL= NOPASSWD: /bin/systemctl restart nom user ALL= NOPASSWD: /bin/systemctl stop nom user ALL= NOPASSWD: /bin/systemctl start nom user ALL= NOPASSWD: /bin/systemctl status nom

requiretty : Interdit l'exécution de la commande sudo à partir d'autre chose qu'une console ou un terminal, notamment à partir de scripts cron ou cgi-bin. En mettant un ! devant on l'autorise notamment si cela a été interdit globalement à un niveau supérieur.

En cas de problème penser à bien taper la commande de façon identique à ce qui est indiqué dans le fichier (préfixé de la commande sudo).

Exemple pour arrêter la machine

Defaults:user !requiretty user ALL= NOPASSWD: /sbin/poweroff

Exemple pour toute commande

user ALL=(ALL) NOPASSWD: ALL

/etc/sudoers

Il est possible de modifier directement le fichier /etc/sudoers mais il est préférable de privilégier d'écrire ses modifications locales dans le répertoire /etc/sudoers.d

Sources

Doc-Ubuntu

Linuxtricks