З 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, і-переконайтеся, що домашній каталог встановлений правильно.