Різниця між користувачем sudo та користувачем root [закрито]


21

У /etc/sudoersфайлі вказано, які користувачі можуть робити те, що працює з sudoкомандою

Користувач root створює та змінює /etc/sudoersфайл.

Цю концепцію мені важко зрозуміти.

Якщо всі користувачі, які мають sudo privilage, належать до sudoersгрупи, то всі вони можуть вкоренитися, віддавши sudo suкоманду.

Тоді хто є фактичним користувачем root і як він контролює повноваження користувачів у групі sudoers?

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


4
Я думаю, що вам потрібно розширити, на яку частину важко зрозуміти.
garethTheRed

хто користувач root? Це питання мені важко зрозуміти. Оскільки гумонні користувачі можуть зателефонувати лише до групи судорів
ранчо

@rancho оновіть питання, будь ласка
peterph


Простий відповідь на ваше основне запитання (засноване на коментарях до відповіді): Це правда, що різниця між rootдоступом і sudoправами стає неактуальною, якщо ви дозволяєте sudo suзапускати. Однак не потрібно цього дозволити. Ви можете дозволити лише певний набір команд, наприклад, надати молодшому sysadmin sudoдоступ лише для конкретних команд резервного копіювання.
Wildcard

Відповіді:


29

Резюме: "root" - це фактична назва облікового запису адміністратора. "sudo" - це команда, яка дозволяє звичайним користувачам виконувати адміністративні завдання. "Судо" не є користувачем.


Довга відповідь:

"root" (він же "суперпользователь") - це ім'я облікового запису системного адміністратора. Походження назви трохи архаїчне, але це не має значення.

Користувач Root має ідентифікатор користувача 0 і номінально має необмежені привілеї. Root може отримати доступ до будь-якого файлу, запустити будь-яку програму, виконати будь-який системний виклик та змінити будь-які настройки. (Але див. Нижче¹).

До винаходу команди "sudo", якщо ви хотіли виконувати адміністративні завдання, вам довелося увійти як корінь, або отримавши підказку для входу² якось, або за допомогою suкоманди ("su" є короткою для користувача-замінника.) ³

Це трохи клопоту, а також не дає користувачам часткові адміністративні повноваження. Таким чином, була придумана команда "sudo" (скорочено "user substitute do").

Команда "sudo" дозволяє виконувати команди з привілеями суперрузера, поки ваш ідентифікатор користувача знаходиться у файлі sudoers, надаючи вам необхідну авторизацію.

Так, наприклад sudo vi /etc/hosts, дозволить вам редагувати файл хостів так, як якщо б ви працювали як root. Вам навіть не потрібен кореневий пароль, а лише ваш власний пароль для входу.

І звичайно, sudo suдозволив би вам просто стати root. Результат такий же, як якщо б ви увійшли в систему як root або виконали suкоманду, за винятком того, що вам не потрібно знати пароль root, але вам потрібно бути у файлі sudoers.

Файл sudoers визначає, хто може використовувати команду sudo і що вони можуть робити з нею.

Файл sudoers - це те, що дає вам декілька адміністраторів⁴. Фактично, ваші адміністратори є root, а також усі, перелічені у файлі sudoers. Без файлу sudoers єдиним адміністратором є root.

Насправді в організаціях, де хтось інший адмініструє ваш комп’ютер для вас, звичайно не знати кореневого пароля вашого власного комп'ютера - доки ви знаходитесь у файлі sudoers, це не має значення.

В одній компанії, в якій я працював, з великою фермою серверів, лише дуже, дуже невелика кількість людей знала корінні паролі. Натомість була база даних про те, кому дозволено працювати на яких серверах. Автоматизований процес додав би вас до файлів sudoers тих серверів, до яких ви мали право доступу, і видалили вас, коли термін дії вашої авторизації закінчився.


Ще одне: сучасні версії Unix тепер можуть обмежувати навіть те, що може робити користувач root.

Під SELinux (Security Enhanced Linux) фактично існує список контролю доступу, який визначає, яка програма може робити що, і навіть root не може подолати ці обмеження.

У системі Apple Integrity Protection (SIP) (яка називається "без корінців") деякі файли та каталоги блокуються, щоб доступ до них мали лише програми із відповідного білого списку.

Ці системи існують для захисту системи від випадків, коли зловмисним користувачеві вдається отримати кореневий доступ. (Або в деяких випадках, щоб не допустити, щоб користувачі не могли зламати свої вбудовані пристрої.) З очевидних причин надзвичайно важко обійти ці обмеження, навіть із кореневим доступом.

² Запрошення "login:" - це ще один архаїчний фрагмент історії Unix, починаючи з тих часів, коли ми використовували термінали ascii на послідовних лініях замість віконних систем. Ви все одно можете отримати підказку "login:", просто ввівши loginбудь-яке вікно терміналу або відкривши з'єднання ssh (або telnet або rsh) до свого комп'ютера з інших місць. Ви можете увійти як інший користувач звідти, якщо хочете. (І якщо на вашому комп'ютері є послідовні порти, ви все одно можете налаштувати його для входу в них.)

³ Можливо також, щоб окремі програми отримали кореневий доступ. Ці програми можуть робити все, що може зробити користувач із кореневим доступом, навіть коли він працює звичайним користувачем. Зазвичай вони обмежуються конкретними завданнями. Наприклад, програма crontab має привілеї root, щоб вона могла редагувати таблиці cron. Очевидно, що "sudo" має кореневі привілеї, щоб він міг робити те, що робить.

Я розкрию ще одну точку, яку я оглянув раніше. Я використовую взаємозамінно "адміністратор" і "root", але є й інші види адміністраторів. Їх часто називають "рольовими обліковими записами", що означає, що ці рахунки не належать до реальних людей, а натомість існують для виконання певної ролі в системі. Якщо ви подивитесь на /etc/passwdфайл у своїй системі, ви знайдете десятки і десятки таких акаунтів.

Наприклад, якби mysql був встановлений у вашій системі, був би користувач "mysql", а всі файли баз даних, конфігураційні файли тощо були б у власності цього користувача. Лише цей користувач мав би необхідні дозволи для доступу до файлів та запуску сервера mysql. У певному сенсі цей користувач був би обліковим записом адміністратора, але лише для mysql.

Якщо вам потрібно було виконати адміністративні завдання бази даних, ви або станете "mysql" за допомогою su mysqlкоманди, або використовуєте sudoтам, де файл sudoers надасть вам привілеї mysql для цих конкретних команд.


1
Файл sudoers - це те, що дає вам декілька адміністраторів. Фактично, ваші адміністратори є root, а також усі, перелічені у файлі sudoers. Без файлу sudoers єдиним адміністратором є root.
Едвард Фолк

1
"Під SELinux (Security Enhanced Linux) фактично існує список контролю доступу, який визначає, хто може робити, і навіть root не може подолати ці обмеження." - якщо навіть root не може пройти ці обмеження, то хто створює ці обмеження в першу чергу?
ранчо

1
Для уточнення цього: "Ефективно, ваші адміністратори є кореневими, а також усі, перелічені у файлі sudoers." записи судоуерів не повинні означати повний доступ до кореневого чи навіть кореневого рівня; Я можу надати Sven можливість перезапустити моніторинговий агент, який працює як монітор.
Джефф Шаллер

1
The "sudo" command lets you execute commands with superuser privileges as long as your user id is in the sudoers file [..]. На моїй машині (Solus OS 3) це неправильно. Моє ім’я користувача не міститься у файлі sudoers. і я все ще можу зробити sudo.
Мартін Андерссон

2
Стара відповідь, і це педантизм, але suце абревіатура "замінник користувача"; sudoтому "користувач-замінник do". Ви можете використовувати suдля входу як інший користувач, а не просто root. І ви можете використовувати sudoдля виконання команд як інший користувач.
josaphatv
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.