В чем различия между & ldquo; su & rdquo ;, & ldquo; sudo -s & rdquo ;, & ldquo; sudo -i & rdquo ;, & ldquo; sudo su & rdquo ;?

Я уже прочитал это из руководства, но я не вижу разницы ..

su - изменить идентификатор пользователя или стать суперпользователем

sudo -s [command]

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

sudo -i исчезнуть описание в руководстве

171
задан 8 May 2015 в 10:57

6 ответов

Главное различие между этими командами заключается в том, что они ограничивают доступ к своим функциям.

su (что означает "заменить пользователя" или "переключить пользователя") - делает именно так, запускает другой экземпляр оболочки с привилегиями целевого пользователя. Чтобы убедиться, что у вас есть на это права, он запрашивает пароль целевого пользователя. Итак, чтобы стать root, вам нужно знать пароль root. Если на вашей машине есть несколько пользователей, которым нужно выполнять команды root, то все они должны знать пароль root - обратите внимание, что это будет один и тот же пароль. Если вам нужно отозвать права администратора у одного из пользователей, вам нужно сменить пароль root и сообщить его только тем, кому нужен доступ - messy.

sudo (хм... что такое мнемоника? Super-User-DO?) - это совсем другое. Она использует конфигурационный файл (/etc/sudoers), в котором перечислены пользователи, имеющие права на определенные действия (запуск команд root и т.д.) При вызове он запрашивает пароль пользователя, запустившего его - чтобы убедиться, что человек на терминале на самом деле тот же "Джо", который указан в /etc/sudoers. Чтобы лишить человека привилегий администратора, достаточно отредактировать конфигурационный файл (или удалить пользователя из группы, которая указана в этом конфигурационном файле). Это приводит к более чистому управлению привилегиями.

В результате во многих системах на базе Debian root пользователь не имеет установленного пароля - т.е. невозможно войти непосредственно от имени root.

Кроме того, /etc/sudoers позволяет указать некоторые дополнительные опции - i. e. пользователь X может запускать только программу Y и т.д.

Часто используемая комбинация sudo su работает следующим образом: сначала sudo запрашивает у вас ваш пароль, и, если вам это разрешено, вызывает следующую команду (su) как суперпользователь. Поскольку su вызывается root, то для этого не требуется вводить пароль целевого пользователя. Таким образом, sudo su позволяет открыть оболочку как другого пользователя (включая root), если доступ суперпользователя разрешен файлом /etc/sudoers.

134
ответ дан 8 May 2015 в 10:57

Этот ответ - пародия на мой ответ на обман этого вопроса , помещенный здесь на канонический ответ, чтобы люди могли его найти!

Основное различие между sudo -i и sudo -s is:

  • sudo -i дает вам корневую среду, т.е. ваш ~ / .bashrc игнорируется .
  • sudo -s дает вам среду пользователя, поэтому ваш ~ / .bashrc уважается.

Вот пример, вы можете видеть, что у меня есть приложение lsl в моем ~ /.bin / , который доступен через sudo -s , но не доступен через sudo -i . Также обратите внимание, что приглашение Bash изменяется, как и в случае с sudo -i , но не с sudo -s :

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

Хотя sudo -s удобно для предоставления вам среда, с которой вы знакомы, Я рекомендую использовать sudo -i по двум причинам:

  1. Визуальное напоминание о том, что вы находитесь в «корневом» сеансе.
  2. Корневой окружающая среда гораздо реже может быть заражена вредоносными программами, такими как мошенническая строка в .bashrc .
44
ответ дан 8 May 2015 в 10:57

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

была бы глупой.

Например, если я ремонтирую свою систему с живого CD/USB, я часто монтирую свой жесткий диск и другие необходимые вещи и chroot в систему. В таком случае, моей первой командой обычно является:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

Таким образом, я работаю не как root, а как мой обычный пользователь, и затем я использую sudo соответственно.

2
ответ дан 8 May 2015 в 10:57

sudo позволяет выполнять команды в собственной учетной записи пользователя с привилегиями root. su позволяет переключать пользователя так, чтобы он действительно входил в систему как root.

sudo -s запускает оболочку с привилегиями root. sudo -i также приобретает окружение пользователя root.

Чтобы увидеть разницу между su и sudo -s, сделайте cd ~, а затем pwd после каждого из них. В первом случае, вы будете в домашнем каталоге root'а, потому что вы root'ы. Во втором случае, вы будете в вашем собственном домашнем каталоге, потому что вы сами обладаете правами root.

Более подробно этот вопрос обсуждается здесь .

68
ответ дан 8 May 2015 в 10:57

su запрашивает пароль пользователя "root".

sudo запрашивает ваш собственный пароль (а также проверяет, разрешено ли вам выполнять команды от имени root, который настраивается через /etc/sudoers -- по умолчанию все учетные записи пользователей, которые принадлежат к группам "admin" или "sudo" разрешено использовать sudo).

sudo -s запускает оболочку от имени root, но не изменяет ваш рабочий каталог. sudo -i симулирует вход в корневую учётную запись: ваш рабочий каталог будет /root, а корневой .profile и т.д. будет исходить как при входе в систему.

10
ответ дан 8 May 2015 в 10:57
  • su Запрашивает пароль root, становится пользователем root, открывает интерактивную оболочку без входа в систему.
  • su - Запрашивает пароль root, становится root, открывает интерактивную оболочку входа.

  • sudo -s Запрашивает ваши пароли, становится root, открывает интерактивную оболочку без входа в систему.
  • sudo -i Запрашивает ваши пароли, становится root, открывает интерактивную оболочку входа.

Лучше всего использовать эти два.


  • sudo su Запрашивает ваш пароль, становится root на секунду и запускает su как root`.
  • sudo su - Запрашивает ваш пароль, становится на секунду root и запускает su - как root`.

Итак, в этом случае вы используете ] su с использованием sudo , и вам не нужно знать фактический пароль root. Результаты такие же, как su и su - .

5
ответ дан 22 November 2019 в 22:51

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

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