sudo -E 没有传递所有变量

sudo -E 没有传递所有变量

阅读man pages我希望sudo -E将所有环境变量传递给子 shell,但没有得到预期的结果。

正如预期的那样,棒极了:

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

更多精彩:

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

并非预期的那样:

$ 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
$

那么,我怎样才能sudo -E通过LD_LIBRARY_PATH没有编辑/etc/sudoers

编辑

根据 如何让 sudo 保留我的环境变量?楼主指出 shell 可能与 一起发挥作用!env_reset。我正在运行Arch Linux,默认 shell 是BASH。我再一次这样做了不是想要编辑/etc/sudoers,可以吗?

答案1

某些环境变量,包括LD_LIBRARY_PATHHOSTALIASES(完整列表位于sysdeps/通用/unsecvars.h) 在执行特权程序时会自动被 glibc 取消设置(即使用设置用户标识位或具有文件系统功能)。这是一项安全功能,否则用户可以将自己的库加载到su或中sudo并诱骗他们接受任何密码。

您将需要使用sudo env LD_LIBRARY_PATH=$LD_LIBRARY_PATH yourcommand来将变量传递给通过 sudo 运行的命令。

相关内容