Есть ли разница между sudo su - root и sudo -u root -H /bin/bash?

Есть ли разница между sudo su - root и sudo -u root -H /bin/bash?

Как следует из заголовка, есть ли разница между этими двумя командами:

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.

Связанный контент