[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: