Чтобы запустить корневую оболочку на машинах, где учетная запись 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 -s
(слева) и sudo su
(справа):
Основными отличиями (без учета SUDO_foo
переменных и LS_COLORS
), похоже, являются XDG_foo
системные переменные в sudo su
версиях.
Есть ли случаи, когда это различие оправдывает использование довольно не элегантного sudo su
? Могу ли я с уверенностью сказать людям (как я часто это делаю), что в беге нет никакого смысла sudo su
или я что-то упускаю?
источник
ubuntu
которые мешают пользователям стандартsu -
. Они создали проблему, и сейчас идут бесконечные дискуссии о том, как ее решить.su -
? Не думаете ли вы, что это создает дыру в безопасности в многопользовательских средах, где более чем одному человеку необходимо иметь root-доступ?su -
? Да, нужно было бы установить пароль root, но это тривиально.Ответы:
Как вы указали в своем вопросе, главное отличие заключается в окружающей среде.
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 вы все еще находитесь в той же директории: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
.источник
sudo su
? В то время я использовал дистрибутивы без sudo и активных учетных записей root, поэтому я не знаю. Это может объяснить преобладание sudo su meme в мире Ubuntu.sudo -i
илиsudo -s
раньше - я управлял UNIX-версиями с 1991 года, и для меняsudo su -
это укоренившаяся привычка.sudo -s
же, какsudo $SHELL
тогда?sudo su -
: 1) что он работает и вы точно знаете, что он делает, и 2) что вам не нужно помнить другой вариантsudo
(когда вы уже знаетеsu -
) и 3) вы не 'sudo
Я должен помнить, с какой версией вы работаете в данный момент. Зачем вспоминать еще одну мелочь, когда то, что у вас уже есть, работает нормально? Есть ли что-нибудьsu -i
лучше, чем избежать записи в журнале? Я не используюsudo su -
достаточно, чтобы беспокоиться об этом.sudo
и очень привыкsu
. Это сочетание двух, что меня беспокоит.Чтобы ответить на ваш вопрос напрямую: нет, для этого нет веских причин. Кроме того, sudo su создает две записи журнала, когда одной будет достаточно.
Я видел, как многие люди делают это, и когда я спрашиваю, почему они не просто бегут
sudo -s
, я просто отвечаю, что они не знают о-s
флаге sudo, и обычно они переключаются после того, как я на это указываю.Однако к вашему списку
sudo -s
иsudo -i
я хотел бы добавить еще одну опциюsudo -sE
, которая является своего рода заменойsu -m
.sudo -sE
сохраняет вашу среду, включая домашний каталог. Это имеет риски, если ваш домашний каталог небезопасен (в NFS). Но в среде, где многие люди используют root, это избавляет вас от необходимости согласовывать содержимое корневого.bashrc
файла. My.bashrc
содержит много специализаций для root, поэтому я не получаю ту же среду, что и root, но, по крайней мере, я получаю именно ту среду, которую хочу.источник
$HOME
, это означает, что все новые файлы, созданные в домашней папке, принадлежат пользователю root, а не вам. У меня была эта причина многих трудно диагностировать ошибки разрешения.sudo -sE
а потомecho $HOME
выдает/root
на CentOS 7, bash 4.2.-sE
не похоже, чтобы сохранить домашний каталог, как вы заявили.