sudo不保存TMPDIR

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程序的环境发生变化,从而允许恶意读取/写入文件数据。

  • 参考: ld.so清除setuid程序的TMPDIR
  • 参考: 当setuid为dumpcap时,TMPDIR被忽略

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

 sudo TMPDIR=$TMPDIR env