Pourquoi ne sudo modifier le CHEMIN d'accès?
C'est le PATH
variable sans sudo:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
C'est le PATH
variable 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 PATH
intacte. 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 changement PATH
en aucune façon.
De man 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). Note,
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.
- Ne la racine de tout ce qui définit le CHEMIN d'accès dans .bashrc? C'est à supposer que, puisque vous êtes sur Linux, sh est vraiment bash.
- unix.stackexchange.com/questions/83191/... || unix.stackexchange.com/questions/8646/... || superuser.com/questions/98686/passing-path-through-sudo
Vous devez vous connecter pour publier un commentaire.
C'est
une fâcheuse de la fonctionune fonction sudo sur de nombreuses distributions.Pour contourner ce "problème" sur ubuntu je ne
la suite dans mon ~/.bashrc
Remarque ci-dessus va travailler pour les commandes qui ne sont pas réinitialiser le $PATH eux-mêmes.
Cependant " su " réinitialise la variable d'environnement $PATH, vous devez donc utiliser -p pour lui dire de ne pas. I. E.:
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:qui vous devez ajouter le suivant sur la ligne suivante
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.
Defaults env_keep = "PATH"
PATH
est une variable d'environnement, et en tant que tel est par défaut réinitialisation par sudo.Vous avez besoin de permissions spéciales pour être autorisé à le faire.
De
man sudo
Un Exemple d'utilisation:
mise à jour
Donc peut-être besoin de vérifier que c'est/n'est pas compilé.
Il est par défaut dans Gentoo
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 à /de voter, indice, indice...):
Debian bug #85123 ("sudo: SECURE_PATH ne peut pas toujours être remplacée") (à partir de 2001!)
La mention de mettre quelque chose comme ceci dans votre fichier sudoers:
mais quand je fais ça dans Ubuntu 8.10 au moins, il me donne cette erreur:
Ubuntu bug #50797 ("sudo construit avec --with-secure-chemin d'accès est problématique")
Ubuntu bug #192651 ("sudo chemin est toujours reset")
Ubuntu bug #226595 ("impossible de conserver/indiquez le CHEMIN d'accès")
Cela semblait fonctionner pour moi
qui prend sur la non-sudo
PATH
Je pense qu'il est souhaitable d'avoir sudo réinitialiser le CHEMIN: autrement, un attaquant ayant compromis votre compte d'utilisateur pouvait mettre backdoored versions de tous les types de outils de vos utilisateurs CHEMIN, et ils seraient exécutés lors de l'utilisation de sudo.
(bien sûr, d'avoir sudo réinitialiser le CHEMIN n'est pas une solution complète pour ces types de problèmes, mais ça aide)
C'est en effet ce qui se passe lorsque vous utilisez
dans /etc/sudoers, sans l'aide de
exempt_group
ouenv_keep
.C'est aussi pratique car vous pouvez ajouter des répertoires qui ne sont utiles que pour la racine (comme
/sbin
et/usr/sbin
) pour le sudo chemin sans les ajouter à vos utilisateurs des chemins. Pour spécifier le chemin d'accès pour être utilisé par sudo:Travaille maintenant à l'aide de sudo à partir de la potentialité des dépôts. Les détails de ma configuration:
C'est merveilleux d'avoir enfin ce résolus sans l'aide d'un hack.
Juste un commentaire "par Défaut env_reset" dans /etc/sudoers
Il suffit d'éditer
env_keep
dans/etc/sudoers
Il ressemble à quelque chose comme 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"
Simplement ajouter le CHEMIN à la fin, donc après le changement, il devrait ressembler à 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"
Fermer le terminal, puis l'ouvrir de nouveau.
Secure_path est votre ami, mais si vous voulez vous dispensez de secure_path il suffit de ne
Et ajouter
Si vous voulez exclure un groupe d'utilisateurs de créer un groupe, ajouter tous les utilisateurs, et l'utiliser comme votre exempt_group. homme 5 sudoers pour plus d'.
la solution recommandée dans les commentaires sur la distribution OpenSUSE suggère de changer:
à:
et puis sans doute mettre en commentaire la ligne suivante qui n'est pas nécessaire:
commentaire à la fois "par Défaut env_reset" et "par Défaut secure_path ..." dans /etc/sudores fichier fonctionne pour moi
Vous pouvez également déplacer votre fichier sudoers utilisé répertoire :
Re, il n'est pas vraiment un test, si vous n'avez pas ajouter quelque chose à votre chemin d'accès:
Le CHEMIN d'accès sera remis lors de l'utilisation de su ou sudo par la définition de ENV_SUPATH, et ENV_PATH définies dans /etc/login.defs
$PATH est une variable d'environnement, et cela signifie que la valeur de $PATH peuvent différer pour un autre utilisateur.
Quand vous faites de connexion dans votre système, puis votre paramètre de profil de décider de la valeur de la $PATH.
Maintenant, permet de jeter un coup d'oeil:-
Supposons que ce sont les valeurs de $CHEMIN d'accès pour les différents utilisateurs. Maintenant, quand vous êtes de l'exécution de toute commande avec sudo, mais de sens racine utilisateur exécute la commande .
Vous pouvez le vérifier en exécutant ces commandes dans le terminal :-
C'est la raison. Je pense que c'est clair pour vous.