Quel environnement ai-je avec sudo?


15

Lorsque j'exécute sudo, qu'arrive-t-il exactement à mon environnement?

Quand je cours sudo command, il ne semble pas voir mon environnement ou root. Par exemple, mon chemin d'accès aux deux inclut /usr/local/bin, mais si j'essaie d'exécuter l'un des programmes sans le chemin d'accès complet, il échoue.

Je pensais que sudo s'exécutait en tant que root, et donc obtenu l'environnement de root. Existe-t-il une manière différente que bash s'exécute sous sudo que sous root ou mon utilisateur normal?

ÉDITER:

J'utilise sudo -ices derniers temps, mais récemment, cela a causé des problèmes car mon répertoire de travail actuel est réglé sur /root. C'est comme prévu (sorta), mais je ne comprends toujours pas pourquoi sudo ne reconnaît pas mes exécutables /usr/local/bin.

ÉDITER:

J'utilise Fedora 15.


Quel OS utilisez-vous (si Linux, quelle distribution)? Il existe (trop) de nombreuses façons de configurer PATH, et parfois il n'est pas facile de trouver qui le remplace en dernier. Il peut s'agir d'un paramètre système (par exemple dans PAM), sudo lui-même ou un script de profil ultérieur.
Gilles 'SO- arrête d'être méchant'

@ Gilles- Bon point. J'ai ajouté mon OS. Je ne l'ai vraiment remarqué que sur Fedora (j'ai utilisé Ubuntu), mais je pensais que c'était parce qu'ils n'avaient pas ajouté beaucoup de configuration pratique.
beatgammit

Réponses:


6

Je ne connais pas les valeurs par défaut sur Fedora, mais sur Debian, par sudodéfaut, l'utilisation de l' secure_pathoption avec une valeur par défaut de /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Cela signifie que le chemin d'accès est modifié à cette valeur chaque fois que vous utilisez sudo; mais lorsque vous utilisez sudo -i, le chemin est modifié par la suite par les fichiers RC de l'utilisateur root.


Je ne connaissais pas l' secure_pathoption. La valeur par défaut ne figurait pas /usr/local/binsur mon installation. Merci, cela a vraiment aidé à clarifier les choses!
beatgammit

4

Vous pouvez vérifier cela assez facilement avec des choses comme

Comparez la sortie de

sudo env 
env

Et des choses comme

sudo whoami 
whoami

De cette façon, vous pouvez essayer de découvrir ce qui manque dans votre configuration.


Cool, je ne savais pas ça. Quoi qu'il en soit, ce /usr/local/binn'est pas dans mon env sudo, mais c'est dans mon env racine et env utilisateur. Pourquoi est-ce?
beatgammit

sudo whoami revient root, comme prévu. Qu'est-ce qui pourrait faire en sorte que mon env sudo soit différent de mon env racine?
beatgammit

Je ne sais pas, mais il doit y avoir une configuration manquante quelque part, / usr / local / bin est généralement inclus. Peut-être avez-vous effacé l'en-tête $ PATH par erreur dans un fichier de configuration?
Johan

Est-ce que sudo source /root/.bashrc? C'est là que j'ajoute /usr/local/binau chemin root (j'ai dû le faire manuellement, malheureusement)?
beatgammit

Je pense que vous devriez modifier la configuration globale de votre shell et voir ce qui se passe. Si vous utilisez bash, ce serait quelque chose comme /etc/bash.bashrc
Johan

2

La sudo -icommande simule la connexion initiale. Sur mon système Debian, il indique également que:

Cela signifie que les fichiers de ressources spécifiques à la connexion tels que .profile ou .login seront lus par le shell. Si une commande est spécifiée, elle est transmise au shell pour exécution. Sinon, un shell interactif est exécuté. sudo tente de passer au répertoire personnel de cet utilisateur avant d'exécuter le shell. Il initialise également l'environnement, laissant DISPLAY et TERM inchangés, définissant HOME, MAIL, SHELL, USER, LOGNAME et PATH, ainsi que le contenu de / etc / environment sur les systèmes Linux et AIX. Toutes les autres variables d'environnement sont supprimées.


0

Vous pouvez ajuster sudole env_keepparamètre de pour inclure PATH, mais vous devez garder à l'esprit les implications de sécurité de le faire.

visudo

... lancera votre $EDITOR, puis vous pourrez apporter des modifications à Defaults env_keep =... le cas échéant.

Vous pouvez également ajouter / usr / local / bin au chemin d'accès du système en ajoutant des fichiers à /etc/profile.d.

par exemple:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF

sudoa une gestion spéciale de PATHdonc vous ne devriez pas faire cela.
Arrowmaster
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.