Разница в логинах sudo и отображении приглашений

Разница в логинах sudo и отображении приглашений

В чем разница между sudo -sи sudo -iи почему они дают мне разные оболочки? Похоже, что он -sдержит меня внутри bashи -iдает мне sh.

В MacOSX High Sierra 10.13, если я ввожу sudo -sв терминал и пароль, я получаю root в качестве имени пользователя, но со знаком доллара в приглашении:

user1@mymachine:~$ sudo -s
**root@mymachine:~$**

Но если я введу sudo -i, то получу:

user1@mymachine:~$ sudo -i
Password:<br/>
**mymachine:~ root#**

Почему мне не отображается знак решетки #, если я root в примере выше с sudo -s? Я не настоящий root?
Различаются ли переменные окружения между ними?

решение1

Первое, что вам нужно понять, это то, что sudo -sэквивалентно sudo -s rootи sudo -iэквивалентно sudo -i root. Всякий раз, когда вы исключаете пользователя из sudo, предполагается, что вы указываете на пользователя root.

sudo -sзапускает оболочку от имени целевого пользователя и sudo -iвходит в систему как целевой пользователь.

При каждом запуске sudo -sвы фактически меняете свою оболочку на оболочку пользователя root, при этом при каждом запуске sudo -iвы фактически выходите из текущего пользователя и входите как root. Это важно знать, поскольку при каждом изменении оболочки на оболочку пользователя root вы все равно сохраняете экспортную информацию пользователя. При запуске sudo -iвы выходите из пользователя и входите как root. Это означает, что вы принимаете конфигурацию оболочки пользователя root.

Это не имеет отношения к делу, но вам следует избегать изменения пользователя на root, потому что вы можете случайно что-то сломать, вам следует просто sudo для каждой команды, которая требует эскалации, даже если это раздражает. Если вы действительно хотите изменить на оболочку root, вам следует запустить, suчто позволит вам войти в систему как root.

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