Почему одно предпочтение перед другим в этом примере?
sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
Пожалуйста, предоставьте ссылки на документацию по Ubuntu.
Почему одно предпочтение перед другим в этом примере?
sudo su
echo "options iwlwifi 11n_disable=1" >> /etc/modprobe.d/iwlwifi.conf
exit
Пожалуйста, предоставьте ссылки на документацию по Ubuntu.
Ответы:
Команда sudo suобозначает «переключить пользователя» и позволяет вам стать другим пользователем. Это позволяет разрешенному пользователю выполнять команду от имени суперпользователя или другого пользователя, как указано в файле sudoers.
Параметр ‑i (имитировать первоначальный вход в систему) запускает оболочку, указанную в записи базы данных паролей целевого пользователя, в качестве оболочки входа в систему. Это означает, что специфичные для входа файлы ресурсов, такие как .profile или .login, будут читаться оболочкой. Если указана команда, она передается в оболочку для выполнения через параметр оболочки ‑c. Если команда не указана, выполняется интерактивная оболочка.
Источник: ManPage
sudo suвас спрашивают пароль, а не пароль root. Пользователь root даже не должен иметь пароль. В любом случае, если администратор использует пароль root, это не означает, что все обычные пользователи знают его.
sudoзапускается suкак root, а root может suлюбой пользователь, не зная его пароля. Фундаментальное недоразумение о том, как работает система, заслуживает отрицательной оценки IMO.
sudo -iне будет запрашивать пароль root, так что это не имеет отношения к вопросу.
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?
$PATHменяется, когда я использую suбез sudo(с использованием пароля root). Согласно info su(что может быть лучше сделать ссылку в вашем ответе), suдействительно читает пароль для пользователя, которым вы становитесь. Возможно $PATHизменение, которое я наблюдаю, зависит от системы (я нахожусь на Debian 7).
man su(который длиннее, чем тот, с которым вы связаны) говорит, что он является частью shadow-utils 4.1.5.1. Моя manстраница также говорит, что $PATHустановлена, даже если --preserve-environmentиспользуется. Так что я думаю, это действительно разница между разными версиями su.
/etc/pam.d/sudoи /etc/pam.d/suможет быть настроен на совершенно разные или совершенно одинаковые вещи.
Основная проблема - одна из (не очень) нормальных настроек среды.
Использование sudo suновой оболочки получает свое окружение от пользователя, который выдает команду - что может быть проблематично.
С sudo -iвас получится чистая корневая оболочка.
Смотрите специальные примечания по sudo и оболочкам
Остается заметить, что редко нужно вообще создавать корневую оболочку.
sudo -iпохожи, на sudo su -самом деле не получают своего окружения от пользователя, выполняющего команду.
sudo suпротив sudo -i.