Pourquoi ne puis-je pas créer des commandes sudo? (par exemple, vim)

16

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.htmlj'obtiens une erreur, sudo: vim: command not foundje peux cependant exécuter sudo suet puis vim /var/www/html/index.htmlet cela fonctionne comme prévu.

echo $PATHet les sudo echo $PATHdeux 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/.bashrcqui a résolu le problème lors de l'utilisation, sudo sumais pas seulement sudo <command>.

Comment me rendre sudo <command>au travail?

JaredMcAteer
la source
Avez-vous déjà ajouté cet utilisateur aux sudoers dans le système d'exploitation Centos?
AAlvz

Réponses:

18

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_resetet Defaults env_keep += "SOME_VARIABLE_NAME"à mesure /etc/sudoers. Ce dernier PATHremplacement "sécurisé" est spécifié comme Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin- supprimer cette ligne pour supprimer ce comportement lors de l' sudoing.


La manière dont la variable d'environnement est gérée est imprimée lorsque vous exécutez en  sudo -Vtant que root.


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 SETENVdans le sudoersfichier, par exemple:

%wheel  ALL=(ALL)       SETENV: ALL

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 /sbinetc., cependant).

Daniel Beck
la source
Merci. Je vais utiliser le travail de Dennis jusqu'à ce que j'obtienne le propriétaire d'admettre le fichier sudoers.
JaredMcAteer
6
sudo echo $PATH

ne fait pas ce que vous pensez. $PATHest 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 :

-je commande]

L' option -i ( simuler la connexion initiale ) exécute le shell spécifié dans l' entrée passwd (5) de l'utilisateur cible en tant que shell de connexion. Cela signifie que les fichiers de ressources spécifiques à la connexion tels que .profileou .loginseront lus par le shell. Si une commande est spécifiée, elle est transmise au shell pour exécution.

Dennis
la source
1
Il s'agit d'une solution de contournement appropriée jusqu'à ce que je puisse demander au propriétaire d'ajuster le fichier sudoers.
JaredMcAteer
1

Comment me rendre sudo <command>au travail?

Jusqu'à ce que vous résolviez le problème avec les chemins, utilisez un chemin d'accès complet

  sudo /usr/local/bin/vim /var/www/html/index.html
RedGrittyBrick
la source
5
Je ne vais pas vous dévaloriser, mais je n'aime jamais simplement contourner les problèmes plutôt que d'aller droit au point de les résoudre et de les résoudre.
Nicole Hamilton