Каковы различия между «su», «sudo -s», «sudo -i», «sudo su»?

117

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

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

sudo -s [command]

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

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

    
задан Smile.Hunter 22.10.2011 в 08:11
источник

5 ответов

94

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

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

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

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

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

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

    
ответ дан Sergey 22.10.2011 в 09:21
источник
45

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

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

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

Здесь больше обсуждается этот точный вопрос здесь .

    
ответ дан Mike Scott 22.10.2011 в 08:28
источник
21

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

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

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

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

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 -s по двум причинам:

  1. Наглядное напоминание о том, что вы находитесь в «корневом» сеансе.
  2. Корневая среда гораздо реже будет отравлена ​​вредоносными программами, такими как строка изгоев в sudo -i .
ответ дан dotancohen 08.11.2014 в 15:07
источник
6

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

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

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

    
ответ дан Marius Gedminas 22.10.2011 в 21:38
источник
2

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

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

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

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

    
ответ дан Scott Severance 26.10.2011 в 09:23
источник

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