Garder son PATH dans une commande sudo

Anne linux sudo path

Problème

Lorsqu’on utilise sudo, il y a une protection pour ne pas utiliser le PATH de l’utilisateur. Ça peut être gênant lorsque l’on souhaite utiliser indirectement des outils que l’on a installés localement. On peut en effet lancer un outil en donnant son chemin, mais s’il s’agit d’un script qui fait appel à d’autres commandes, il va normalement les chercher dans le PATH.

Dans mon cas par exemple, je voulais utiliser

$ sudo make install

qui utilisait un compilateur que j’avais installé localement.

Solution 1

Modifier le fichier /etc/sudoers :

$ sudo visudo

ATTENTION : utiliser visudo pour éditer le fichier /etc/sudoers car ça protège contre les erreurs… Et je vous assure (par expérience) qu’on est bien embêté quand on se retrouve avec une erreur de syntaxe dans ce fichier !

Commenter :

# Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

ET remplacer par :

Defaults	!secure_path

Mais cette méthode a un inconvénient : on perd les PATH système comme /usr/sbin par exemple.

Solution 1b

Similaire à la précédente

  • c’est-à-dire en modifiant le fichier /etc/sudoers - mais sans ôter le secure_path, et en y ajoutant plutôt le(s) chemin(s) manquant(s).

Exemple : je fais confiance à ce qui est dans /home/moi/bin :

Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/moi/bin"

Ça peut être intéressant si on a juste un ou deux chemins supplémentaires, toujours les mêmes.

Solution 2

Une méthode plus douce et locale est de faire :

$ sudo env PATH=$PATH cmd

Ce qui permet d’une part de ne pas modifier le comportement normal de sudo, et d’autre part, de ne faire cette manip que lorsqu’on en a l’utilité.

Voir aussi :