Настройка PATH так, чтобы она применялась ко всем пользователям, включая root / sudo

41

Инструкции в разделе Как установить переменные PATH для всех пользователей на сервере? работать, чтобы установить PATH для всех «нормальных» пользователей. Тем не менее, если я делаю, sudo -sа затем printenv PATHобновленный путь не отображается. Я рассмотрел, например, « Настройка пути TeX Live для root» , но мне это, кажется, не имеет смысла, возможно, так как я из Windows. Есть ли способ установить действительно общесистемный путь, чтобы записи наследовались абсолютно всеми процессами, работающими в системе?

Джозеф Райт
источник

Ответы:

43

Обновить:

Установка глобальных переменных среды все еще должна выполняться /etc/environment, но, как вы указали, использование sudo -sприводит к тому, что эти переменные «исчезают».

Причиной тому является sudoполитика сброса Среды и установки безопасного пути . Он включен по умолчанию:

/etc/sudoers:

Defaults  env_reset
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Таким образом, все, что установлено в /etc/environmentдля пути, переопределяется sudo.

Страница руководства для sudoersгосударств:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller's environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

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


Оригинальный ответ

Вы должны установить это в /etc/environment.

Попробуйте sudo YOUR_TEXT_EDITOR /etc/environment(сначала создайте резервную копию).

Для получения дополнительной информации: EnvironmentVariables

Общесистемные переменные среды

Параметры переменных среды, которые влияют на систему в целом (а не только на конкретного пользователя), не следует помещать ни в один из многих сценариев системного уровня, которые выполняются при загрузке системы или сеанса рабочего стола, а в

/etc/environment- Этот файл специально предназначен для общесистемных настроек переменных среды. Это не файл сценария, а скорее состоит из выражений присваивания, по одному на строку. В частности, этот файл хранит общесистемные настройки языка и пути.

Не рекомендуется:

/etc/profile- Этот файл выполняется при каждом входе в оболочку входа в bash (например, при входе через консоль или через ssh), а также в DisplayManager при загрузке сеанса рабочего стола. Вероятно, это файл, на который вы будете ссылаться, когда будете спрашивать ветеранов системы UNIX о переменных среды. Однако в Ubuntu этот файл делает чуть больше, чем вызывает файл /etc/bash.bashrc.

/etc/bash.bashrc- Это общесистемная версия файла ~ / .bashrc. Ubuntu по умолчанию настроен на выполнение этого файла всякий раз, когда пользователь входит в оболочку или среду рабочего стола.

lgarzo
источник
Ах, хорошо: для меня это все неправильно (все должны наследовать один и тот же путь, точка), но я думаю, что так оно и есть.
Джозеф Райт
Вы можете использовать visudo(необходимы права root) для редактирования настроек безопасного пути. это не рекомендуемая практика. Это просто здесь для образования.
Elliot Labs LLC
2

sudo -iбудет имитировать вход в систему (аналогично sudo su -) и, таким образом, даст вам эти переменные среды.

ℝaphink
источник
1
Это не работает таким образом. По крайней мере, PATH сбрасывается на моем Ubuntu Trusty test-vm.
Мартин Хеемельс