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?


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).


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.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.