'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - когда имеет значение, что используется, или это имеет значение вообще?

171

Когда я делаю то, что требует, чтобы root вводился десятками раз подряд, я предпочитаю переключать сеанс на корневую сессию. В различных учебниках и инструкциях, которые я использовал в Интернете, я вижу, что sudo su , sudo su - , sudo -i и sudo /bin/bash используются для открытия корневого сеанса, но я не понимаю разницы между ними и когда или если эта разница имеет значение.

Может кто-нибудь прояснит это для меня?

    
задан Paul 12.11.2013 в 23:30
источник

1 ответ

229

Чтобы объяснить это, вам нужно знать, что делают программы:

su - команда su используется для переключения на другого пользователя ( s witch u ser), но вы также можете переключиться на пользователя root вызывая команду без параметров. su запрашивает пароль пользователя для переключения после ввода пароля, который вы переключили в среду пользователя.

sudo - sudo предназначен для запуска единой команды с привилегиями root. Но в отличие от su , он запрашивает пароль текущего пользователя. Этот пользователь должен находиться в файле sudoers (или группе, находящейся в файле sudoers). По умолчанию Ubuntu «запоминает» ваш пароль в течение 15 минут, так что вам не нужно вводить пароль каждый раз.

bash - текстовый интерфейс для взаимодействия с компьютером. Важно понимать разницу между входами, недействительными, интерактивными и неинтерактивными оболочками:

  • login shell: оболочка входа регистрирует вас в системе как указанный пользователь, необходимый для этого имени пользователя и пароля. Когда вы нажимаете ctrl + alt + F1 , чтобы войти в виртуальный терминал, вы получите после успешного входа в систему для входа в систему.
  • non-login shell: оболочка, которая выполняется без входа в систему, необходимая для этого является зарегистрированным пользователем. Когда вы открываете графический терминал в gnome, это оболочка без входа.
  • интерактивная оболочка: оболочка (логин или не-логин), где вы можете интерактивно вводить или прерывать команды. Например, терминал gnome.
  • неинтерактивная оболочка: оболочка (суб), которая, вероятно, запускается из автоматизированного процесса. Вы не увидите ни ввода, ни вывода.

sudo su Вызывает sudo с командой su . Bash называется интерактивной оболочкой без входа. Таким образом, bash выполняет только .bashrc . Вы можете видеть, что после переключения на root вы все еще находитесь в одном каталоге:

user@host:~$ sudo su
root@host:/home/user#

sudo su - На этот раз это оболочка входа, поэтому выполняются /etc/profile , .profile и .bashrc , и вы окажетесь в домашнем каталоге root с корневой средой.

sudo -i Это почти то же самое, что и sudo su - . Параметр -i (имитировать начальный логин) запускает оболочку, указанную в записи базы данных пароля целевого пользователя в качестве оболочки входа. Это означает, что файлы ресурсов, зависящие от имени пользователя, такие как .profile , .bashrc или .login , будут прочитаны и выполнены оболочкой.

sudo /bin/bash Это означает, что вы вызываете sudo с командой /bin/bash . /bin/bash запускается как недействительная оболочка, поэтому все точечные файлы не выполняются, но сам bash считывает .bashrc вызывающего пользователя. Ваша среда остается прежней. Ваш дом не будет корневым домом. Таким образом, вы являетесь пользователем root, но в среде вызывающего пользователя.

sudo -s читает переменную $SHELL и выполняет содержимое. Если $SHELL содержит /bin/bash , он вызывает sudo /bin/bash (см. Выше).

Check: Чтобы проверить, находитесь ли вы в оболочке входа или нет (работает только в bash, потому что shopt является встроенной командой):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
ответ дан chaos 13.11.2013 в 09:43
источник

Ознакомьтесь с другими вопросами по меткам