В чем разница между «sudo -i» и «sudo bash -l»

13

Недавно был задан вопрос о нескольких сисадминах, работающих от имени пользователя root, и на sudo bash -lнего ссылались.

Я искал это в Google и SE, но я не понимаю разницу между sudo bash -lи sudo -i.

Из справочных страниц по bash и sudo может показаться, что разница может быть в том, что sudo bash -lзапускаются ~ / .bash_profile, ~ / .bash_login и ~ / .profile, а также ~ / .bash_logout пользователя root, но при тестировании себя это выглядит так он запускает .bashrc обычного пользователя, а не root. Возможно, я неправильно понял, на какого пользователя ссылается выражение ~ на страницах руководства. Разъяснение различий и сценариев использования приветствуется.

Rqomey
источник

Ответы:

10

Они отличаются тем, что если оболочка входа пользователя root, указанная в / etc / passwd, не является bash, то вторая команда получит оболочку bash в качестве пользователя root, а первая команда будет использовать любую интерактивную оболочку, которую имеет пользователь root.

johnshen64
источник
Привет @ johnshen64, не могли бы вы прояснить различные сценарии использования?
Rqomey
2
людям нравится оболочка, которую они используют, поэтому, если вы хотите быть уверены, что используете bash, тогда следует использовать вторую форму. вторая форма также имитирует фактический вход в систему (что означает -l). Конечно, вы также можете просто ввести bash, когда обнаружите, что пользователь (по умолчанию root) не использует bash в качестве интерактивной оболочки при использовании sudo -i. в противном случае разница очень мала. как показывает другой ответ, существуют также небольшие различия в окружающей среде. в большинстве случаев разница не имеет значения, и первый короче, так как большинство распространенных дистрибутивов используют bash. я редко использую 2-ую форму.
johnshen64
4

Кроме того, чтобы добавить к ответу @ johnshen64, я заметил, что sudo -iвызов обновляет $USERNAMEпеременную env до rootи cd ~для пользователя home следующим образом;

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

Однако for sudo bash -l $USERNAMEunmoled, и рабочий каталог не изменяется. (хотя это не согласуется с другими пользователями, см. комментарии ...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

Таким образом, по-видимому, вы не получаете точно такой же набор ~/.bashrcили не в том же порядке и т. Д.

(моя коробка могла быть немного испорчена моими .bashrcповозками, так что YMMV)

Том Х
источник
Спасибо @Tom H: echo $USERNAMEвозвращает мне root оба раза (на моем рабочем столе Ubuntu и Centos 5.2). PWD, как вы сообщаете, однако.
Rqomey