sudo manpage告诉我,我可以通过传递-E选项来保护环境,在$TMPDIR的情况下这不起作用:
> env | grep TMPDIR TMPDIR=/localdata/tmp > sudo env | grep TMPDIR [no output] > sudo -E env | grep TMPDIR [no output]
这个选项没有列入黑名单,那就是sudo sudo -V没有把它列为“要移除的环境variables”。 按照在回答中提出的方法,“ 如何指定root的环境variables ”这个问题,我试图把它列入白名单,那就是我的/etc/sudoers写道:
Defaults env_reset Defaults env_keep = "TMPDIR"
这也不起作用,它实际上甚至不使TMPDIR出现在白名单中(也就是,sudo sudo -V打印为“要保存的环境variables”)。
(我正在运行Ubuntu 10.04。)
看起来像运行setuid程序时,glibc将删除某些环境variables( sudo当然是setuid)。 TMPDIR是这些环境variables之一,尽pipe它似乎没有logging在任何地方。 这是一个安全function,可防止setuid程序的环境发生变化,从而允许恶意读取/写入文件数据。
如果你想在你的sudo环境中使用TMPDIR ,你可以明确地传递它:
sudo TMPDIR=$TMPDIR env