Справочная страница 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