Почему одно предпочтение перед другим в этом примере?
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
.