Чому в цьому прикладі один віддає перевагу іншому?
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 навіть не потрібно мати пароль. Незалежно від того, якщо адміністратор використовує кореневий пароль, це не означає, що його знають усі постійні користувачі.
sudo
працює su
як root, а root може su
будь-який користувач, не знаючи свого пароля. Фундаментальні непорозуміння щодо того, як працює система, заслуговують на скорочення ІМО.
sudo -i
також не буде запитувати пароль root, тому це не стосується питання.
sudo su
змінює лише поточного користувача на root. Налаштування середовища (як PATH) залишаються незмінними.
sudo -i
створює свіже середовище, як ніби щойно щорічно увійшов корень.
Різниця помітніша, якщо ви використовуєте інших користувачів. Після 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 скидається до параметра <<pace> <tab> <newline> », якщо він був встановлений.
Зауважте, що поведінка за умовчанням для навколишнього середовища є наступною:
Скинуті змінні середовища $ 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
використання кореневого пароля. Відповідно до цього 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 -i
подібні до того sudo su -
, що насправді не отримує оточення від користувача, який видає команду.
sudo su
VS. sudo -i
.