Ако се гмурнете с главата напред в GNU/Linux, рано или късно ще срещнете думите root, sudo и su навсякъде . И това не е случайно: разбирането какво е суперпотребител, как да получите администраторски права и какви рискове са свързани с това е от съществено значение, за да избегнете повреждане на системата си.
В Linux сигурността се върти около идеята, че обикновените потребители имат ограничени разрешения и само root има пълен достъп . Благодарение на това системата е много по-стабилна от другите, но също така включва изучаване на няколко ключови понятия: какво точно е root потребител, как се свързва със `sudo` и `su`, кога е подходящо да се използва всеки от тях и какво да направите, ако загубите паролата си или искате да я деактивирате.
Какво е root в Linux и какви видове потребители съществуват?
Във всяка GNU/Linux система има няколко вида акаунти, но един от тях има абсолютен контрол над всички останали: root е суперпотребителят с пълен контрол над системата . Той може да чете, променя или изтрива всеки файл, да създава или изтрива потребители, да инсталира и деинсталира програми, да променя конфигурациите на ядрото и зареждането и като цяло да прави всичко, което системата позволява.
Наред с root са и обикновените потребители, предназначени за ежедневни задачи . Тези акаунти имат ограничени разрешения: те не могат да инсталират системни пакети, да пишат в директории като /etc, /usr или /var без разрешение или да променят критични файлове. Те обаче могат временно да повишат привилегиите си, използвайки инструменти като sudo или su, когато са необходими административни задачи.
В допълнение към тези два профила, Linux използва друг вид специални акаунти, известни като системни или сервизни (демонски) потребители . Тези акаунти са свързани с услуги като уеб сървъри, бази данни или системни демони и обикновено са изключително ограничени: те имат разрешения само за това, което е строго необходимо за функционирането на услугата, намалявайки въздействието на потенциално нарушение на сигурността.
Важното е да се разбере, че само root има пълни привилегии, а всички останали потребители работят в рамките на йерархия от разрешения . Тази структура ви позволява да имате многопотребителски сървър или споделен компютър, без никой да може да пробие системата или да шпионира други при най-малката провокация.
Защо root-ът е толкова мощен (и толкова опасен)
Когато работите като root, няма предпазна мрежа: системата приема, че знаете какво правите и изпълнява командите ви без въпроси . Това е огромно предимство за системните администратори, но и източник на много инциденти от типа „Случайно счупих сървъра“.
С права на суперпотребител е възможно например, Изтрийте цели системни директории за секундиКоманда като rm -rf / o rm -rf /* (или променлива с правописна грешка, тип rm -rf $directorio/* Когато $directory е празен), това може да изтрие почти цялото съдържание на диска и да направи системата неизползваема.
Рискът не се ограничава само до изтриване на файлове: ако стартирате скрипт, изтеглен от интернет , подозрителен пакет или команда, която не разбирате като root, е възможно да инсталирате руткитове, шпионски софтуер или задни врати с привилегии на ядрото, както е демонстрирано от кибератаки срещу Mac и Linux . В този случай нападателят би имал пълен контрол, би могъл да скрие присъствието си и да остане в системата дори след рестартиране.
Съществуват и на пръв поглед безобидни команди, които могат да причинят сериозни проблеми, ако се изпълнят с повишени привилегии. Неправилно приложена команда `chmod` или `chown` в директории като `/etc` или `/boot` може да прекъсне процеса на зареждане, да повреди GRUB или да направи критични конфигурационни файлове недостъпни, принуждавайки ви да използвате LiveCD или дори да преинсталирате цялата система.
Поради всички тези причини, общата философия в Linux е много ясна: винаги работете като нормален потребител и повишавайте привилегиите само когато е абсолютно необходимо . Именно това е причината за съществуването на инструменти като sudo и su.
sudo: изпълнява команди като root, като същевременно остава нормален потребител
sudo (super user do) е основният инструмент в повечето съвременни дистрибуции. Целта му е проста: да позволи на оторизиран потребител да изпълни определена команда с привилегиите на друг потребител (обикновено root), без да променя сесиите или да знае root паролата.
Основната операция е много проста: въвеждате `sudo` преди командата, която трябва да изпълните с администраторски права , и системата ще поиска вашата собствена парола (не паролата на root). Ако вашият потребител е оторизиран в конфигурацията на sudoers, командата ще бъде изпълнена като суперпотребител.
Например, за да инсталира програма с APT на Debian или Ubuntu, обикновен потребител не може да направи следното:
apt install gparted
Ако обаче използвате sudo, получавате само временни root права за тази команда :
sudo apt install gparted
Същото важи и за типичните административни действия: актуализиране на системата, редактиране на конфигурации в /etc, управление на услуги, промяна на пароли или изключване и рестартиране . Някои много често срещани примери са:
- Актуализирайте списъка с пакети и системата:
sudo apt update && sudo apt upgrade - Редактиране на конфигурационен файл:
sudo nano /etc/hosts - Променете root паролата:
sudo passwd root - Рестартирайте или изключете компютъра:
sudo rebootosudo poweroff
Важен детайл е, че sudo прилага „гратисен период“ : след като въведете паролата веднъж, можете да продължите да изпълнявате команди със sudo за няколко минути, без да бъдете подканвани отново. Това е удобно, но отваря прозорец, в който, ако някой се добере до компютъра ви, може да използва верижно команди с повишени привилегии.
Ако този аспект ви засяга, самият инструмент ви позволява да затвърдите поведението: Можете да конфигурирате sudo винаги да иска паролата, без гратисен период.За да направите това, файлът /etc/sudoers се редактира (винаги с visudo) и се добавя директива, подобна на тази:
Defaults:ALL timestamp_timeout=0
Файлът /etc/sudoers и конфигурацията на sudo
Магията на sudo се крие в начина, по който се делегират привилегиите. Политиката за това кой какво може да изпълнява е дефинирана във файла /etc/sudoers и, на много системи, в допълнителни файлове в /etc/sudoers.d.
Изключително важно е да не отваряте /etc/sudoers „без никакви промени“, използвайки любимия си редактор: Ако допуснете синтактична грешка, можете да направите sudo неизползваем.Правилният начин е да използвате командата visudo, който отваря файла, проверява синтаксиса му преди запазване и предотвратява оставянето на повредени промени.
Типична конфигурация включва записи като:
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
Тези редове показват, най-общо казано, че root потребителят може да изпълнява всяка команда на всеки хост, както всеки друг потребител или група , и че всеки потребител в групата sudo може също да изпълнява всяка команда със sudo . В дистрибуции като Ubuntu, присъединяването към групата sudo ефективно ви прави администратор.
В допълнение към прости правила, sudoers ви позволява да дефинирате псевдоними за потребители, команди и цели , за да организирате по-добре делегирането. Например, можете да групирате няколко администратори под User_Alias, няколко команди за изключване и рестартиране под Cmnd_Alias и да предоставите на тази група разрешение да изпълнява само тези действия.
Друг интересен момент е използването на тагове като NOPASSWD , което ви позволява да изпълнявате определени команди със sudo, без да ви пита за парола . Например, можете да позволите на потребител да изключи компютъра, без да е необходимо да въвежда паролата си.
miusuario ALL=NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot
Тази техника е много полезна за интегриране на скриптове, клавишни комбинации или бутони в графичната среда, които изискват привилегии, но трябва да се използва с повишено внимание: колкото повече команди могат да бъдат изпълнени без парола, толкова по-голяма е повърхността на риск.
Su: превключване на потребители и получаване на root достъп
Докато `sudo` се фокусира върху изпълнението на специфични команди с повишени привилегии , командата `su` (substitute user) се използва за превключване на потребители в рамките на една и съща терминална сесия. Ако не посочите към кой потребител искате да превключите, `su` приема, че искате да превключите към root акаунта.
Най-разпространеният начин да го използвате е този, за да станете суперпотребител:
su
Системата ще ви попита за root парола И ако е правилно, ще имате сесия на суперпотребител. Можете да потвърдите това с whoami o id -uкоето би трябвало да върне съответно „root“ и „0“. Подканата обикновено се променя и завършва на # вместо $което служи като визуално напомняне, че имате абсолютна власт.
Ако искате да превключите към потребител, различен от root, името е посочено по-долу:
su nombre_de_usuario
В този случай ще бъдете попитани за паролата на този друг потребител. Това е много полезно на сървъри, където има няколко технически акаунта и трябва да изпълнявате специфични задачи, сякаш сте потребителят на услугата (например потребителят, управляващ уеб сървър или база данни).
Струва си да се отбележи, че можете да промените само потребителя или цялата среда за вход . За да симулирате пълно влизане (зареждане на целевата обвивка, домашната директория, променливите на средата и т.н.), използвайте:
su -
О, добре:
su - nombre_de_usuario
Докато сте под su, всички команди, които въвеждате, се изпълняват с разрешенията на целевия акаунт . Това е удобно, когато трябва да извършите много административни действия подред и не искате да въвеждате `sudo` преди всеки ред, но увеличава риска от допускане на сериозна грешка.
За да излезете от режим на суперпотребител или да се върнете към оригиналния потребител, просто изпълнете:
exit
Кога да използвате sudo и кога su (или root shell)
Когато става въпрос за това, много хора се чудят кое е по-добре: винаги да използват `sudo` или да преминат към root с `su` . Отговорът зависи от задачата и стила на администриране, но добрите практики за сигурност са до голяма степен сходни.
На настолни системи и повечето съвременни сървъри е силно препоръчително да използвате sudo за по-голямата част от административните задачи . По този начин получавате повишени привилегии само за много специфични команди, оставяте ясен запис в системния регистър и намалявате прозореца на възможност за случайни грешки.
Използвайте `su`, за да влезете като root или да влезете директно като root (ssh root@servidor или като въведете „root“ в графичния мениджър за вход) Това се счита за рискована практика и е запазено за специфични случаи.: аварийни ремонти, възстановяване на системата, много специфични задачи, при които наистина се нуждаете от непрекъсната сесия на суперпотребител.
Типичен, сравнително разумен работен процес би бил: работете с нормалния си потребителски акаунт, използвайте sudo за случайни административни команди и прибягвайте до root shell само когато няма друга опция . И след като задачата е завършена, незабавно излезте от тези привилегировани режими.
Не забравяйте също, че в много съвременни дистрибуции root акаунтът е деактивиран по подразбиране , именно за да се насърчи използването на sudo и да се предотврати начинаещите потребители да се занимават със суперпотребителя, без наистина да знаят какво правят.
Показване на звездички при въвеждане на парола със sudo
Ако някога сте използвали `sudo`, със сигурност сте забелязали, че когато въвеждате паролата си, терминалът не показва нито един символ , дори точки или звездички. Това е проектирано така, че никой да не може да определи дължината на паролата ви, като погледне екрана, но на практика много потребители го намират за досадно, защото не могат да разберат дали въобще въвеждат нещо.
Всъщност, sudo отдавна предлага опция, наречена pwfeedback , която показва звездичка за всеки въведен символ. За да я активирате, трябва да редактирате конфигурацията на sudo с visudo:
sudo visudo
В отворения файл просто добавете ред като този в секцията „Настройки по подразбиране“:
Defaults pwfeedback
След запазване и излизане, следващия път, когато изпълните команда със `sudo`, ще видите звездичка за всеки клавиш, който натиснете, докато въвеждате паролата си . Ако някога искате да се върнете към класическото поведение (без визуално ехо), просто премахнете този ред и запазете отново с `visudo`.
Деактивирайте или блокирайте root акаунта
В някои среди, особено когато множество потребители имат физически или отдалечен достъп до машината, може да е полезно да се блокира директното влизане като root . Това предотвратява свободното споделяне на паролата на суперпотребителя и ограничава администрирането чрез sudo.
Блокирането на root достъп означава, че потребителите няма да могат да влизат като root, нито чрез `su`, нито чрез директно влизане (освен ако не бъде нулирана валидна парола). Въпреки това, оторизираните потребители, принадлежащи към съответната група, все още ще могат да използват `sudo` без промени.
За да заключите root акаунта в много дистрибуции, се използва команда като тази:
sudo passwd -l root
Тази команда маркира root паролата като неизползваема, което Това ви пречи да се удостоверите директно като суперпотребител.Ако желаете да активирате отново акаунта по всяко време, ще трябва да му зададете нова парола. sudo passwd root или друг метод за възстановяване на парола.
Някои дистрибуции дори са с root заключен от самото начало и ви принуждават да управлявате всичко чрез sudo. Други ви позволяват да го активирате или деактивирате по желание със същите тези команди.
Възстановяване на root паролата: GRUB и LiveCD
Загубата на root паролата или заключването на акаунта ви без да запишете новата парола е често срещан проблем, особено за начинаещи. За щастие, Linux предлага няколко начина за нулиране на паролата на суперпотребител , стига да имате физически достъп до компютъра.
Първият метод включва използване на GRUB в режим на възстановяване . В менюто за зареждане обикновено можете да получите достъп до „Разширени опции“ и да изберете „Режим на възстановяване“. В това меню обикновено ще намерите опция като „root“ или „Преминаване към root обвивка“, която отваря конзола с повишени привилегии.
След като влезете в тази конзола, файловата система вероятно е монтирана само за четене. За да промените паролата, трябва да монтирате отново главната директория с права за запис.
mount -o rw,remount /
След това командата passwd се използва за задаване на нова парола на акаунта на суперпотребителя:
passwd root
След като промяната приключи, препоръчително е да синхронизирате всички чакащи данни и да рестартирате с:
sync
reboot
Ако по някаква причина не можете да получите достъп до режим на възстановяване или системата е по-повредена, план Б е да използвате LiveCD или LiveUSB на GNU/Linux дистрибуция . Стартирайте компютъра си оттам, изберете опцията „Опитай без инсталиране“ и отворете терминал.
В сесията на живо, първо ставате root (или потребител със sudo), за да манипулирате инсталирания диск:
sudo su
След това идентифицирате дяла, където се намира системата, която ще бъде спасена, с команда като:
fdisk -l
След като разберете кой е (например /dev/sda1), създавате точка на монтиране и монтирате дяла:
mkdir /mnt/recover
mount /dev/sda1 /mnt/recover
Следващата стъпка е да извършите chroot , тоест да промените root-а на текущата обвивка на монтираната система, така че командите ви да действат така, сякаш сте вътре в тази инсталация:
chroot /mnt/recover
Оттам можете да зададете нова root парола, като използвате обичайната команда:
passwd root
След излизане, демонтиране и рестартиране, системата ще се стартира нормално с новозададената парола , готова за използване с вашия компютър или за бъдещи задачи по поддръжка.
Root потребителят в Ubuntu и защо е деактивиран
В света на Ubuntu (и неговите производни) има важна разлика: потребителят root съществува, но е заключен по подразбиране . Не можете да влезете като root или със `su`, а цялото администриране се извършва чрез `sudo`, използвайки паролата на основния потребител, създаден по време на инсталацията.
От гледна точка на сигурността, това е напълно логично, защото не са ви необходими права на суперпотребител за ежедневни задачи като сърфиране, разработка или редактиране на снимки и видеоклипове . Когато трябва да инсталирате софтуер или да актуализирате системата, просто пред съответната команда въведете `sudo` и въведете паролата си.
sudo apt update
sudo apt upgrade
Ако някога ви е необходима временна root обвивка в Ubuntu, не е необходимо да активирате root акаунта . Можете да използвате:
sudo -i
Терминалът ще се промени, за да покаже, че сте влезли като root (отново, като командата завършва на #), и ще можете да изпълнявате дълга поредица от администраторски команди. Когато приключите, излезте с exit и ще се върнете към нормалния си потребителски акаунт.
Във всеки случай, ако настоявате да активирате root акаунта в Ubuntu, механизмът е същият като в други дистрибуции: задайте му парола с:
sudo passwd root
Ще бъдете помолени да въведете новата парола два пъти и от този момент нататък ще можете да влезете като root или да използвате `su` с тази парола. Ако искате да се върнете към първоначалното състояние, можете да заключите акаунта отново с:
sudo passwd -dl root
Тези видове промени трябва да бъдат внимателно обмислени, защото колкото по-лесен е достъпът като root, толкова по-голямо е въздействието на небрежност или атака , особено върху устройства, постоянно свързани с интернет.
Най-добри практики и често срещани приложения на root, sudo и su
След всичко това, основният извод е, че суперпотребителят е изключително мощен инструмент, който трябва да се използва разумно . Linux е проектиран така, че по подразбиране е трудно да се пробие системата от нормален акаунт, но веднага щом повишите привилегиите, тази защита изчезва.
В ежедневната употреба най-разумният подход е да се избягва влизането като root чрез графичния интерфейс, да се избягва директното използване на SSH като root, освен в специфични случаи, и да се използва sudo, когато е възможно . Правилното конфигуриране на /etc/sudoers, използването на visudo, псевдоними на команди и, където е уместно, тагове като NOPASSWD, ви позволява да персонализирате сигурността според вашите нужди, без да жертвате удобството.
Също така е изключително важно да внимавате с всяка команда, която намирате онлайн и която ви моли да я изпълните със `sudo` или като root . Преди да поставите каквото и да било в терминала, проверете какво прави, уверете се, че го разбирате и се уверете, че източникът е надежден. Една-единствена неправилно поставена команда `rm` или подозрителен скрипт може да ви струва всичките ви данни.
Ако проявявате минимално внимание, използвате root само когато е необходимо, управлявате добре потребителските разрешения и имате план за възстановяване на пароли чрез GRUB или LiveCD, можете да се възползвате максимално от мощта на Linux, без да живеете в постоянен страх от срив на системата с неправилно поставен пръст.