TL; DR: Робіть корінь лише тоді, коли вам доведеться. sudo
робить це досить легко. Якщо ви ввімкнули кореневі логіни, ви все одно можете дотримуватися цього правила, вам потрібно бути обережним. Хоча ввімкнення кореневих логін насправді не є небезпечним, якщо виконано правильно, вам не потрібно активувати кореневі входи, оскільки у вас є sudo
.
Тут справді є два пов’язані питання.
- Чому для повсякденного використання комп'ютера (як веб-перегляд веб-сторінок, електронна пошта, обробка текстів, ігри тощо) погано входити як корінь?
- Чому Ubuntu за замовчуванням взагалі вимикає кореневі логіни та використовує
sudo
та polkit, щоб адміністратори могли запускати конкретні команди як root?
Чому б весь час не запускати все як root?
Більшість інших відповідей висвітлює це. Це зводиться до:
- Якщо ви використовуєте кореневі повноваження для завдань, які їх не вимагають, і ви в кінцевому підсумку робите щось, чого не хотіли робити, ви можете змінити або нашкодити своїй системі так, як вам не хочеться.
- Якщо ви запускаєте програму як корінь, коли вам не потрібно, і вона закінчується тим, що ви не мали намір робити, наприклад, через вразливість безпеки або іншу помилку - вона може змінитися або нашкодити ваша система таким чином, який ви не хочете.
Це правда, що навіть не роблячи речі як корінь, ти можеш заподіяти шкоду. Наприклад, ви можете видалити всі файли у власному домашньому каталозі, який зазвичай включає всі ваші документи, не запускаючи як root! (Сподіваємось, у вас є резервні копії.)
Звичайно, як корінь, існують додаткові способи випадкового знищення тих самих даних. Наприклад, ви можете вказати неправильний of=
аргумент для dd
команди та записати необроблені дані у свої файли (це робить їх способом, набагато складніше відновити, ніж якби ви їх просто видалили).
Якщо ви єдина людина, яка використовує ваш комп’ютер, шкода, яку ви можете зробити тільки як root, може насправді не перевищувати шкоду, який ви можете завдати звичайним привілеям користувача. Але це все ще не є причиною розширити свій ризик, щоб включити додаткові способи зіпсувати вашу систему Ubuntu.
Якщо робота з некористувальним обліковим записом користувача не дозволила вам контролювати власний комп’ютер, то це, звичайно, буде поганим компромісом. Але це не так - коли ви дійсно хочете виконати дію як root, ви можете зробити це за допомогою sudo
інших методів .
Чому б не дати можливість увійти як root?
Думка про те, що здатність увійти як корінь за своєю суттю є небезпечною, є міфом. У деяких системах за замовчуванням включений кореневий рахунок; інші системи використовують sudo
за замовчуванням, а деякі налаштовані з обома.
- Наприклад, OpenBSD , який широко і розумно вважається найбільш захищеною ОС загального призначення у світі, постачається з кореневим обліковим записом, увімкненим для локального входу на основі пароля.
- Інші шановні ОС, які роблять це, включають RHEL , CentOS та Fedora .
- Debian (від якого отримує Ubuntu ) користувач вирішує, який підхід буде налаштовано під час встановлення системи.
Об'єктивно неправильно мати систему, де ввімкнено кореневий рахунок, за умови, що це
- ви все ще тільки використовувати його , коли вам дійсно потрібно, і
- ви обмежуєте доступ до нього належним чином.
Часто новачки запитують, як увімкнути кореневий рахунок в Ubuntu. Ми не повинні приховувати цю інформацію від них, але зазвичай, коли люди запитують це, це тому, що вони відчувають помилкове враження, що їм потрібно ввімкнути кореневий обліковий запис. Насправді це майже ніколи не потрібно, тому, відповідаючи на подібні запитання, важливо пояснити це. Увімкнення кореневого облікового запису також дозволяє легко стати самовдоволеними та виконувати дії як root, яким не потрібні привілеї root. Але це не означає, що включення кореневого облікового запису само по собі є небезпечним.
sudo
заохочує та допомагає користувачам запускати команди як root, лише коли їм потрібно. Щоб запустити команду як root, введіть sudo
пробіл, а потім команду. Це дуже зручно, і багато користувачів усіх рівнів кваліфікації віддають перевагу такому підходу.
Коротше кажучи, вам не потрібно включати кореневі логіни, оскільки у вас є sudo
. Але поки ви використовуєте його лише для адміністративних завдань, які цього вимагають, це приблизно однаково безпечно вмикати та входити в систему як root, до тих пір, поки це лише такими способами :
- Місцево - з неграфічної віртуальної консолі .
- За допомогою
su
команди при вході з іншого облікового запису.
Однак значні додаткові ризики для безпеки виникають, якщо ви ввійдете як корінь цими способами:
Графічно. Коли ви ввійдете в систему графічно, для створення графічного інтерфейсу працює ціла маса матеріалів, і ви в кінцевому підсумку запустите ще більше додатків як root, щоб використовувати цей інтерфейс для чого завгодно. Це суперечить принципу лише запуску програм як root, яким дійсно потрібні привілеї root. Деякі з цих програм можуть містити помилки, включаючи помилки безпеки.
Крім того, є причини, які не мають безпеки, щоб цього уникнути. Графічний вхід як root не підтримується добре - як згадує loevborg , розробники настільних середовищ та графічних додатків не часто перевіряють їх як root. Навіть якщо вони це роблять, увійшовши у графічне середовище робочого столу як root, користувачі не отримують реальну версію альфа-та бета-тестування користувачами, як це майже ніхто не намагається (з причин безпеки, пояснених вище).
Якщо вам потрібно запустити конкретну графічну програму як root, ви можете використовуватиgksudo
або sudo -H
. Це запускає набагато менше програм як root, ніж якщо ви насправді увійшли в систему графічно за допомогою кореневого облікового запису.
Віддалено. Обліковий root
запис фактично може робити що завгодно, і він має таку ж назву практично в усіх системах, схожих на Unix. Увійшовши в систему як корінь за допомогою ssh
інших та віддалених механізмів, або навіть налаштувавши віддалені сервіси, щоб це дозволило , ви значно полегшуєте зловмисникам, включаючи автоматизовані сценарії та зловмисне програмне забезпечення, яке працює на ботнетах, отримувати доступ через грубу силу, атаки словника (і можливо деякі помилки безпеки).
Ймовірно, ризик не дуже високий , якщо ви дозволяєте тільки ключ на основі , а не на основі пароля кореневих логінів.
За замовчуванням в Ubuntu ні графічні кореневі логіни, ні віддалені входи через SSH не включені, навіть якщо ви ввімкнули вхід як root . Тобто, навіть якщо ви ввімкнули кореневий вхід, він все ще вмикається лише безпечними способами.
- Якщо ви запустили ssh-сервер на Ubuntu і не змінилися
/etc/sshd/ssh_config
, він буде містити рядок PermitRootLogin without-password
. Це вимикає кореневий вхід на основі пароля, але дозволяє здійснювати вхід на основі ключа. Однак жоден ключ не налаштований за замовчуванням, тому, якщо ви його не встановили, це теж не спрацює. Крім того, віддалений кореневий вхід на основі ключа набагато менш поганий, ніж віддалений кореневий вхід на основі пароля, частково тому, що він не створює ризику грубої сили та атак на словник.
- Незважаючи на те, що дефолти повинні захищати вас, я думаю, що все-таки хороша ідея перевірити вашу ssh-конфігурацію, якщо ви збираєтесь ввімкнути кореневий рахунок. Якщо ви користуєтесь іншими службами, які надають віддалений вхід, наприклад, ftp, вам слід також перевірити їх.
На закінчення:
- Робіть речі як корінь лише тоді, коли вам потрібно;
sudo
допомагає вам це зробити, при цьому надаючи вам повну потужність root, коли ви хочете.
- Якщо ви розумієте, як працює корінь та небезпеки його надмірного використання, включення кореневого акаунта насправді не проблематично з точки зору безпеки.
- Але якщо ви це розумієте, ви також знаєте, що вам майже не потрібно ввімкнути кореневий рахунок .
Для отримання додаткової інформації про root та sudo
, зокрема, про додаткові переваги, sudo
які я тут не висвітлював, настійно рекомендую RootSudo у вікі довідки Ubuntu.