Welche Umgebung bekomme ich mit sudo?

14

Was passiert mit meiner Umgebung, wenn ich sudo starte?

Wenn ich renne sudo command, sieht es anscheinend nicht die Umgebung von mir oder root. Beispielsweise enthält mein Pfad für beide /usr/local/bin, aber wenn ich versuche, eines der Programme ohne den vollständigen Pfad auszuführen, schlägt dies fehl.

Ich dachte, sudo lief als root und bekam daher root`s Umgebung. Gibt es eine andere Art und Weise, wie bash unter sudo ausgeführt wird als unter root oder meinem normalen Benutzer?

BEARBEITEN:

Ich habe in sudo -iletzter Zeit verwendet, aber in letzter Zeit hat es Probleme verursacht, weil mein aktuelles Arbeitsverzeichnis auf festgelegt wird /root. Das ist wie erwartet (sorta), aber ich verstehe immer noch nicht, warum sudo meine ausführbaren Dateien in nicht erkennt /usr/local/bin.

BEARBEITEN:

Ich verwende Fedora 15.

Beatgammit
quelle
Welches Betriebssystem verwenden Sie (wenn Linux, welche Distribution)? Es gibt (zu) viele Konfigurationsmöglichkeiten PATH, und manchmal ist es nicht einfach zu finden, wer es zuletzt überschreibt. Es kann sich um eine Systemeinstellung (z. B. in PAM), sudo selbst oder ein nachfolgendes Profilskript handeln.
Gilles 'SO- hör auf böse zu sein'
@ Gilles- Guter Punkt. Ich habe mein Betriebssystem hinzugefügt. Ich habe dies nur unter Fedora (ich habe Ubuntu verwendet) wirklich bemerkt, aber ich dachte, das lag daran, dass sie nicht viel Komfort-Setup hinzugefügt haben.
Beatgammit

Antworten:

6

Ich weiß nichts über die Standardeinstellungen unter Fedora, aber unter Debian wird sudostandardmäßig die secure_pathOption mit einem Standardwert von verwendet /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Dies bedeutet, dass der Pfad bei jeder Verwendung auf diesen Wert geändert wird sudo. aber wenn du benutztsudo -i , wird der Pfad danach von den RC-Dateien des Root-Benutzers geändert.

Pfeilmeister
quelle
Ich wusste nichts über die secure_pathOption. Die Standardeinstellung war /usr/local/binin meiner Installation nicht enthalten . Danke, das hat wirklich geholfen, die Dinge zu klären!
Beatgammit
3

Sie können dies ganz einfach mit Dingen wie überprüfen

Vergleichen Sie die Ausgabe von

sudo env 
env

Und solche Sachen

sudo whoami 
whoami

Auf diese Weise können Sie herausfinden, was in Ihrem Setup fehlt.

Johan
quelle
Cool, wusste nichts davon. Wie auch immer, /usr/local/binist nicht in meinem sudo env, aber es ist in meinem root env und user env. Warum ist das?
Beatgammit
sudo whoami kehrt rootwie erwartet zurück. Was könnte dazu führen, dass mein sudo env anders ist als mein root env?
Beatgammit
Weiß nicht, aber irgendwo muss ein Setup fehlen, / usr / local / bin ist normalerweise enthalten. Vielleicht haben Sie die $ PATH-Umgebung versehentlich in einer Konfigurationsdatei gelöscht?
Johan
Hat sudo /root/.bashrc als Quelle? Dort füge ich /usr/local/binroot`s Pfad hinzu (musste ich das leider manuell machen)?
Beatgammit
Ich denke, Sie sollten Ihre Shells Global Config ändern und sehen, was passiert. Wenn Sie bash ausführen, ist dies etwa /etc/bash.bashrc
Johan
2

Das sudo -i Befehl simuliert die Erstanmeldung. Auf meinem Debian-System heißt es außerdem:

Dies bedeutet, dass anmeldungsspezifische Ressourcendateien wie .profile oder .login von der Shell gelesen werden. Wenn ein Befehl angegeben ist, wird er zur Ausführung an die Shell übergeben. Andernfalls wird eine interaktive Shell ausgeführt. sudo versucht, in das Ausgangsverzeichnis dieses Benutzers zu wechseln, bevor die Shell ausgeführt wird. Es initialisiert auch die Umgebung, wobei DISPLAY und TERM unverändert bleiben und HOME, MAIL, SHELL, USER, LOGNAME und PATH sowie der Inhalt von / etc / environment auf Linux- und AIX-Systemen festgelegt werden. Alle anderen Umgebungsvariablen werden entfernt.

M'vy
quelle
0

Sie können sudoden env_keepParameter von 's so anpassen , dass er einschließt PATH. Beachten Sie dabei jedoch die Auswirkungen auf die Sicherheit.

visudo

... startet Ihr $EDITOR, dann können Sie nach Bedarf Änderungen an Defaults env_keep =... vornehmen .

Sie können dem Systempfad auch / usr / local / bin hinzufügen, indem Sie Dateien hinzufügen /etc/profile.d.

z.B:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF
Brian Cain
quelle
sudohat spezielle Handhabung, PATHso dass Sie dies nicht tun sollten.
Arrowmaster