Це сильно залежить від того, як ви називаєте програму за допомогою 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.