Re: sudo Defaults !env_reset
On Sun, 22 Jan 2006 18:59:23 +0300, Alexandra N. Kossovsky wrote:
> > Defaults env_keep=DISPLAY
> > потом, когда эта не дала ничего
> > Defaults !env_reset
> > но по прежнему переменнная сбрасывается
> Мне помогло следующее:
> Defaults env_check+="HOME DISPLAY"
> Defaults env_keep+="HOME DISPLAY"
> Defaults env_reset
> Без последней строчки оно _не_ работает. Подозреваю, что это результат
> Debian'овского backport'а, а не замысел авторов sudo.
Сейчас тоже вникал в изменения, и вот что выяснил. Новая логика работы
sudo с переменными окружения такова: удаляются все, кроме LC_*, LANG,
LANGUAGE и TERM. Чтобы какая-нибудь переменная осталась, нужно добавить
её в env_check. НО! Содержимое любой переменной из этого списка
проверяется на наличие символов '%' и '/', при наличии этих символов
переменная не передаётся. Поэтому
Defaults env_check+="HOME DISPLAY"
оставит только переменную DISPLAY, а HOME удалит (из-за '/' в пути).
В случае же env_reset окружение пересоздаётся (переменным HOME, LOGNAME,
PATH, SHELL, USER присваиваются дефолтовые значения, TERM передаётся
какой была). Вот для того, чтобы в новое окружение перенести старые
переменные и нужен список env_keep.
Т.е. либо env_check, либо env_keep и env_reset. Поэтому для запуска
иксовых прог достаточно
Defaults env_keep=DISPLAY,env_reset
Потестить, что же остаётся после sudo, можно с помощью printenv.
Итог: Сейчас без env_reset нельзя оставить переменные, содержащие символы
'/' и '%'.
--
С уважением,
Игорь.
Reply to: