З su
, ви стаєте іншим користувачем - root за замовчуванням, але, можливо, іншим користувачем. Якщо ви скажете su -
, ваше середовище також заміняється середовищем входу цього користувача, так що те, що ви бачите, не відрізняється від входу в систему як цього користувача. У жодному разі система не може визначити, що ви робите, коли ви робите su
інший користувач від дій цього користувача під час входу.
Все дуже відрізняється sudo
:
Команди, які ви запускаєте через sudo
Execute як цільового користувача - root за замовчуванням, але змінні на -u
-, але вони реєструють команди, які ви запускаєте через нього, позначаючи їх своїм іменем користувача, тому винність може бути призначена згодом. :)
sudo
дуже гнучка. Ви можете обмежити команди, наприклад, для певного користувача або групи користувачів, які можуть працювати, наприклад. З su
, це все або нічого.
Ця функція зазвичай використовується для визначення ролей. Наприклад, ви можете визначити групу "резервних копій", яку можна запускати, dump
і tar
кожна з яких потребує кореневого доступу для належного резервного копіювання системного диска.
Я згадую це тут, тому що це означає, що ви можете надати комусь sudo
привілеї, не надаючи їм sudo -s
чи sudo bash
здібностей. У них є лише ті дозволи, які вони потребують, щоб виконувати свою роботу, тоді як su
вони працювали над усією системою. Однак ви повинні бути обережнішими з цим: якщо ви, наприклад, даєте комусь можливість сказати sudo vi
, він може вистрілити з нього vi
і мати фактично таку ж силу, як і з sudo -s
.
Оскільки він приймає пароль судора замість кореневого пароля, sudo
ізолює дозвіл між декількома судорами.
Це вирішує адміністративну проблему su
, яка полягає в тому, що при зміні пароля root su
потрібно сказати всім, хто мав це знати . sudo
дозволяє паролі sudoers змінюватись самостійно. Насправді, звичайним є блокування паролем облікового запису користувача в системі, sudo
щоб змусити всі завдання sysadmin виконувати через sudo
. У великій організації з багатьма надійними судорами це означає, що коли один із системних адміністраторів виїжджає, вам не доведеться змінювати кореневий пароль і поширювати його тим адміністраторам, які залишаються.
Основна відмінність між sudo bash
і в sudo -s
тому, що -s
це коротше, і дозволяє передавати команди для виконання в оболонці користувача за допомогою двох способів:
Ви можете сказати, sudo -s some-command
що працює some-command
під вашою оболонкою. В основному це скорочення sudo $SHELL -c some-command
.
Ви можете замість цього передати команди на стандартний вхід оболонки, наприклад sudo -s < my-shell-script
. Ви можете використовувати це з heredoc для надсилання декількох команд на один sudo
виклик, уникаючи необхідності вводити sudo
повторно.
Обидва ці поведінки необов’язкові. Набагато частіше ви даєте -s
поодинці, тому він просто запускає оболонку користувача інтерактивно. У такому режимі він відрізняється sudo bash
тим, що може запускати іншу оболонку, ніж bash
, оскільки спочатку він виглядає в SHELL
змінній середовища, а потім, якщо це не встановлено, у налаштуваннях оболонки для входу користувача, як правило, в /etc/passwd
.
Оболонка, яку виконує, sudo -s
успадковує поточне середовище користувача. Якщо ви насправді хочете - це чисте середовище, яке ви отримуєте відразу після входу в систему, то замість цього ви хочете sudo -i
, порівняно недавнє доповнення sudo
. Грубо кажучи, sudo -i
це sudo -s
як su -
слід su
: він скидає всі, крім кількох ключових змінних середовища, і повертає вас до домашнього каталогу вашого користувача. Якщо ви також не даєте командам запускатись під цією оболонкою через стандартний вхід, або sudo -i some-command
вона запустить цю оболонку як інтерактивну оболонку входу, тому сценарії запуску оболонки користувача (наприклад .bash_profile
) запускаються знову.
Все це робить sudo -i
значно більш безпечним, ніж sudo -s
. Чому? Тому що якщо хтось може змінити ваше середовище раніше sudo -s
, він може спричинити виконання ненавмисних команд. Найбільш очевидний випадок - це модифікація SHELL
, але це також може відбуватися менш безпосередньо, як, наприклад, через, PAGER
якщо ви говорите man foo
під час " sudo -s
.
Ви можете сказати: "Якщо вони можуть змінювати PAGER
, вони можуть змінювати PATH
, і тоді вони можуть просто замінити злу sudo
програму", але хтось достатньо параноїд може сказати, /usr/bin/sudo /bin/bash
щоб уникнути цієї пастки. Ви, мабуть, не такі параноїчні, що також уникаєте пасток у всіх інших чутливих змінних середовища. Ви також пам’ятали перевірити EDITOR
, наприклад, перед запуском будь-якої команди VCS ? Таким чином sudo -i
.
Оскільки sudo -i
також змінюється ваш робочий каталог на домашній каталог вашого користувача, ви все одно можете використовувати його sudo -s
в тих ситуаціях, коли ви знаєте, що хочете залишитися в тому самому каталозі, в якому ви були cd
, коли ви бігали sudo
. Однак все-таки безпечніше sudo -i
та cd
назад, де ти був.
sudo su -
цей спосіб, вам не потрібен пароль root, і-
переконайтеся, що домашній каталог встановлений правильно.