Яка функціональна відмінність між sudo su і sudo -i?


19

Чому в цьому прикладі один віддає перевагу іншому?

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

Будь ласка, надайте посилання на документацію на Ubuntu.


Перегляньте свій вибір "прийнятих" відповідей. Найнижчий з них - насправді єдиний правильний.
Кайл Странд

Відповіді:


15

sudo suКоманда означає «перемикач користувача», і дозволяє вам стати іншим користувачем. Це дозволяє дозволеному користувачеві виконувати команду як суперпользователь або інший користувач, як зазначено у файлі sudoers.

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

Джерело: ManPage


1
"Використання su створює проблему безпеки та по суті небезпечно." Що?
Зупиніть шкодити Моніці

1
Якщо ви запустите, sudo suвас запитають пароль, а не пароль. Користувачеві root навіть не потрібно мати пароль. Незалежно від того, якщо адміністратор використовує кореневий пароль, це не означає, що його знають усі постійні користувачі.
Зупиніть шкодити Моніці

2
Ні, не буде. sudoпрацює suяк root, а root може suбудь-який користувач, не знаючи свого пароля. Фундаментальні непорозуміння щодо того, як працює система, заслуговують на скорочення ІМО.
Зупиніть шкодити Моніці

3
А видалення ваших коментарів просто додає плутанини.
Зупиніть шкодити Моніці

1
Ти не робиш це набагато краще. sudo -iтакож не буде запитувати пароль root, тому це не стосується питання.
Зупиніть шкодити Моніці

14

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?
Кайл Странд

1
Ви чітко вкладаєте в це деяку думку і насправді робите тестування в оболонці, тому я вибачаюся за те, що я прошу тестую коментар "перевірити ці претензії". Однак, у моїй системі я спостерігаю, що $PATHце змінюється, коли я використовую suбез sudoвикористання кореневого пароля. Відповідно до цього info su(що може бути краще, з чим посилатись у вашій відповіді), suчи дійсно читає введення пароля для користувача, яким ви стаєте. Можливо, $PATHзміни, які я спостерігаю, залежать від системи (я перебуваю на Debian 7).
Кайл Странд

1
Хммм. Мій man su(який довший, ніж той, з яким ви пов’язали) говорить, що це частина shadow-utils 4.1.5.1. На моїй manсторінці також написано, що $PATHвона встановлена, навіть якщо --preserve-environmentвона використовується. Тому я здогадуюсь, що це справді лише різниця між різними версіями su.
Кайл Странд

1
На поведінку також впливає ваша конфігурація PAM. /etc/pam.d/sudoі /etc/pam.d/suможуть бути створені для того, щоб робити зовсім інші або абсолютно однакові речі.
Зупиніть шкодити Моніці

7

Основна проблема - одне з (не дуже) розумних налаштувань середовища.

Використання sudo suнової оболонки отримує оточення від користувача, який видає команду - що може бути проблематично.

З ним sudo -iви отримуєте чисту кореневу оболонку.

Див. Спеціальні примітки щодо судо та снарядів

Залишається зауважити, що створити кореневу оболонку рідко потрібно взагалі.


"Спеціальні замітки", на які ви посилаєтесь, говорять, що sudo -iподібні до того sudo su -, що насправді не отримує оточення від користувача, який видає команду.
Кайл Странд

@KyleStrand ТНХ за вказівку на це - це була помилка, питання дійсно про sudo suVS. sudo -i.
guntbert
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.