В чем функциональная разница между sudo su и sudo -i?


19

Почему одно предпочтение перед другим в этом примере?

sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit

Пожалуйста, предоставьте ссылки на документацию по Ubuntu.


Пожалуйста, пересмотрите свой выбор «принятых» ответов. Наименьшее количество голосов на самом деле является единственным правильным.
Кайл Стрэнд

Ответы:


15

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

Параметр ‑i (имитировать первоначальный вход в систему) запускает оболочку, указанную в записи базы данных паролей целевого пользователя, в качестве оболочки входа в систему. Это означает, что специфичные для входа файлы ресурсов, такие как .profile или .login, будут читаться оболочкой. Если указана команда, она передается в оболочку для выполнения через параметр оболочки ‑c. Если команда не указана, выполняется интерактивная оболочка.

Источник: ManPage


1
«Использование su создает проблему безопасности и является по сути опасным». Какая?
Стоп Harm Моника

1
Если вы запускаете, у sudo suвас спрашивают пароль, а не пароль root. Пользователь root даже не должен иметь пароль. В любом случае, если администратор использует пароль root, это не означает, что все обычные пользователи знают его.
Стоп Harm Моника

2
Нет, не будет. sudoзапускается suкак root, а root может suлюбой пользователь, не зная его пароля. Фундаментальное недоразумение о том, как работает система, заслуживает отрицательной оценки IMO.
Стоп Harm Моника

3
А удаление ваших комментариев только добавляет путаницы.
Стоп Harm Моника

1
Вы не делаете это намного лучше. sudo -iне будет запрашивать пароль root, так что это не имеет отношения к вопросу.
Стоп Harm Моника

14

sudo suтолько изменяет текущего пользователя на root. Настройки среды (например, PATH) остаются прежними.

sudo -i создает новую среду, как будто root только что вошел в систему.

Разница более заметна, если вы используете других пользователей. После sudo su bobвас будет Боб, но там же. После sudo -i -u bobтого, как вы будете bob, в домашнем каталоге bob, с оболочкой по умолчанию для bob .profileи с запущенными bob и другими сценариями входа.

Смотрите man sudoдля более подробной информации о том, что -iделает. К сожалению, man suсвет на деталях.


Найдена версия man su(из login-1: 4.1.4.2 + svn3283-3ubuntu5.1), в которой говорится следующее:

$ PATH сбрасывается в соответствии с параметрами /etc/login.defs ENV_PATH или ENV_SUPATH (см. Ниже);

$ IFS сбрасывается в «<пробел> <вкладка> <новая строка>», если он был установлен.

Обратите внимание, что поведение по умолчанию для среды следующее:

Переменные среды $ HOME, $ SHELL, $ USER, $ LOGNAME, $ PATH и $ IFS сбрасываются.

Если --login не используется, среда копируется, за исключением переменных выше.

Если используется --login, переменные среды $ TERM, $ COLORTERM, $ DISPLAY и $ XAUTHORITY копируются, если они были установлены.

Другие среды могут быть установлены модулями PAM.

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


su делает настройки изменения окружающей среды, и может быть использовано для имитации входа с использованием -или -l. Даже без -l, $PATH будет изменен. Проверьте эти претензии, прежде чем делать их! (Вы имели в виду, что это PWDостается тем же самым?)
Кайл Стрэнд

Вопрос в том, есть ли разница между sudo su -и sudo -i?
Кайл Стрэнд

1
Вы явно задумываетесь над этим и на самом деле проводите некоторое тестирование в оболочке, поэтому я прошу прощения за мой отрывочный комментарий «протестировать эти утверждения». Тем не менее, в моей системе я наблюдаю, что $PATHменяется, когда я использую suбез sudo(с использованием пароля root). Согласно info su(что может быть лучше сделать ссылку в вашем ответе), suдействительно читает пароль для пользователя, которым вы становитесь. Возможно $PATHизменение, которое я наблюдаю, зависит от системы (я нахожусь на Debian 7).
Кайл Стрэнд

1
Хммм. Мой man su(который длиннее, чем тот, с которым вы связаны) говорит, что он является частью shadow-utils 4.1.5.1. Моя manстраница также говорит, что $PATHустановлена, даже если --preserve-environmentиспользуется. Так что я думаю, это действительно разница между разными версиями su.
Кайл Стрэнд

1
На поведение также влияет ваша конфигурация PAM. /etc/pam.d/sudoи /etc/pam.d/suможет быть настроен на совершенно разные или совершенно одинаковые вещи.
Стоп Harm Моника

7

Основная проблема - одна из (не очень) нормальных настроек среды.

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

С sudo -iвас получится чистая корневая оболочка.

Смотрите специальные примечания по sudo и оболочкам

Остается заметить, что редко нужно вообще создавать корневую оболочку.


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

@KyleStrand спасибо за указание на это - это была опечатка, вопрос на самом деле о sudo suпротив sudo -i.
Гюнтберт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.