sudo -E übergibt nicht alle Variablen

5

Beim Lesen von habe man pagesich erwartet sudo -E, dass alle Umgebungsvariablen an die Subshell übergeben werden, aber ich erhalte nicht die erwarteten Ergebnisse.

Wie erwartet, super:

$ export LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/
$ env | grep LD
LD_LIBRARY_PATH=/home/mmendez/toolchains/x86-destdir/usr/lib/

Mehr awesomeness:

$ env -i LD_LIBRARY_PATH=/tmp/no/where env | grep LD
LD_LIBRARY_PATH=/tmp/no/where

Nicht das, was erwartet wurde:

$ env -i LD_LIBRARY_PATH=$LD_LIBRARY_PATH sudo -E /usr/bin/env | grep LD
$
$ env -i LD_LIBRARY_PATH=/tmp/no/where sudo -E /usr/bin/env | grep LD
$

Also, wie kann ich sudo -Epassieren zu LD_LIBRARY_PATH, ohne die Bearbeitung /etc/sudoers?

Bearbeiten :

Gemäß Wie kann ich dafür sorgen, dass sudo meine Umgebungsvariablen beibehält? Das OP zeigt an, dass die Shell in Verbindung mit möglicherweise eine Rolle spielt !env_reset. Ich laufe Arch Linuxund die Standard-Shell ist BASH. Ich möchte noch einmal nicht bearbeiten /etc/sudoers, ist das möglich?

mmlb
quelle

Antworten:

6

Bestimmte Umgebungsvariablen, einschließlich LD_LIBRARY_PATHoder HOSTALIASES(die vollständige Liste befindet sich in sysdeps / generic / unsecvars.h ), werden von glibc beim Ausführen eines privilegierten Programms automatisch deaktiviert (dh mit dem setuid- Bit oder mit Dateisystemfunktionen). Dies ist eine Sicherheitsfunktion, da Benutzer sonst ihre eigenen Bibliotheken in suoder laden sudound sie dazu verleiten könnten, ein Kennwort zu akzeptieren.

Sie müssen verwenden sudo env LD_LIBRARY_PATH=$LD_LIBRARY_PATH yourcommand, um die Variable an Befehle zu übergeben, die über sudo ausgeführt werden.

Grawity
quelle