阅读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_PATH
或HOSTALIASES
(完整列表位于sysdeps/通用/unsecvars.h) 在执行特权程序时会自动被 glibc 取消设置(即使用设置用户标识位或具有文件系统功能)。这是一项安全功能,否则用户可以将自己的库加载到su
或中sudo
并诱骗他们接受任何密码。
您将需要使用sudo env LD_LIBRARY_PATH=$LD_LIBRARY_PATH yourcommand
来将变量传递给通过 sudo 运行的命令。