Есть ли веская причина для запуска sudo su?

78

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

  • sudo -i: запустить интерактивную оболочку входа (читает /root/.bashrcи /root/.profile)
  • sudo -s: запустить интерактивную оболочку без входа в систему (читает /root/.bashrc)

В мире Ubuntu я очень часто вижу sudo suпредложенный способ получения корневой оболочки. Зачем запускать две отдельные команды, когда одна будет делать? Насколько я могу судить, sudo -iэквивалентно sudo su -и так sudo -sже, как sudo su.

Единственные различия, кажется, (сравнивая sudo -iслева и sudo su -справа):

снимок экрана со сравнением 'sudo -i' и 'sudo su -'

И сравнивая sudo -s(слева) и sudo su(справа):

снимок экрана со сравнением 'sudo -s' и 'sudo su'

Основными отличиями (без учета SUDO_fooпеременных и LS_COLORS), похоже, являются XDG_fooсистемные переменные в sudo suверсиях.

Есть ли случаи, когда это различие оправдывает использование довольно не элегантного sudo su? Могу ли я с уверенностью сказать людям (как я часто это делаю), что в беге нет никакого смысла sudo suили я что-то упускаю?

Тердон
источник
8
Я никогда не понимал такие причудливые системы, как те, ubuntuкоторые мешают пользователям стандарт su -. Они создали проблему, и сейчас идут бесконечные дискуссии о том, как ее решить.
Джимми
16
@jimmij Тебе не нужно знать пароль пользователя root su -? Не думаете ли вы, что это создает дыру в безопасности в многопользовательских средах, где более чем одному человеку необходимо иметь root-доступ?
Эратиэль
4
@Christopher Проблема не в том, что у пользователя есть привилегия sudo или пароль root для взлома системы. Проблема в безопасности паролей. Когда вы изменяете пароль пользователя root, вам необходимо сообщить об этом всем пользователям, которые в нем нуждаются, что может быть затруднительно. С sudo у вас нет этой трудности.
Гюйгенс
4
Что такое инструмент сравнения?
Джош Гик
5
@jimmij Как Ubuntu предотвращает использование su -? Да, нужно было бы установить пароль root, но это тривиально.
Фазы

Ответы:

62

Как вы указали в своем вопросе, главное отличие заключается в окружающей среде.

sudo su - против sudo -i

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

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

sudo su против sudo -s

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

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

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

Заключение

-iФлаг был добавлен sudoв 2004 году , чтобы обеспечить аналогичные функции sudo su -, поэтому sudo su -был шаблон для sudo -iи предназначен для работы , как это. Я думаю, что на самом деле не имеет значения, какой вы используете, если только среда не важна.

прибавление

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

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

То, что мы имеем сейчас, sudoстановится все более популярным. Он интегрирован почти во все известные дистрибутивы Linux. Оригинальный инструмент для переключения на другую учетную запись пользователя su. Для ветеранов старой школы * nix такая вещь sudoможет показаться ненужной. Это добавляет сложности и ведет себя скорее к механизмам, которые мы знаем из семейства ОС Microsoft, и, таким образом, противоречит философии простоты * nix систем.

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

Поэтому я думаю, что будет лучше использовать sudoвнутренние механизмы ( -s, -i), а не полагаться на старый инструмент, такой как su.

хаос
источник
4
Ах, так до 2004 года была причина бежать sudo su? В то время я использовал дистрибутивы без sudo и активных учетных записей root, поэтому я не знаю. Это может объяснить преобладание sudo su meme в мире Ubuntu.
Тердон
8
Я никогда не знал об этом sudo -iили sudo -sраньше - я управлял UNIX-версиями с 1991 года, и для меня sudo su -это укоренившаяся привычка.
пушистый
2
Это так sudo -sже, как sudo $SHELLтогда?
Сэмюэль Эдвин Уорд
3
(Согласен с @chaos) Причины использования sudo su -: 1) что он работает и вы точно знаете, что он делает, и 2) что вам не нужно помнить другой вариант sudo(когда вы уже знаете su -) и 3) вы не ' sudoЯ должен помнить, с какой версией вы работаете в данный момент. Зачем вспоминать еще одну мелочь, когда то, что у вас уже есть, работает нормально? Есть ли что-нибудь su -iлучше, чем избежать записи в журнале? Я не использую sudo su -достаточно, чтобы беспокоиться об этом.
jrw32982
3
Я только что увидел обновление, очень приятно! Для справки, позвольте мне заявить, что я тоже порезал свои * nix зубы на системах без sudoи очень привык su. Это сочетание двух, что меня беспокоит.
Тердон
16

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

Я видел, как многие люди делают это, и когда я спрашиваю, почему они не просто бегут sudo -s, я просто отвечаю, что они не знают о -sфлаге sudo, и обычно они переключаются после того, как я на это указываю.

Однако к вашему списку sudo -sи sudo -iя хотел бы добавить еще одну опцию sudo -sE, которая является своего рода заменой su -m. sudo -sEсохраняет вашу среду, включая домашний каталог. Это имеет риски, если ваш домашний каталог небезопасен (в NFS). Но в среде, где многие люди используют root, это избавляет вас от необходимости согласовывать содержимое корневого .bashrcфайла. My .bashrcсодержит много специализаций для root, поэтому я не получаю ту же среду, что и root, но, по крайней мере, я получаю именно ту среду, которую хочу.

user3188445
источник
4
Если это сохраняет вашу среду, в том числе $HOME, это означает, что все новые файлы, созданные в домашней папке, принадлежат пользователю root, а не вам. У меня была эта причина многих трудно диагностировать ошибки разрешения.
Эрис
sudo -sEа потом echo $HOMEвыдает /rootна CentOS 7, bash 4.2. -sEне похоже, чтобы сохранить домашний каталог, как вы заявили.
jeremysprofile