Sur ma machine virtuelle fedora, lors de l'exécution avec mon compte d'utilisateur, j'ai /usr/local/bin
sur mon chemin :
[[email protected] ~]$ env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin
Et de même lors de l'exécution de su
:
[[email protected] ~]$ su -
Password:
[[email protected] justin]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin
Cependant, lors de l'exécution via sudo
, ce répertoire n'est pas dans le chemin :
[[email protected] justin]# exit
[[email protected] ~]$ sudo bash
[[email protected] ~]# env | grep PATH
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin
Pourquoi le chemin serait-il différent lors de l'exécution via sudo
?
Réponse acceptée :
Jetez un oeil à /etc/sudoers
. Le fichier par défaut dans Fedora (ainsi que dans RHEL, et aussi Ubuntu et similaire) inclut cette ligne :
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Ce qui garantit que votre chemin est propre lors de l'exécution de binaires sous sudo. Cela aide à se protéger contre certaines des préoccupations notées dans cette question. C'est aussi pratique si vous n'avez pas /sbin
et /usr/sbin
dans votre propre chemin.