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

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

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

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

19
задан 11 August 2013 в 00:45

3 ответа

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

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

Источник: Manpage

0
ответ дан 11 August 2013 в 00:45

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

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

С помощью sudo -i вы получаете чистую корневую оболочку.

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

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

0
ответ дан 11 August 2013 в 00:45

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

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

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

См. 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 сбрасывается в «< пробел> < tab> < newline>», если он был установлен.

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

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

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

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

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

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

0
ответ дан 11 August 2013 в 00:45

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

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