Mit sudo 1.7.4p4 unter Solaris 5.10 und sudo 1.6.7p5 unter RHEL4 u6 kann ich meine Umgebungsvariablen, z. B. $ PYTHONPATH, nicht beibehalten. Ich habe diese Zeile zu sudoers hinzugefügt, aber es macht keinen Unterschied:
Defaults !env_reset
Mache ich etwas falsch oder beachtet die sudo-Installation einfach nicht das env_reset-Flag?
Bearbeiten: Zumindest unter Solaris haben wir festgestellt, dass dieses Problem von der Shell abhängt! Die Standard-Root-Shell ist Bourne. Wenn Sie Bash unter sudo ( sudo bash
) ausführen, wird die Umgebung durch! Env_preset erhalten (einschließlich PATH und LD_LIBRARY_PATH). Das ist ziemlich verwirrend, muss ich sagen.
Antworten:
Vorsichtig verwenden, es gibt Sicherheitsprobleme mit sudo und Variablen.
Von
man sudoers
mir fand ich, dass du verwenden solltestErhält in Ubuntu
sudo
einige Variablen.sudo -i
Es ist eher so, als würde man sich als root anmelden und dann den Befehl ausführen. Beides kann unpraktisch sein, da erstere Stammdateiensudo nano myfile
in Ihrem Heim belässt und letzteresudo -i nano myfile
versuchen, / root / myfile zu öffnen.Lauf
und sehen, was es gibt. Hier gibt es
zum Beispiel. Führen
sudo visudo
Sie nun die Zeile aus und fügen Sie sie hinzuErsetzen durch das, was Sie gerade zuvor gefunden haben. Fügen Sie bei Bedarf einen neuen Pfad hinzu.
Über Bibliotheken:
Linux-Distributionen sind sehr
PATH
vorsichtig, und Sie sollten wirklich vorsichtig sein, bevor Sie damit spielen. Seien Sie besonders vorsichtig, wenn Sie Pfade wie ".
" oder " " hinzufügen. Dies/home/username
ist unsicher.Eine der Gefahren beim Hinzufügen von Pfaden besteht darin, dass die Möglichkeit besteht, dass Dateien auf diesen Pfaden ausgeführt werden
root
und ein Fenster in der Systemsicherheit geöffnet wird, das möglicherweise von bösartiger Software ausgenutzt wird. Es kann andere Gefahren geben. Stellen Sie einfach sicher, dass Sie wissen, was Sie tun. Durch das Umgehen vonsudo
Sicherheitsmaßnahmen wird Solaris möglicherweise so sicher wie Windows XP.quelle
sudo
Autoren sorgfältig darauf geachtet haben, Sie daran zu hindern. Sie möchten nicht, dass schädliche Bibliotheken geladen werden, da sie in dem von sudo verwendeten Pfad gefunden wurden. Deshalb wird es zurückgesetzt. Wenn Sie Dinge codieren, die von root ausgeführt werden sollen, kopieren Sie sie in das entsprechende Systemverzeichnis.Hantieren mit
sudoers
ist mit Vorsicht zu tun, wie andere gesagt haben.Ein einfacherer Ansatz für einfachere Fälle, in denen bestimmte Umgebungsvariablen beibehalten werden sollen, besteht darin, die gewünschte Umgebungsvariable direkt über sudo zu übergeben (dies wird
[VAR=value]
in der sudo-Cmdline-Hilfe angezeigt).Sehen Sie sich dieses kleine Beispiel an, in dem ich es auch für mehr als eine Variable demonstriert habe.
PYTHONPATH
Verwenden Sie für das ursprüngliche Beispiel in der Frage einfach Folgendes:Das Erstellen eines Alias für diese Art von Dingen ist praktisch. Wie so:
quelle
Sie sehen in
Defaults !env_reset
Ordnung aus, vorausgesetzt, Sie rufen mit dieser-E
Option nicht auch sudo auf .Sie können versuchen, diesen Eintrag vollständig zu entfernen.
Haben Sie überprüft, ob Sie die richtige sudoers-Datei bearbeiten? Ich vermute, es könnte sein
/etc/sudoers
oder/usr/local/etc/sudoers
je nachdem, wie es installiert wurde. Hast du es mit bearbeitetvisudo
?Wie läuft Sudo?
sudo python
,sudo su
,sudo su -
,sudo -s
, Etwas anderes? Nursudo python
undsudo su
würde Ihre Umwelt erhalten.Was
env | grep PYTHONPATH
heißt das? Wenn nichts, stellen Sie sicher, dass PYTHONPATH exportiert wird, indem Sie ausführenexport PYTHONPATH
und es erneut versuchen.Was
sudo env | grep PYTHONPATH
heißt das? Wenn der erwartete Wert ausgegeben wird, überschreibt etwas anderes Ihren PYTHONPATH-Wert. Vielleicht Roots .bashrc oder .bash_profile oder die systemweiten Konfigurationsdateien.quelle
editor
oderpassprompt
zu ändern, um festzustellen, ob Sie die richtige Datei haben. Oder verwenden Sie strace, dtrace, truss oder ähnliches und sehen Sie, welche Dateien geöffnet werden.Laut Ubuntu-Dokumentation für LD_LIBRARY_PATH :
Dann:
Fügen Sie eine
ld.so
Konfigurationsdatei/etc/ld.so.conf.d/
mit dem Pfad Ihrer hinzuLD_LIBRARY_PATH
Aktualisiere den Cache mit:
quelle