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

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

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

257
задан 19 September 2014 в 18:54

2 ответа

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

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

Типы оболочек:

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

Возможны следующие случаи:

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

    user@host:~$ sudo su
    root@host:/home/user#
    
  • sudo su - На этот раз это оболочка входа в систему, поэтому /etc/profile, .profile и .bashrc будут выполнены, и вы окажетесь в домашнем каталоге root с окружением root.

  • ] , Это означает, что специфичные для входа в систему файлы ресурсов, такие как .profile, .bashrc или .login, будут считываться и выполняться оболочкой.

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

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

Проверка:

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

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
0
ответ дан 19 September 2014 в 18:54
  • 1
    muru, только первая инстанция использована для своей выгоды, например', FOO^bar^baz' – Sergiy Kolodyazhnyy 11 May 2015 в 22:31

Чтобы искать различия, Вы можете разгрызать получающуюся среду среди различных просьб.

Вы могли найти приблизительно «маленькими» различия в некоторых критических переменных:

  • PATH, LD_LIBRARY_PATH, LD_PRELOAD

или некоторое различие в ~/. dotfiles, обрабатывающий (~/.config).

Считают также владение $HOME базирующимся logfiles (~/.xsession.errors, и т.д....) или xauth куки (~/.Xauthority), который генерируют команды.

Попытка эти команды:


# 'su -' vs 'su'

diff <(sudo su - -c env | sort) <(sudo su -c env | sort)


# 'su -' vs 'sudo -i'

diff <(sudo su - -c env | sort) <(sudo -i env | sort)


0
ответ дан 22 November 2019 в 22:39

Другие вопросы по тегам:

Похожие вопросы: