sudo 不保留 TMPDIR

sudo 不保留 TMPDIR

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

相关内容