Ceci est la PATH
variable sans sudo:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
C'est la PATH
variable avec sudo:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Pour autant que je sache, sudo
est censé rester PATH
intact. Que se passe-t-il? Comment puis-je changer cela? (C'est sur Ubuntu 8.04).
MISE À JOUR: pour autant que je puisse voir, aucun des scripts n'a commencé comme changement de racine PATH
de quelque façon que ce soit.
De man sudo
:
Pour éviter l'usurpation de commande, sudo vérifie ``. '' Et `` '' (les deux indiquant le répertoire actuel) en dernier lors de la recherche d'une commande dans le CHEMIN de l'utilisateur (si l'un ou les deux se trouvent dans le CHEMIN). Notez cependant que la variable d'environnement PATH réelle n'est pas modifiée et est transmise inchangée au programme que sudo exécute.
path
environment-variables
sudo
Michiel de Mare
la source
la source
Réponses:
C'est
une fonction ennuyeuseune fonctionnalité de sudo sur de nombreuses distributions.Pour contourner ce "problème" sur ubuntu, je fais ce qui suit dans mon ~ / .bashrc
Notez que ce qui précède fonctionnera pour les commandes qui ne réinitialisent pas $ PATH elles-mêmes. Cependant `su 'réinitialise son $ PATH, vous devez donc utiliser -p pour lui dire de ne pas le faire. C'EST À DIRE:
la source
Dans le cas où quelqu'un d'autre s'exécute à travers cela et veut simplement désactiver toutes les variables de chemin changeant pour tous les utilisateurs.
Accédez à votre fichier sudoers en utilisant la commande:
visudo
. Vous devriez voir la ligne suivante quelque part:que vous devez ajouter ce qui suit sur la ligne suivante
secure_path est activé par défaut. Cette option spécifie quoi faire $ PATH lors du sudoing. Le point d'exclamation désactive la fonctionnalité.
la source
Defaults env_keep = "PATH"
PATH
est une variable d'environnement, et en tant que telle est par défaut réinitialisée par sudo.Pour ce faire, vous avez besoin d'autorisations spéciales.
De
man sudo
Un exemple d'utilisation:
mettre à jour
Il faudra donc peut-être vérifier que cela n'est pas compilé.
C'est par défaut dans Gentoo
la source
On dirait que ce bug existe depuis un bon moment! Voici quelques références de bogues que vous pourriez trouver utiles (et que vous voudrez peut-être vous abonner / voter, indice, indice ...):
Bogue Debian # 85123 ("sudo: SECURE_PATH ne peut toujours pas être remplacé") (à partir de 2001!)
Ils mentionnent mettre quelque chose comme ça dans votre fichier sudoers:
mais quand je fais ça dans Ubuntu 8.10 au moins, cela me donne cette erreur:
Bogue Ubuntu # 50797 ("sudo construit avec --with-secure-path est problématique")
Bogue Ubuntu # 192651 ("le chemin sudo est toujours réinitialisé")
Bogue Ubuntu # 226595 ("impossible de conserver / spécifier le CHEMIN")
la source
Cela a semblé fonctionner pour moi
qui prend le non-sudo
PATH
la source
Je pense qu'il est en fait souhaitable d'avoir sudo réinitialisé le PATH: sinon un attaquant ayant compromis votre compte d'utilisateur pourrait mettre des versions détournées de toutes sortes d'outils sur le PATH de vos utilisateurs, et ils seraient exécutés lors de l'utilisation de sudo.
(bien sûr, avoir sudo réinitialisé le PATH n'est pas une solution complète à ce genre de problèmes, mais cela aide)
C'est en effet ce qui se passe lorsque vous utilisez
dans / etc / sudoers sans utiliser
exempt_group
ouenv_keep
.Cela est également pratique car vous pouvez ajouter des répertoires qui ne sont utiles que pour la racine (comme
/sbin
et/usr/sbin
) au chemin sudo sans les ajouter aux chemins de vos utilisateurs. Pour spécifier le chemin à utiliser par sudo:la source
Fonctionne maintenant en utilisant sudo des dépôts karmiques. Détails de ma configuration:
C'est merveilleux d'avoir enfin résolu cela sans utiliser de hack.
la source
la source
Il suffit de commenter "Defaults env_reset" dans / etc / sudoers
la source
Modifiez simplement
env_keep
dans/etc/sudoers
Cela ressemble à ceci:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"
Ajoutez simplement PATH à la fin, donc après le changement, cela ressemblera à ceci:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"
Fermez le terminal puis rouvrez-le.
la source
Secure_path est votre ami, mais si vous voulez vous exempter de secure_path, faites-le
Et ajouter
Si vous souhaitez exempter un groupe d'utilisateurs, créez un groupe, ajoutez-y tous les utilisateurs et utilisez-le comme votre groupe exempté. homme 5 sudoers pour plus.
la source
la solution recommandée dans les commentaires sur la distribution OpenSUSE suggère de changer:
à:
puis sans doute pour commenter la ligne suivante qui n'est pas nécessaire:
la source
commenter "Default env_reset" et "Default secure_path ..." dans le fichier / etc / sudores fonctionne pour moi
la source
Vous pouvez également déplacer votre fichier dans un répertoire utilisé par sudoers:
la source
Euh, ce n'est pas vraiment un test si vous n'ajoutez rien à votre chemin:
la source
Le CHEMIN sera réinitialisé lors de l'utilisation de su ou sudo par la définition de ENV_SUPATH et ENV_PATH défini dans /etc/login.defs
la source
$ PATH est une variable d'environnement et cela signifie que la valeur de $ PATH peut différer pour un autre utilisateur.
Lorsque vous vous connectez à votre système, votre paramètre de profil décide de la valeur de $ PATH .
Voyons maintenant: -
Supposons que ce sont les valeurs de $ PATH pour différents utilisateurs. Maintenant, lorsque vous exécutez une commande avec sudo, l' utilisateur racine exécute en réalité cette commande.
Vous pouvez confirmer en exécutant ces commandes sur le terminal: -
C'est la raison. Je pense que c'est clair pour vous.
la source