Чому в цьому прикладі один віддає перевагу іншому?
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 suVS. sudo -i.