Что на самом деле делает sudo-s?

26

Я использую Ubuntu 10.04.

Я замечаю, что после запуска « sudo -s » в терминале приглашение изменилось с

" XXX @ XXX "

в

" root @ XXX ",

Кажется, это изменилось на привилегию root.

Но когда я проверяю документацию команды "sudo" здесь , она объясняет другую историю "sudo -s", может кто-нибудь объяснить мне, что именно делает " sudo -s "?

Лим
источник
6
Вы должны спросить об этом на askubuntu.com
7
Почему именно Askubuntu.com? sudoвряд ли специфичен для Ubuntu ...
Дейв Шерохман
возможный дубликат разницы между командами "su -s" и "sudo -s"
Linker3000

Ответы:

9

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

sudo $SHELL

за исключением того, что он, скорее всего, откатится /bin/shили что-то, если SHELLне установлен.

TomH
источник
6

sudo -sзапускает оболочку, указанную в вашей $SHELLпеременной окружения как суперпользователь / root. Вы можете указать другого пользователя, используя -u.

$SHELLПеременная среды содержит путь к по умолчанию пользователя оболочки входа в систему . Фактическая настройка для программы оболочки по умолчанию обычно находится в etc/passwd. В зависимости от того, что вы сделали в текущем сеансе, переменная $ SHELL может не содержать программу оболочки, которую вы используете в данный момент. Если вы войдете автоматически, например, с помощью zsh, но затем вызовете bash, $ SHELL не изменится с /bin/zsh.

Показать текущего пользователя и программу оболочки: echo $(whoami) is logged in and shell is $0

  • whoami выводит имя пользователя, под которым работает пользователь.
  • $0 содержит имя / путь запущенной в данный момент программы (в данном случае это оболочка).
RKelley
источник
3

Из руководства:

sudo позволяет разрешенному пользователю выполнять команду от имени суперпользователя или другого пользователя, как указано в файле sudoers.

-s Shell, запускает оболочку, указанную переменной среды SHELL, если она установлена, или оболочку, указанную в passwd (5).

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

Anarko_Bizounours
источник
1
Из руководства не очевидно, что, если вы не предоставляете пользователя, по умолчанию используется root. Вы должны прочитать описание для -uопции, чтобы узнать это. Но для тех, кто не знаком с ними sudo, они не будут знать, чтобы посмотреть -u.
Wisbucky
0

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

Ноа Дункан
источник
-1

sudo -s позволяет вам запустить команду, для которой вы предварительно авторизованы [см. / etc / sudoers], возможно, попросив вас подтвердить ваш текущий идентификатор.

Эрик Херлиц
источник