Как следует из заголовка, есть ли разница между этими двумя командами:
sudo su - root
sudo -u root -H /bin/bash
Я использую GNU/Linux, если это имеет значение.
решение1
Если вы хотите стать пользователем root, лучший способ сделать это — sudo -i
, который имитирует первоначальный вход в систему (предоставляя вам все пути и переменные, связанные с входом в систему root). Если вы хотите войти в систему, не получая пользователей root.файлы, вы можете просто использовать sudo su
(не нужно указывать пользователя root).
решение2
su - # causes the user to run a login shell aka bash --login
# the same as if the user had logged in as the root from the login prompt
и sudo su -
то же самое, что sudo su - root
указание root является избыточным.
sudo -u root -H /bin/bash
снова -u root
избыточен, sudo
по умолчанию запускается от имени пользователя root, но -H /bin/bash
запускается от имени sudoer, переменные окружения SUDO_USER, SUDO_UID и SUDO_COMMAND устанавливаются на имя/uid вызывающего абонента и bash соответственно.
Но в этом случае bash не запускается как оболочка входа в систему.
решение3
Очевидно, они могут отличаться, если root shell не /bin/bash - это возможно для небольших или встроенных сред Linux, или традиционных для систем BSD, которые предпочитают /bin/[t]csh для пользователя root. Кроме того, `su -' удаляет все окружение, за исключением нескольких переменных, связанных с терминалом. Поведение sudo в окружении можно настраивать (см. env_reset в /etc/sudoers). Поэтому будьте осторожны с деталями...
решение4
Самое большое различие между двумя перечисленными вами командами заключается в том, что запуск su -
приведет к тому, что оболочка станет оболочкой входа. Это означает, что будут выполнены скрипты входа оболочки root (например, .bash_profile, если это bash), PWD будет установлен в $HOME, а определенные части пользовательской среды будут инициализированы. sudo bash
просто запускает новую оболочку как оболочку целевого пользователя, а -H просто инициализирует одну переменную, $HOME, в домашний каталог целевого пользователя. Другие переменные не будут установлены, а некоторые будут перенесены в новую оболочку, как определено в вашей политике sudo.