Встановлюючи PATH таким чином, він застосовується до всіх користувачів, включаючи root / sudo


41

Інструкції в розділі Як встановити змінні PATH для всіх користувачів на сервері? працювати над встановленням PATH для всіх 'нормальних' користувачів. Однак якщо я це зробити, sudo -sто printenv PATHоновлений шлях не відображається. Я розглянув, наприклад, Налаштування TeX Live path для 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що надасть оболонці з привілеями кореня, але містить правильний PATH.


Оригінальний відповідь

Ви повинні встановити його /etc/environment.

Спробуйте sudo YOUR_TEXT_EDITOR /etc/environment(спочатку переконайтеся, що створити резервну копію).

Для отримання додаткової інформації: Змінні середовища

Загальносистемні змінні середовища

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

/etc/environment- Цей файл призначений спеціально для системних параметрів змінної середовища. Це не файл скриптів, а складається з виразів призначення, по одному на рядок. Зокрема, цей файл зберігає загальносистемні параметри та параметри шляху.

Не рекомендовано:

/etc/profile- Цей файл виконується щоразу, коли вводиться оболонка для входу в баш (наприклад, при вході з консолі або над ssh), а також DisplayManager під час завантаження сеансу робочого столу. Це, мабуть, файл, до якого ви звернетеся, запитуючи ветеранських системних адміністраторів про змінні середовища. Однак в Ubuntu цей файл робить трохи більше, ніж викликає файл /etc/bash.bashrc.

/etc/bash.bashrc- Це загальносистемна версія файлу ~ / .bashrc. Ubuntu налаштовано за замовчуванням для виконання цього файлу щоразу, коли користувач вводить оболонку або середовище робочого столу.


Ну добре: для мене це все неправильно навпаки (всі повинні успадковувати той самий шлях, період), але я гадаю, що саме так і є.
Джозеф Райт

Ви можете використовувати visudo(потрібні кореневі дозволи) для редагування налаштувань безпечного шляху. це не рекомендована практика. Це просто тут для освіти.
ТОВ «Елліот Лабораторії»

2

sudo -iбуде імітувати вхід (аналогічним чином sudo su -) та таким чином дасть вам ці змінні середовища.


1
Це не працює так. Принаймні PATH перезавантажується на моєму тесті Ubuntu Trusty-vm.
Martijn Heemels
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.