J'ai accès à sudo sur mon serveur d'amis, exécutant centos-6.3, mais lorsque j'essaie d'exécuter certaines commandes comme sudo vim /var/www/html/index.html
j'obtiens une erreur, sudo: vim: command not found
je peux cependant exécuter sudo su
et puis vim /var/www/html/index.html
et cela fonctionne comme prévu.
echo $PATH
et les sudo echo $PATH
deux donnent:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
donne cependant:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
J'ai essayé d'ajouter
export PATH=$PATH:/usr/local/bin
à celui /root/.bashrc
qui a résolu le problème lors de l'utilisation, sudo su
mais pas seulement sudo <command>
.
Comment me rendre sudo <command>
au travail?
Réponses:
Lors de l'exécution
sudo
, de nombreux systèmes sont configurés pour effacer l'environnement de toutes les valeurs non mises en liste blanche et pour réinitialiser la variable PATH à une valeur filtrée.Vous retrouverez les anciens au fur
Defaults env_reset
etDefaults env_keep += "SOME_VARIABLE_NAME"
à mesure/etc/sudoers
. Ce dernierPATH
remplacement "sécurisé" est spécifié commeDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
- supprimer cette ligne pour supprimer ce comportement lors de l'sudo
ing.La manière dont la variable d'environnement est gérée est imprimée lorsque vous exécutez en
sudo -V
tant queroot
.Si vous ne voulez pas vous débarrasser de ces valeurs par défaut, vous pouvez toujours spécifier des programmes en utilisant leur chemin d'accès complet (
sudo /usr/local/bin/vim
).Alternativement, vous pouvez autoriser votre compte
SETENV
dans lesudoers
fichier, par exemple:Cela vous permet de remplacer les valeurs par défaut de l'environnement comme ceci
sudo PATH=$PATH which vim
:, car la variable est interprétée par votre shell avant l'exécution de la commande, résultant en un héritéPATH
(qui n'inclura probablement pas/sbin
etc., cependant).la source
ne fait pas ce que vous pensez.
$PATH
est remplacé par le (votre) shell avant d' exécuter la commande.Pour accomplir le comportement souhaité, vous pouvez utiliser
sudo -i
.De l' homme sudo :
la source
Jusqu'à ce que vous résolviez le problème avec les chemins, utilisez un chemin d'accès complet
la source