Какую среду я получаю с sudo?

15

Когда я запускаю sudo, что именно происходит с моим окружением?

Когда я бегу sudo command, он, кажется, не видит среду моего или root. Например, мой путь к обоим включает /usr/local/bin, но если я пытаюсь запустить одну из программ без полного пути, она терпит неудачу.

Я думал, что sudo запускается как root, и, следовательно, получил среду root. Есть ли другой способ выполнения bash под sudo, чем под root или моим обычным пользователем?

РЕДАКТИРОВАТЬ:

Я использовал в sudo -iпоследнее время, но в последнее время это вызывает проблемы, потому что мой текущий рабочий каталог установлен в /root. Это как и ожидалось (Сорта), но я все еще не понимаю, почему sudo не распознает мои исполняемые файлы /usr/local/bin.

РЕДАКТИРОВАТЬ:

Я использую Fedora 15

beatgammit
источник
Какую ОС вы используете (если Linux, какой дистрибутив)? Существует (слишком) много способов настройки PATH, и иногда нелегко найти, кто его переопределяет последним. Это может быть какая-то системная настройка (например, в PAM), сама sudo или последующий скрипт профиля.
Жиль "ТАК - перестань быть злым"
@ Жиль: Хороший вопрос. Я добавил свою ОС. Я действительно заметил это только в Fedora (я использовал Ubuntu), но я подумал, что это потому, что они не добавили много удобных настроек.
beatgammit

Ответы:

6

Я не знаю о настройках по умолчанию в Fedora, но в Debian по sudoумолчанию используется secure_pathопция со значением по умолчанию /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Это означает, что путь меняется на это значение каждый раз, когда вы используете sudo; но при использовании sudo -iпуть изменяется после этого файлами RC пользователя root.

Arrowmaster
источник
Я не знал об этом secure_pathварианте. По умолчанию не включены /usr/local/binв мою установку. Спасибо, это действительно помогло прояснить ситуацию!
ритммит
4

Вы можете проверить это довольно просто с такими вещами, как

Сравните вывод из

sudo env 
env

И тому подобное

sudo whoami 
whoami

Таким образом, вы можете попытаться выяснить, чего не хватает в вашей настройке.

Johan
источник
Круто, не знал об этом. Во всяком случае, /usr/local/binне в моем sudo env, но это в моем корневом env и env пользователя. Почему это?
ритммит
sudo whoami возвращается root, как и ожидалось. Что может быть причиной того, что мой sudo env отличается от моего корневого env?
ритммит
Не знаю, но где-то должна быть какая-то пропущенная настройка, обычно включается / usr / local / bin. Может быть, вы очистили env $ PATH по ошибке в каком-то файле конфигурации?
Йохан
Есть ли у sudo источник /root/.bashrc? Вот где я добавляю /usr/local/binпуть root (к сожалению, мне пришлось делать это вручную)?
ритммит
Я думаю, что вы должны изменить свой глобальный конфиг оболочек и посмотреть, что произойдет. Если вы используете bash, это будет что-то вроде /etc/bash.bashrc
Йохан,
2

Команда sudo -iимитирует начальный вход в систему. В моей системе Debian также указано, что:

Это означает, что специфичные для входа файлы ресурсов, такие как .profile или .login, будут читаться оболочкой. Если указана команда, она передается в оболочку для выполнения. В противном случае, интерактивная оболочка выполняется. sudo пытается перейти в домашний каталог этого пользователя перед запуском оболочки. Он также инициализирует среду, оставляя DISPLAY и TERM неизменными, устанавливая HOME, MAIL, SHELL, USER, LOGNAME и PATH, а также содержимое / etc / environment в системах Linux и AIX. Все остальные переменные среды удаляются.

M'vy
источник
0

Вы можете настроить sudo«s env_keepпараметр , чтобы включить PATH, хотя вы должны иметь в виду последствия для безопасности сделать это.

visudo

... запустит ваш $EDITOR, затем вы можете внести изменения в Defaults env_keep =... по мере необходимости.

Кроме того, вы можете добавить / usr / local / bin в системный путь, добавив файлы в /etc/profile.d.

например:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF
Брайан Каин
источник
sudoимеет специальную обработку, PATHтак что вы не должны этого делать.
Arrowmaster