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

Проверьте этот связанный пост ... Здесь

Сначала я попытался бы снова создать MBR и сначала загрузиться в ОС Windows. Затем попробуйте переустановить Ubuntu.

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

4 ответа

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

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

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

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

46
ответ дан 25 May 2018 в 17:46
  • 1
    " вы сами с привилегиями root " это не то, что на самом деле происходит :) На самом деле, вы не можете быть сами с привилегиями root " - либо вы корень, либо вы сами. Попробуйте ввести whoami в обоих случаях. Тот факт, что результаты cd ~ отличаются друг от друга, является результатом sudo -s, не устанавливающего переменную среды HOME. – Sergey 22 October 2011 в 12:28
  • 2
    @Sergey, whoami, он говорит, что это «root», потому что вы запускаете «whoami» cmd, как будто вы его судируете, поэтому временно (на протяжении всей этой команды) вы являетесь пользователем root, но вы все равно можете не иметь полного root в соответствии с файлом sudoers. – Octopus 7 February 2015 в 02:15
  • 3
    @Octopus: то, что я пытался сказать, это то, что в Unix процесс может иметь только один UID, и этот UID определяет разрешения процесса. Вы не можете быть «сами с привилегиями root», программа либо работает с вашим UID, либо с UID корня (0). – Sergey 7 February 2015 в 02:24
  • 4
    Что касается «вы, возможно, все еще не имеете полного доступа root в соответствии с файлом sudoers»: файл sudoers контролирует, кто может запускать эту команду в качестве другого пользователя, но это происходит до выполнения команды. Однако, как только вам разрешили запустить процесс, скажем, root - в текущем процессе есть UID корня и есть полный доступ к системе, поэтому sudo не может ограничивать это. Опять же, вы всегда либо сами, либо корень, нет «половины-половины». Таким образом, если файл sudoers позволяет запускать оболочку как root - разрешения в этой оболочке будут неотличимы от "нормального" корневая оболочка. – Sergey 7 February 2015 в 02:32

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

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

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 удобен для предоставления вам среды, с которой вы знакомы, Этот ответ является обманом моего ответа на обман этого вопроса, поставленный здесь на канонический ответ, чтобы люди могли его найти! по двум причинам:

Наглядное напоминание о том, что вы находитесь в «корневой» сессии. Корневая среда гораздо реже будет отравлена ​​вредоносными программами, такими как строка изгоев в .bashrc.
22
ответ дан 25 May 2018 в 17:46
  • 1
    Я заметил, что sudo -s, похоже, не обрабатывает / etc / profile, или что-нибудь, что у меня есть в /etc/profile.d/ .. любая идея, почему? – meffect 23 February 2017 в 09:21

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

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

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

6
ответ дан 25 May 2018 в 17:46
  • 1
    чтобы сделать ответ более полным: sudo -s почти равно su ($ HOME отличается), а sudo -i равно su - – DJCrashdummy 29 July 2017 в 03:58

В 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, если это необходимо.

2
ответ дан 25 May 2018 в 17:46

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

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