Это сильно зависит от того, как вы вызываете свою программу с помощью 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
пытается перейти в домашний каталог этого пользователя перед запуском оболочки. Команда запускается в среде, аналогичной той, которую пользователь получит при входе в систему . Раздел Командная среда в руководстве sudoers (5) описывает, как параметр -i влияет на среду, в которой выполняется команда, когда используется политика sudoers.