Ви можете перевірити, чому (це інше), запустивши sudo sudo -V
.
Наприклад, на Linux запустіть:
$ sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Примітка: У MacOS / BSD, просто запустіть: sudo sudo -V
.
Наведений вище список обмежений через плагін політики безпеки за замовчуванням у деяких дистрибутивах Linux.
Це далі пояснюється в man sudoers
:
Якщо secure_path
параметр встановлений, його значення буде використано для PATH
змінної середовища.
secure_path
- Шлях, який використовується для кожної команди, запущеної з sudo. Якщо ви не довіряєте людям, які керують судо, щоб мати здоровий звукPATH
змінну середовища, ви можете скористатися цією.
Інше використання - якщо ви хочете, щоб «кореневий шлях» був окремим від «шляху користувача». Користувачі групи, визначеної exempt_group
опцією, не впливаютьsecure_path
. Ця опція не встановлена за замовчуванням.
Якщо це так, ви можете змінити це, запустивши sudo visudo
та відредагувавши файл конфігурації та змінивши свій secure_path
(додавши додатковий шлях, розділений на :
), або додати свого користувача уexempt_group
(щоб параметри не вплинули на вас secure_path
).
Або для того, щоб пройти користувача PATH
тимчасово, ви можете запустити:
sudo env PATH="$PATH" my_command
і ви можете перевірити це:
sudo env PATH="$PATH" env | grep ^PATH
Дивіться також: Як зробити sudo
заповідник $PATH
?
Інша причина, чому оточення може бути різним sudo
, - це тому, що ви могли мати цеenv_reset
у вашому sudoers
файлі включена опція . Це призводить до виконання команд у новому, мінімальному середовищі.
Таким чином, ви можете використовувати env_keep
параметр (не рекомендується з міркувань безпеки ), щоб зберегти змінні середовища вашого користувача:
Defaults env_reset
Defaults env_keep += "PATH PYTHONPATH"