Environment-Variables

sudo 不保留 TMPDIR

  • February 15, 2013

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。)

看起來 glibc 在執行 setuid 程序時會刪除某些環境變數(sudo當然是 setuid)。TMPDIR 是這些環境變數之一,儘管它似乎沒有在任何地方記錄。這是一項安全功能,可防止 setuid 程序更改其環境以允許惡意讀取/寫入文件數據。

如果你想TMPDIR在你的 sudo 環境中,你可以明確地傳遞它:

sudo TMPDIR=$TMPDIR env

引用自:https://serverfault.com/questions/478741