sudo 不保留 TMPDIR

Mir*_*gel 5 sudo environment-variables tmp

sudo 联机帮助页告诉我,我可以通过传递选项来保护环境-E,这在以下情况下不起作用$TMPDIR

> env | grep TMPDIR
TMPDIR=/localdata/tmp
> sudo env | grep TMPDIR
[no output]
> sudo -E env | grep TMPDIR
[no output]
Run Code Online (Sandbox Code Playgroud)

此选项未列入黑名单,即sudo sudo -V未将其列为“要删除的环境变量”。按照问题“如何指定根的环境变量”的答案中提出的方法,我尝试将其列入白名单,这是我的/etc/sudoers读物:

Defaults        env_reset
Defaults        env_keep = "TMPDIR"
Run Code Online (Sandbox Code Playgroud)

这也不起作用,它实际上甚至没有TMPDIR出现在白名单中(即“sudo sudo -V”打印为“要保留的环境变量”)。

(我运行的是 Ubuntu 10.04。)

hru*_*ing 5

看起来 glibc 在运行 setuid 程序时会删除某些环境变量(sudo当然是 setuid)。TMPDIR 是这些环境变量之一,尽管它似乎没有在任何地方记录。这是一项安全功能,可防止 setuid 程序更改其环境以允许恶意读取/写入文件数据。

如果你想TMPDIR在你的 sudo 环境中,你可以明确地传递它:

sudo TMPDIR=$TMPDIR env
Run Code Online (Sandbox Code Playgroud)