Це сильно залежить від того, як ви називаєте програму за допомогою sudo
або su
.
Наприклад, про систему, на якій я перебуваю в цей момент:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
Де [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Змінні середовища скидаються на 1 та 5, взяті з $ USER у 2,3,4.
Тому сценарій або програма , яка запускається з іншим варіантом можна побачити різні $PATH
, $HOME
його оболонка може зчитувати різні .bashrc
, .profile
і змінні оточення. Він читає файл, пов'язаний з $HOME
. Кожен користувач може змінювати своє оточення по-різному (змінні $PATH
,, .bashrc, .profile, .bash_profile, псевдонім ...). Зокрема, користувач може мати інший порядок каталогів у своєму, $PATH
і, як наслідок, скрипт може виконувати команду, наприклад, /home/$USER/bin
замість того, що знаходиться в шляху, очікуваному від root.
Ви можете запустити програму під тим, sudo -i
як ви були зареєстровані як root su -
, але ви можете мати іншу поведінку, якщо ви запускаєте її з sudo MyCommand
або з su -c MyCommand
.
Від man su
:
У частині опису:
поточне середовище передається новій оболонці . Значення $ PATH скидається на / bin: / usr / bin для звичайних користувачів, або / sbin: / bin: / usr / sbin: / usr / bin для суперпользователя
...
У частині параметрів:
- , -l , --login
Надайте оточення, схоже на те, що очікував би користувач, якби користувач ввійшов безпосередньо .
Від людини sudo
-i , --login
Запустіть оболонку, задану вводом бази даних пароля цільового користувача у вигляді оболонки для входу. Це означає, що оболонки зчитуються специфічними для входу файлами ресурсів, такими як .profile або .login. Якщо вказана команда, вона передається в оболонку для виконання через опцію -c оболонки. Якщо команда не вказана, виконується інтерактивна оболонка. sudo
намагається змінити домашній каталог цього користувача перед запуском оболонки. Команда виконується із середовищем, подібним до того, яке користувач отримав би під час входу . У розділі Command Environment у посібнику з судерів (5) зафіксовано, як опція -i впливає на середовище, в якому виконується команда, коли використовується політика sudoers.