Короче говоря: как сделать 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) также.
Боровшийся с той же проблемой в течение нескольких часов. В debian lenny, можно зафиксировать его путем добавления
Defaults exempt_group=<your group>
в sudoers файл.
Это - единственный способ обойти скомпилированный - опция безопасного пути, (насколько я знаю).
В частности, это также освободит пользователей от необходимости ввести их пароль когда они sudo.
Я сказал бы, изучают env_reset и env_keep опции в человеке sudo. Но это кажется, что Вы уже сделали это (Вы просто по ошибке называете env_keep "keepenv"). При отключении env_reset опции (значение по умолчанию включено), я думаю, что это, как предполагается, не стирает огибающих переменных. Но это менее безопасно.
Существует также secure_path опция к sudo; я думаю, что это включено по умолчанию. Вы могли попытаться отключить его.
Предыдущие опции установлены в Вашем/etc/sudoers файле. Существует также -i
параметр командной строки к sudo. Это заставит sudo выполнять/root/.profile или/root/.login. Вы могли установить свой желаемый путь там.
Ну, Вы делаете что-то не так. Кроме того, Вы не указывали то, что Вы сделали со своим/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
Если Вы имеете secure_path
набор /etc/sudoers
, можно играть с env_reset
/ env_keep
все, что Вы любите и это не будет иметь никакого значения к пути. Если Вы видите что-то вроде этого, комментируете его.
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin