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

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

3 ответа

Решение

Обновить:

Установка глобальных переменных среды все еще должна выполняться в /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 по умолчанию настроен на выполнение этого файла всякий раз, когда пользователь входит в оболочку или среду рабочего стола.

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

В случае, если нам нужно добавить /usr/local/binв root's PATHдобавив ту же запись в /etc/sudoersфайл, затем используйте команду sed следующим образом

      sudo sed -i '/^Defaults secure_path/ s/$/\:\/usr\/local\/\bin/' /etc/sudoers
Другие вопросы по тегам