sudo -E 不传递所有变量

mml*_*mlb 6 sudo bash environment-variables

阅读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/
Run Code Online (Sandbox Code Playgroud)

更多精彩:

$ env -i LD_LIBRARY_PATH=/tmp/no/where env | grep LD
LD_LIBRARY_PATH=/tmp/no/where
Run Code Online (Sandbox Code Playgroud)

不是预期的:

$ 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
$
Run Code Online (Sandbox Code Playgroud)

所以,我怎么能得到sudo -E通过LD_LIBRARY_PATH而无需编辑/etc/sudoers

编辑

根据 如何使 sudo 保留我的环境变量?OP 表明外壳可能与!env_reset. 我正在运行Arch Linux,默认 shell 是BASH. 再次,我想要编辑/etc/sudoers,这可能吗?

use*_*686 7

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

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