Настройка 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