Als Beispiel für meine Frage ~/.bashrc
enthält meine Datei folgende Zeilen:
export LD_LIBRARY_PATH=/opt/intel/mkl/lib/ia32:$LD_LIBRARY_PATH
export LD_PRELOAD=/opt/intel/mkl/lib/ia32/libmkl_core.so
damit Numpy (Python) Bibliotheken finden kann, die es ausführen muss, da es mit MKL- und Intel-Compilern erstellt wurde. Dieser Workflow ist nicht der beste, aber das ist eine andere Geschichte.
Meine Frage ist, wie kann ich beliebige Variablen (wie die in ~/.bashrc
) übergeben, wenn ich ein Programm mit 'sudo' (aber nicht root) starte?
Derzeit, wenn ich laufe:
sudo python -c "import numpy"
Ich erhalte einen Fehler:
ImportError: libimf.so: cannot open shared object file: No such file or directory*
Einige Vorschläge als sudo -i
oder sudo -E
ändern hier nichts.
Bearbeiten:
Ich kann meine Frage nicht beantworten (nicht genug Punkte: D), aber ich werde mich hier äußern, in der Hoffnung, dass sich andere Linux-Neulinge über sudo
Fallen wundern .
[Nur vorübergehend!] Das funktioniert bei mir ( ~/.bashrc
):
alias sudo='sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE...'
Die
-E
Option, die Sie erwähnen, scheint gut zu funktionieren:quelle
sudo python -c "import numpy"
mitLD_LIBRARY_PATH
undLD_PRELOAD
definiert , wie oben geschrieben?SECURITY NOTES
dersudo
Handbuchseite angegeben.man sudo
dies nicht klar macht, und wenn der Benutzer versucht, den dort angegebenen Referenzen zu folgen, es sehr leicht ist, sich von allen zu befolgenden Zweigen entmutigen zu lassen, um vermeintlich entschlüsseln zu können Bedeutung.Sie können die
-E
sudo-Option verwenden, um die aktuelle Umgebung beizubehalten (sofern Sie dazu berechtigt sind).quelle
Sie benötigen zu bearbeiten ,
sudoers
indemsudo visudo
als möglicherweise haben Sicherheitspolitik Plugin aktiviert Sie , die Ihre überschreibtPATH
durchsecure_path
Option. Fügen Sie den Pfad zur Liste hinzu, und verwenden Sieenv_keep
stattdessen beispielsweise Folgendes:PATH
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Ihre überschrieben wurde:Siehe auch: Warum unterscheiden sich PATH-Variablen bei der Ausführung über sudo und su? bei Unix SE
quelle
env_keep
funktioniert aber nicht auf PFAD (in dem Sinne, dersudo
nochsecure_path
bei der Suche nach dem Befehl verwendet wird)Das funktioniert bei mir (
~/.bashrc
):Quelle: Gemäß OP edit
quelle
sudo
weniger sicher macht