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

17

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

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

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

    
задан chili555 10.08.2013 в 20:45
источник

3 ответа

13

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

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

Источник: ManPage

    
ответ дан Mitch 10.08.2013 в 21:01
источник
13

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

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

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

Подробнее о том, что делает man sudo , см. -i . К сожалению, man su подробно освещен.

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

$PATH reset according to the /etc/login.defs options ENV_PATH or ENV_SUPATH (see below);

$IFS reset to “<space><tab><newline>”, if it was set.

Note that the default behavior for the environment is the following:

The $HOME, $SHELL, $USER, $LOGNAME, $PATH, and $IFS environment variables are reset.

If --login is not used, the environment is copied, except for the variables above.

If --login is used, the $TERM, $COLORTERM, $DISPLAY, and $XAUTHORITY environment variables are copied if they were set.

Other environments might be set by PAM modules.

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

    
ответ дан OrangeDog 10.08.2013 в 22:02
6

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

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

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

См. Специальные заметки о sudo и shells

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

    
ответ дан guntbert 10.08.2013 в 20:59