295 votes

sudo remplace chemin - pourquoi ?

C'est la variable de CHEMIN d'accès sans sudo:

$ echo 'echo $PATH' | sh

/opt/local/ruby/bin:/usr/bin:/bin

C'est la variable de CHEMIN d'accès avec sudo:

$ echo 'echo $PATH' | sudo sh

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Aussi loin que je peux dire, sudo est censé quitter le CHEMIN intact. Ce qui se passe? Comment puis-je changer cela? (C'est sur Ubuntu 8.04).

Mise à JOUR: aussi loin que je peux voir, aucun des scripts lancé en tant que root changer de CHEMIN en quelque sorte.

De l'homme sudo:

Pour éviter de commande d'usurpation d'identité, sudo vérifications `." et `" (à la fois la dénotation de l' répertoire courant) dernier lors de la recherche pour une commande dans le parcours utilisateur (si l'un des deux ou les deux sont dans le CHEMIN d'accès). Remarque, cependant, que le CHEMIN d'accès réel variable d'environnement n'est pas modifié et est adopté sans modification du programme sudo exécute.

251voto

pixelbeat Points 12073

Il s’agit d’une fonction ennuyeux de sudo sur ubuntu. Remarque cela n’arrive pas sur fedora par exemple comme sudo n’est pas construite avec--with-fixer-path loption il.

Pour contourner ce « problème » sur ubuntu je fais ce qui suit dans mon ~/.bashrc

Note ce qui précède va travailler pour les commandes qui ne réinitialiser le $PATH eux-mêmes. Cependant « su » réinitialise c’est $PATH vous devez utiliser -p pour lui dire de ne pas le faire. C'EST-À-DIRE :

126voto

Jacob Points 761

Dans le cas où quelqu'un d'autre s'écoule à travers cette et veut juste désactiver toutes les variable de chemin d'accès de changer pour tous les utilisateurs.
Accéder à votre fichier sudoers par l'aide de la commande:visudo. Vous devriez voir la ligne suivante quelque part:

Par défaut env_reset

qui vous devez ajouter le suivant sur la ligne suivante

Par défaut !secure_path

secure_path est activé par défaut. Cette option spécifie ce qu'il faut faire $CHEMIN quand sudoing. Le point d'exclamation désactive la fonction.

33voto

Kent Fredric Points 35592

PATH est une variable d'environnement, et en tant que tel est par défaut réinitialisation par sudo.

Vous avez besoin d'autorisations spéciales pour être autorisé à le faire.

D' man sudo

 -E L -E (préserver l'environnement) option va se substituer à la env_reset
 option dans sudoers(5)). Il est disponible uniquement lorsque le match
 ing commande SETENV balise ou la setenv option est définie dans sudo-
ers(5).
 Les variables d'environnement à définir pour la commande peut également être transmis
 la ligne de commande dans le formulaire de VAR=valeur, par exemple
 LD_LIBRARY_PATH=/usr/local/pkg/lib. Les Variables passées sur la commande
 ligne sont soumis aux mêmes restrictions que l'environnement normal vari-
 ables avec une exception importante. Si le setenv option est définie dans
 sudoers, la commande à exécuter est la SETENV tag set ou sur la commande
 appariés est TOUT, l'utilisateur peut définir des variables qui serait overwise être pour-
 conviés. Voir sudoers(5) pour plus d'informations.

Un Exemple d'utilisation:

cat >> test.sh
env | grep "MYEXAMPLE" ;
^D
sh test.sh 
MYEXAMPLE=1 sh test.sh
# MYEXAMPLE=1
MYEXAMPLE=1 sudo sh test.sh 
MYEXAMPLE=1 sudo MYEXAMPLE=2 sh test.sh 
# MYEXAMPLE=2

mise à jour

homme 5 sudoers : 

 env_reset Si elle est définie, la commande sudo permet de rétablir l'environnement contiennent uniquement
 le LOGNAME, le SHELL de l'UTILISATEUR, nom d'utilisateur et le SUDO_* vari-
 ables. Toutes les variables à l'appelant de l'environnement qui
 match de la env_keep et env_check listes sont ensuite ajoutés.
 Le contenu par défaut de la env_keep et env_check
 les listes sont affichées lorsque sudo est exécuté par root avec l'
 L'option-V. Si sudo a été compilé avec le SECURE_PATH
 option, sa valeur sera utilisée pour l'environnement PATH
 variable. Ce drapeau est activé par défaut.

Donc peut-être besoin de vérifier que c'est/n'est pas compilé.

Il est par défaut dans Gentoo

# ( From the build Script )
....
ROOTPATH=$(cleanpath /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/bin${ROOTPATH:+:${ROOTPATH}})
....
econf --with-secure-path="${ROOTPATH}" 

18voto

Tyler Rick Points 3033

Ressemble à ce bogue a été autour pendant un bon moment! Voici quelques corrections de références, vous trouverez peut-être utile (et pouvez vous abonner à l' / voter, indice, indice...):


Debian bug #85123 ("sudo: SECURE_PATH ne peut pas toujours être remplacée") (à partir de 2001!)

Il semble que le Bug#20996 est toujours présent dans cette version de sudo. L' changelog dit qu'elle peut être remplacée au moment de l'exécution, mais je n'ai pas encore découvert comment.

Ils mentionnent mettre quelque chose comme ceci dans votre fichier sudoers:

Defaults secure_path="/bin:/usr/bin:/usr/local/bin"

mais quand je fais ça dans Ubuntu 8.10 au moins, il me donne cette erreur:

visudo: unknown defaults entry `secure_path' referenced near line 10


Ubuntu bug #50797 ("sudo construit avec --with-secure-chemin d'accès est problématique")

Pire encore, autant que je peux dire, c' est impossible de respécifier secure_path dans le fichier sudoers. Donc, si, pour exemple, vous souhaitez offrir à vos utilisateurs facile d'accès à quelque chose dans /opt, vous devez recompiler sudo.


Oui. Il y a besoins d'être un moyen de remplacer cette "fonctionnalité" sans avoir pour recompiler. Rien de pire que de la sécurité des fanatiques de vous dire ce qui est le mieux pour votre environnement et puis ne pas en vous donnant un moyen de le désactiver.


C'est vraiment ennuyeux. Il pourrait être sage de se tenir au courant de comportement par par défaut pour des raisons de sécurité, mais il devrait y avoir un moyen de passer outre autres de les recompiler à partir de la source le code! Beaucoup de gens SONT dans le besoin de CHEMIN de l'héritage. Je me demande pourquoi pas les responsables de regarder dans, ce qui semble facile à monter avec un acceptable solution.


J'ai travaillé autour d'elle comme ceci:

mv /usr/bin/sudo /usr/bin/sudo.orig

ensuite, créez un fichier /usr/bin/sudo contenant les éléments suivants:

#!/bin/bash
/usr/bin/sudo.orig env PATH=$PATH "$@"

ensuite, votre sudo fonctionne exactement comme la non sécurisé-chemin sudo


Ubuntu bug #192651 ("sudo chemin est toujours reset")

Étant donné qu'une copie de ce bogue a été déposée à l'origine en juillet 2006, je ne suis pas clair combien de temps l'inefficacité env_keep a été en opération. Quelle que soit la fond de forcer les utilisateurs à employer des trucs comme indiqué ci-dessus, sûrement les pages de manuel pour la commande sudo et sudoers doit refléter le fait que options pour modifier le CHEMIN d'accès sont effectivement redondant.

La modification de la documentation pour tenir compte exécution effective est pas le déstabiliser et très utile.


Ubuntu bug #226595 ("impossible de conserver/indiquez le CHEMIN d'accès")

J'ai besoin d'être en mesure de lancer la commande sudo avec supplémentaire non-std binaire dossiers dans le CHEMIN d'accès. Ayant déjà ajouté mon exigences de /etc/environment, j'ai été surpris lorsque j'ai des erreurs sur l' commandes manquantes lors de l'exécution de leur en vertu de sudo.....

J'ai essayé les méthodes suivantes pour résoudre ce sans succès:

  1. À l'aide de la "sudo -E" option ne fonctionne pas. Mon CHEMIN était encore réinitialisation par sudo

  2. En changeant "Defaults env_reset "" Defaults !env_reset" dans /etc/sudoers, aussi ne fonctionne pas (même lorsqu'il est combiné avec sudo -E)

  3. Décommentant env_reset (par exemple,"#Defaults env_reset") dans /etc/sudoers, aussi ne fonctionne pas.

  4. L'ajout de 'Defaults env_keep += "PATH"'/etc/sudoers, aussi ne fonctionne pas.

Clairement - en dépit de l'homme documentation - sudo est complètement codé en dur concernant le CHEMIN d'accès et ne pas permettre à toute la flexibilité concernant en conservant le CHEMIN d'accès des utilisateurs. Très ennuyeux que je ne peux pas courir non-par défaut logiciel sous les permissions root à l'aide de sudo.

15voto

axsuul Points 3060

Cela semble fonctionner pour moi

qui prend sur la non-sudo``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X