sudo 手册页告诉我,我可以通过传递选项来保留环境-E
,但在以下情况下不起作用$TMPDIR
:
> env | grep TMPDIR
TMPDIR=/localdata/tmp
> sudo env | grep TMPDIR
[no output]
> sudo -E env | grep TMPDIR
[no output]
此选项未列入黑名单,即sudo sudo -V
未将其列为“要删除的环境变量”。按照问题“如何指定 root 的环境变量“,我尝试将其列入白名单,这是我的/etc/sudoers
读数:
Defaults env_reset
Defaults env_keep = "TMPDIR"
这也不起作用,它实际上甚至没有TMPDIR
出现在白名单中(也就是说,“sudo sudo -V”打印为“要保留的环境变量”。
(我正在运行 Ubuntu 10.04。)
答案1
看起来 glibc 在运行 setuid 程序时会删除某些环境变量(sudo
当然是 setuid)。TMPDIR 就是这些环境变量之一,尽管它似乎没有在任何地方记录。这是一项安全功能,可防止 setuid 程序的环境被更改以允许恶意读取/写入文件数据。
如果您需要TMPDIR
在 sudo 环境中,您可以明确传递它:
sudo TMPDIR=$TMPDIR env