Je dois exécuter un programme installé sur / opt / godi / sbin (un répertoire personnalisé). Si j'ajoute ce répertoire à PATH, en ajoutant la ligne suivante à mon fichier .bashrc
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
alors je peux essayer d’exécuter la commande très bien (sauf qu’elle échoue car elle nécessite sudo). Cependant, lorsque j'essaie d'utiliser sudo:
sudo godi_console
Je reçois l'erreur suivante
sudo: godi_console: command not found
L'inspection de la variable PATH après l'utilisation de sudo révèle qu'elle ne comprend pas le même PATH que l'utilisateur normal:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Pourquoi le PATH n'est-il pas le même? Est-ce que je fais quelque chose de mal? Je suis sur Debian Jessie et, malheureusement, je ne peux pas contourner le problème en passant sudo le lien absolu à godi_console, car godi_console lui-même dépend également de la définition correcte de PATH.
sudo -E godi_console
.-E
signifie "préserver l'environnement".secure_path
et / ou env_reset sont configurés comme c'est le cas dans de nombreuxsudo
déploiements comme sur Debian.su
notsudo
, est unix.stackexchange.com/questions/460478 .Réponses:
Vous pouvez toujours faire:
En tant que mesure de sécurité sur Debian,
/etc/sudoers
l'secure_path
option est définie sur une valeur sûre.Notez que:
Où
sudo
traite les principaux arguments contenant des=
caractères comme des assignations de variable d’environnement, fonctionnerait égalementgodi_console
avec votre$PATH
(par opposition àsecure_path
) dans son environnement, mais n’affecterait passudo
le chemin de recherche de l’exécutable, donc n’aiderait passudo
à le trouvergodi_console
.la source
sudo "PATH=$PATH" godi_console
n'a pas fonctionné dans CentOs7 en passant. J'avais besoin de l'ensudo "PATH=$PATH" godi_console
que ça marche vraiment?sudo
accepte lesVAR=value
arguments, affectant l'environnement de la commande il fonctionne, mais contrairement àenv
oubash
,sudo
ne semble pas laisser cela affecter la façon dont il regarde la commande. Je l'ai seulement testé (récemment) sur Ubuntu 16.04. Mais j'ai essayé d'ajouter l'exempt_group
option àsudoers
(juste pour tester - je ne considère pas cela comme une solution!) Et les résultats ont été éclairants. Les commandes du formulaire ontPATH="$PATH" sudo some-command
commencé à fonctionner, mais celles du formulaire ne l’ontsudo PATH="$PATH" some-command
toujours pas été.Vous pouvez également définir le PATH par défaut à
/etc/sudoers
éditer le fichier en utilisant
visudo
et mettez à jour la ligne à votre guise:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
la source
SUDO est en train de réinitialiser les variables env par défaut.
Consultez son manuel et son option appelée env_reset.
Vous devez simplement le désactiver dans / etc / sudoers.
la source
env_reset
ne semble pas affectersudo
le comportement de w / r / t PATH.Cela marche :
Exemple d'appel de mon
gps
script qui répertorie les processus de Nvidia GPU:Explication:
la source
cette ovrure secure_path de mon côté
la source
Cela a fonctionné:
Ne changez pas $ PATH avec votre valeur de chemin, vous l'écrivez simplement de cette façon
exemple:
$ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
la source
Peut-être pas précisément ce que demande OP, mais cela pourrait aider:
Cela change le PATH dans la commande sudoed.
Edit: Je ne suis pas sûr de ce que je voulais dire par ceci, car ce qui précède est à peu près un non-sens. Utilisez les éléments suivants à la place:
la source