Короче говоря : как заставить sudo не сбрасывать PATH каждый раз?
У меня есть несколько сайтов, развернутых на моем сервере (тестирование Debian), написанных на Ruby on Rails. Я использую Mongrel + Nginx для их размещения, но есть одна проблема, которая возникает, когда мне нужно перезапустить Mongrel (например, после внесения некоторых изменений).
Все сайты проверяются в VCS (git, но это не важно) и имеют владельца и группу, настроенные для моего пользователя, в то время как Mongrel работает от имени пользователя mongrel, который строго ограничен в своих правах. Таким образом, Mongrel должен быть запущен под root (он может автоматически менять UID) или mongrel.
Для управления mongrel я использую gem mongrel_cluster, потому что он позволяет запускать или останавливать любое количество серверов Mongrel всего одной командой. Но для этого нужно, чтобы каталог /var/lib/gems/1.8/bin находился в PATH: этого недостаточно для запуска с абсолютным путем .
Модификация PATH в корне .bashrc ничего не изменила, не изменив настройки sudo env_reset и env_keep.
Итак, вопрос: как добавить каталог в PATH или сохранить PATH пользователя в 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 вы можете исправить это, добавив
в файл sudoers.
Это единственный способ обойти скомпилированную опцию --secure-path (насколько я знаю).
Примечательно, что это также освобождает пользователей от необходимости вводить свой пароль при выполнении sudo.
источник
Если вы
secure_path
установили/etc/sudoers
, вы можете играть сenv_reset
/env_keep
все, что вам нравится, и это не будет иметь никакого значения для пути. Если вы видите что-то подобное, закомментируйте это.источник
Я бы сказал, посмотрите параметры env_reset и env_keep в man sudo . Но похоже, что вы уже сделали это (вы просто по ошибке называете env_keep "keepenv"). Если вы отключите опцию env_reset (по умолчанию включено), я думаю, что она не должна стирать никакие переменные env. Но это менее безопасно.
Есть также опция secure_path для sudo; Я думаю, что это включено по умолчанию. Вы можете попробовать отключить его.
Предыдущие параметры задаются в вашем файле / etc / sudoers. Там также
-i
опция командной строки для sudo. Это заставит sudo запустить /root/.profile или /root/.login. Вы можете установить желаемый путь там.источник
Ну, вы делаете что-то не так. Кроме того, вы не указали, что вы сделали с вашим файлом / etc / sudoers. Вот что вы должны были сделать - это система CentOS, кстати:
Во-первых, это с правильной настройкой env_keep (обратите внимание, что там есть PATH):
Выглядит хорошо. Теперь давайте удалим настройку env_keep и попробуем снова:
Какой печальный путь
источник