73 votes

Comment définir le chemin pour les commandes sudo

Si j'émets

sudo my-command

comment se présente Linux pour cela my-command ?

En my-command est dans mon PATH. Je peux l'invoquer sans problème. Cependant, lorsque je l'invoque avec sudo Je vais prendre command not found . Comment la surmonter ?

EDITAR: Ce "Duplicata possible" La réponse choisie par l'auteur est fausse, ou du moins pas au point près. Cette réponse, de Terdon, est la bonne.

98voto

Mohsin Points 11

Ce paramètre est normalement défini par l'option secure_path option dans /etc/sudoers . De man sudoers :

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

Pour exécuter des commandes qui ne sont pas dans le programme par défaut $PATH vous pouvez soit

  1. Utilisez le chemin complet : sudo ~/bin/my-command ; ou

  2. Ajouter le répertoire contenant la commande à secure_path . Exécuter sudo visudo et modifiez la ligne "secure path" :

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"

    Sauvegardez le fichier et la prochaine fois que vous exécuterez sudo le répertoire ~/bin sera dans son $PATH .

4 votes

Ou commentez simplement toute la ligne s'il ne s'agit pas d'une machine de production et que nous nous en moquons. Il utilisera alors le PATH de l'utilisateur. Il est dit qu'il n'est pas défini par défaut, mais ce n'est pas toujours le cas...

7voto

Brenden Smith Points 41

C'est ce que j'ai utilisé comme solution de rechange :

sudo cp $(which my-command) /usr/bin
...

En which est exécutée dans un sous-shell qui n'est pas racine, de sorte qu'elle est capable de trouver my-command puis, sudo copie l'exécutable dans un chemin que l'utilisateur a choisi. root auquel l'utilisateur peut accéder. Ce n'est pas génial pour la sécurité, mais c'était bien pour moi de faire tourner une image docker qui était détruite juste après l'exécution de la commande.

0 votes

Je préfère cette réponse. Elle a également fonctionné comme un charme, merci !

6voto

Martin_W Points 131

Vous pouvez également utiliser sudo env PATH=$PATH ...rest_of_command_here... . Comme ce n'est pas si pratique à taper, j'ai ajouté un alias alias sudop='sudo env PATH=$PATH' . Le site sudop (plutôt que l'aliasing sudo lui-même) est un rappel pour moi afin de me faire prendre conscience que je préserve mon chemin d'environnement actuel.

0voto

Diejmon Points 111

Comment créer un lien symbolique ou copier un exécutable dans un répertoire bin qui sudo a accès à

J'utilise un éditeur de texte appelé micro . J'ai couru sudo micro /etc/sysctl.conf et j'ai obtenu cette erreur :

sudo: micro: command not found

C'est parce que micro est dans mon ~/bin mais il s'agit d'un répertoire bin personnel réservé à mon utilisateur. Pour donner à sudo l'accès, je peux soit établir un lien symbolique, soit le copier dans le fichier /usr/bin également :

# symlink it (my preference)
# Create a symlink at /usr/bin/micro which points to my personal ~/bin/micro
# executable
sudo ln -si ~/bin/micro /usr/bin

# OR: copy it
sudo cp -i ~/bin/micro /usr/bin

Fait. Maintenant, lorsque je lance sudo micro cela fonctionne bien.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X