Передача ПУТИ через sudo

Короче говоря: как сделать sudo для не сбрасывания ПУТИ каждый раз?

У меня есть некоторые веб-сайты, развернутые на моем сервере (тестирование Debian) записанный с Ruby on Rails. Я использую Mongrel+Nginx для хостинга их, но существует одна проблема, которая прибывает, когда я должен перезапустить Полукровку (например, после внесения некоторых изменений).

Все сайты проверяются в VCS (мерзавец, но это не важно), и установите владельца и группу моему пользователю, тогда как Полукровка работает под, ха, пользователь полукровки, который сильно ограничивается в, он - права. Таким образом, Полукровка должна быть запущена под корнем (он может автоматически изменить UID), или полукровка.

Для управления полукровкой, я использую mongrel_cluster драгоценный камень, потому что он позволяет запускать или останавливать любую сумму серверов Полукровки со всего одной командой. Но этому нужен каталог/var/lib/gems/1.8/bin, чтобы быть в ПУТИ: этого недостаточно для запуска его с полного пути.

При изменении ПУТИ в корне .bashrc ничего не изменил, настроив env_reset sudo, и env_keep не сделал также.

Так вопрос: как добавить каталог, чтобы СОЕДИНИТЬ КАНАЛОМ или сохранить ПУТЬ пользователя в sudo?

Обновление: некоторые примеры

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults    env_keep = "PATH"
root    ALL=(ALL) ALL
%sudo ALL=NOPASSWD: ALL
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Также я могу сказать, что это работает точно этот путь в Debian, стабильном (lenny) также.

13
задан 16.04.2010, 18:23

4 ответа

Боровшийся с той же проблемой в течение нескольких часов. В debian lenny, можно зафиксировать его путем добавления

Defaults        exempt_group=<your group> 

в sudoers файл.

Это - единственный способ обойти скомпилированный - опция безопасного пути, (насколько я знаю).

В частности, это также освободит пользователей от необходимости ввести их пароль когда они sudo.

12
ответ дан 07.12.2019, 11:39

Я сказал бы, изучают env_reset и env_keep опции в человеке sudo. Но это кажется, что Вы уже сделали это (Вы просто по ошибке называете env_keep "keepenv"). При отключении env_reset опции (значение по умолчанию включено), я думаю, что это, как предполагается, не стирает огибающих переменных. Но это менее безопасно.

Существует также secure_path опция к sudo; я думаю, что это включено по умолчанию. Вы могли попытаться отключить его.

Предыдущие опции установлены в Вашем/etc/sudoers файле. Существует также -i параметр командной строки к sudo. Это заставит sudo выполнять/root/.profile или/root/.login. Вы могли установить свой желаемый путь там.

0
ответ дан 07.12.2019, 11:39

Ну, Вы делаете что-то не так. Кроме того, Вы не указывали то, что Вы сделали со своим/etc/sudoers файлом. Вот то, что необходимо было сделать - это - система CentOS, BTW:

Во-первых, это с правом env_keep устанавливающий (заметьте, что ПУТЬ там):

sudo grep-5 ПУТЕЙ/etc/sudoers Значения по умолчанию env_keep = "ЦВЕТА ОТОБРАЖАЮТ ИМЯ ХОСТА HISTSIZE INPUTRC KDEDIR \ПОЧТОВОЕ ИМЯ ПОЛЬЗОВАТЕЛЯ PS1 PS2 QTDIR LS_COLORS \LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION ЛЕНГА \LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ЯЗЫКИ ЯЗЫКА LC_PAPER LC_TELEPHONE LC_TIME LC_ALL \_XKB_CHARSET XAUTHORITY ПУТЬ"

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

Хорошие взгляды. Теперь давайте удалим установку env_keep и попробуем еще раз:

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

Какой печальный ПУТЬ:

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin
-1
ответ дан 07.12.2019, 11:39

Если Вы имеете secure_path набор /etc/sudoers, можно играть с env_reset / env_keep все, что Вы любите и это не будет иметь никакого значения к пути. Если Вы видите что-то вроде этого, комментируете его.

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
3
ответ дан 07.12.2019, 11:39

Теги

Похожие вопросы