Úvod
Premýšľate niekedy nad tým, prečo musíte písať „sudo“ pri pokuse o spustenie určitých príkazov v operačnom systéme Linux alebo Unix? Sudo je v skutočnosti skratka, ktorá znamená „super-user do“. Keď použijete príkaz sudo, môžete spúšťať programy a vykonávať príkazy s bezpečnostnými oprávneniami iného používateľa.
V predvolenom nastavení príkaz sudo umožňuje používateľom systému spúšťať príkazy s oprávneniami superpoužívateľa. Nová inštalácia operačného systému Linux/Unix vytvorí účet root, ktorý má oprávnenia superpoužívateľa. Pri počiatočnom nastavení servera so systémom Linux/Unix sa správcovia systému prihlasujú pomocou účtu root a prideľujú systémové práva ostatným používateľom systému. Tieto nastavenia sú uložené v súbore s názvom sudoers. Účet s oprávneniami root môže upravovať súbor sudoers a meniť oprávnenia ostatných používateľov.
V tomto návode si povieme, ako môžete získať oprávnenia root a vykonávať úpravy v súbore sudoers.
Požiadavky
Toto je praktický návod a na jeho úplné pochopenie si budete musieť príkazy vyskúšať. V tomto návode budeme používať server Ubuntu 20.04, avšak môžete postupovať podľa týchto krokov, ak máte akúkoľvek z moderných distribúcií Linuxu, ako napríklad Debian a CentOS. Môžete postupovať podľa tohto odkazu a nastaviť si vlastný cloudový server Ubuntu na CloudSigma.
Získanie oprávnení root
Oprávnenia root môžete získať tromi spôsobmi, o ktorých si povieme nižšie:
Prihlásenie ako root
Najjednoduchší spôsob, ktorý väčšina ľudí používa na získanie oprávnení root, je prihlásenie sa do systému pomocou prihlasovacích údajov používateľa root. Ak pristupujete k svojmu lokálnemu počítaču, stačí zadať používateľské meno a budete vyzvaní na zadanie hesla.
Ďalším spôsobom, ktorý môžete použiť na prihlásenie ako root, je použitie SSH – nástroja príkazového riadku na prihlasovanie a vykonávanie úloh na serveri. Vyžaduje používateľské meno a IP adresu vášho servera. Syntaxia na prihlásenie ako root je nasledovná, nahraďte IP adresu vášho servera:
|
1 |
ssh root@your_server_ip_or_domain_name |
Keď zadáte vyššie uvedený príkaz do terminálu, budete buď vyzvaní na zadanie hesla, ak nemáte nastavené kľúče SSH, alebo budete vyzvaní na zadanie prístupovej frázy pre váš kľúč SSH, ak ste ich mali nastavené. Po zadaní správnych prihlasovacích údajov budete prihlásení. Postupujte podľa tohto návodu s podrobnými pokynmi, ako použiť SSH na pripojenie k vzdialenému serveru v Ubuntu.
Použitie su na získanie oprávnení root
Do systému Linux sa môžete prihlásiť pomocou akéhokoľvek iného účtu, ktorý nie je root, čo je zvyčajne odporúčaný spôsob pri vykonávaní nesprávcovských úloh. Kedykoľvek chcete získať oprávnenia root, stačí do terminálu napísať su:
|
1 |
su |
Systém vás vyzve na zadanie hesla root, po ktorom získate prístup k relácii shellu root. Počas tejto relácie shellu môžete vykonávať všetky administratívne úlohy a kedykoľvek sa budete chcieť vrátiť do normálneho shellu, stačí stlačiť Ctrl + D. Prípadne môžete napísať exit do terminálu a stlačiť enter.
Použitie sudo na spúšťanie príkazov s oprávneniami root
Príkaz sudo, ktorý bol stručne predstavený na začiatku tohto návodu, vám umožňuje spúšťať jednoriadkové príkazy bez potreby shellu s oprávneniami root. Stačí napísať sudo a za ním príkaz, ktorý sa má vykonať:
|
1 |
sudo execute_this_command |
Napríklad na aktualizáciu systému môžete zadať nasledovné:
|
1 |
sudo apt-get update |
Vyzve vás na zadanie hesla. Rozdiel medzi príkazom su a sudo je ten, že su si pýta heslo root, zatiaľ čo sudo si pýta heslo aktuálneho používateľa. Prístup sudo nie je používateľom udelený predvolene, pretože prináša veľké bezpečnostné dôsledky pre systém. Viac o tom budeme hovoriť v nasledujúcich častiach.
Použitie Visudo na úpravu súboru sudoers
Oprávnenia sudo sú nakonfigurované v súbore sudoers umiestnenom v /etc/sudoers. Tieto privilégiá sú potrebné pre každého používateľa na získanie prístupu k systému Linux. Akákoľvek syntaktická chyba zabráni používateľom prihlásiť sa do systému, čím sa systém stane nefunkčným.
Visudo príkaz otvorí súbor v špeciálnom editore, ktorý pri ukladaní kontroluje syntax súboru. Je preto dôležité, aby ste používali iba visudo príkaz na otvorenie súboru, aby ste predišli znefunkčneniu vášho serverového systému. V predvolenom nastavení bol visudo nastavený na otvorenie textového editora pomocou (vi) vim. Ubuntu však nakonfigurovalo visudo tak, aby používalo nano textový editor. V systémoch Debian alebo Ubuntu môžete prejsť na iný editor zadaním nasledujúceho príkazu:
|
1 |
sudo update-alternatives --config editor |
Zobrazí sa zoznam editorov, z ktorých si môžete vybrať predvolený editor, ako je znázornené na snímke obrazovky. Vyberte číslo prislúchajúce editoru, ktorý uprednostňujete:

V distribúcii CentOS Linux upravte súbor /etc/sudoers a pridajte nasledujúce riadky:
|
1 2 |
Defaults editor = /usr/bin/vim:/usr/bin/vi:/usr/bin/nano Defaults env_keep += "EDITOR" |
Zadajte nasledujúci príkaz. Nezabudnite nahradiť názov your_editor_of_choice:
|
1 |
export EDITOR=`which your_editor_of_choice` |
Tento príkaz pridá riadok do súboru ~/.bashrc. Na implementáciu zmien zadajte do terminálu nasledujúci príkaz:
|
1 |
. ~/.bashrc |
Keď máte visudo nakonfigurované, môžete otvoriť súbor v /etc/sudoers zadaním príkazu:
|
1 |
sudo visudo |
Úprava súboru Sudoers
Keď spustíte predchádzajúci príkaz, súbor sa otvorí vo vašom primárnom editore, ktorý ste nakonfigurovali. Nižšie je uvedený obsah súboru:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# # Tento súbor MUSÍ byť upravovaný pomocou príkazu 'visudo' ako root. # # Zvážte pridanie lokálneho obsahu do /etc/sudoers.d/ namiesto # priamej úpravy tohto súboru. # # Podrobnosti o tom, ako písať súbor sudoers, nájdete v manuálovej stránke (man page). # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin" # Špecifikácia aliasov hostiteľov # Špecifikácia aliasov používateľov # Špecifikácia aliasov príkazov # Špecifikácia privilégií používateľov root ALL=(ALL:ALL) ALL # Členovia skupiny admin môžu získať privilégiá root %admin ALL=(ALL) NOPASSWD:ALL # Povoliť členom skupiny sudo spustiť akýkoľvek príkaz %sudo ALL=(ALL) NOPASSWD:ALL # Viac informácií o direktívach "#include" nájdete v sudoers(5): #includedir /etc/sudoers.d |
Komentáre sú pomerne popisné, ale nižšie si rozoberieme, čo jednotlivé riadky znamenajú.
Predvolené riadky
- Defaults env_reset – Resetuje premenné prostredia terminálu, aby sa odstránili akékoľvek premenné používateľa. Týmto sa vymažú potenciálne škodlivé premenné z relácie sudo.
- Defaults mail_badpass – Inštruuje systém, aby odoslal upozornenia o neúspešných pokusoch o zadanie hesla sudo e-mailom nakonfigurovanému mailto používateľovi, zvyčajne účtu root.
- Defaults secure_path – Obsahuje niekoľko ciest v súborovom systéme, v ktorých bude operácia sudo hľadať aplikácie na spustenie, aby sa zabránilo použitiu iných používateľom definovaných ciest, ktoré by mohli byť pre systém nebezpečné.
Riadky so špecifikáciou privilégií používateľa
|
1 |
root ALL=(ALL:ALL) ALL |
- root ALL=(ALL:ALL) ALL – Prvé pole špecifikuje meno používateľa, na ktorého sa pravidlo bude vzťahovať. V tomto prípade je to root používateľ.
- root ALL=(ALL:ALL) ALL – Prvé ALL určuje, že pravidlo sa bude vzťahovať na všetkých hostiteľov.
- root ALL=(ALL:ALL) ALL – Druhé ALL určuje, že používateľ, na ktorého sa toto pravidlo vzťahuje (t. j. root) môže spúšťať príkazy ako všetci používatelia.
- root ALL=(ALL:ALL) ALL – Tretie ALL určuje, že používateľ, na ktorého sa toto pravidlo vzťahuje (t. j. root) môže spúšťať príkazy ako všetky skupiny.
- root ALL=(ALL:ALL) ALL – Posledné ALL určuje, že tieto pravidlá sa vzťahujú na všetky príkazy.
Z toho, čo toto pravidlo naznačuje, vyplýva, že používateľ root môže spustiť akýkoľvek príkaz pomocou sudo, ak zadá správne heslo.
Riadky so špecifikáciou privilégií skupín
Tieto riadky špecifikujú pravidlá privilégií sudo, ktoré sa vzťahujú na skupiny. Polia označujú rovnaké akcie ako riadky s privilégiami používateľov, s malým rozdielom. Začínajú znakom %, ktorý označuje názvy skupín.
Ako môžete vidieť, skupina admin môže spustiť akýkoľvek príkaz ako akýkoľvek používateľ na akomkoľvek hostiteľovi. Skupina sudo má rovnaké privilégium s dodatočným privilégiom spúšťať príkazy ako akákoľvek skupina.
Riadok s include /etc/sudoers.d
Riadok #includedir /etc/sudoers.d môže kvôli znaku # na začiatku riadku vyzerať ako komentár. Ide však o direktívu include, ktorá určuje, že súbory v adresári /etc/sudoers.d by sa mali načítať a použiť ako súčasť súboru sudoers. Súbory v tomto adresári sa riadia rovnakými pravidlami ako súbor sudoers.
Každý súbor v adresári, ktorý neobsahuje bodku (.) a nekončí na ~ sa prečíta a pripojí ku konfigurácii súboru sudoers. Tento adresár umožňuje aplikáciám meniť privilégiá sudo pri inštalácii umiestnením všetkých súvisiacich pravidiel do jedného vyhradeného súboru v adresári /etc/sudoers.d bez toho, aby sa zmenil predvolený súbor sudoers. Navyše, keď chcete skontrolovať alebo zrušiť privilégiá pre nejakú aplikáciu, môžete jednoducho skontrolovať alebo upraviť súbory v adresári /etc/sudoers.d bez toho, aby ste upravovali súbor /etc/sudoers priamo.
Ako všeobecné pravidlo platí, že všetky súbory v adresári /etc/sudoers.d by sa mali vždy upravovať pomocou príkazu visudo. Nižšie je uvedená syntax, nezabudnite v príkaze nahradiť názov súboru, ktorý chcete upraviť:
|
1 |
sudo visudo -f /etc/sudoers.d/file_name_to_edit |
Priradenie privilégií Sudo používateľovi
Keď novému používateľovi udelíte všeobecný prístup sudo, znamená to, že ste tomuto používateľskému účtu udelili plný administrátorský prístup k systému. Toto je bežná úloha, ktorú správcovia systému vykonávajú pri vytváraní iných používateľov (okrem root) s privilégiami sudo.
V systémoch ako Ubuntu 20.04, ktoré už majú univerzálnu administratívnu skupinu, môžeme používateľovi jednoducho priradiť privilégiá sudo pridaním používateľa do tejto skupiny. Skupina sudo, ako je vidieť v súbore /etc/sudoers, má plné administratívne privilégiá a meno používateľa môžeme do tejto skupiny pridať zadaním nasledujúceho príkazu:
|
1 |
sudo usermod -aG sudo username |
Voliteľne môžete použiť príkaz gpasswd na dosiahnutie rovnakého výsledku:
|
1 |
sudo gpasswd -a username sudo |
Na systéme CentOS, sa predvolená skupina s privilégiami sudo nazýva wheel, takže privilégiá môžete priradiť pomocou príkazu:
|
1 |
sudo usermod -aG wheel username |
Voliteľne môžete pomocou príkazu gpasswd dosiahnuť to isté pomocou príkazu:
|
1 |
sudo gpasswd -a username wheel |
V niektorých prípadoch wheel skupina v systéme CentOS môže byť v súbore /etc/sudoers zakomentovaná. Ak ju chcete povoliť, otvorte súbor pomocou visudo a odkomentujte riadok s názvom skupiny. Môžete to urobiť odstránením znaku # na začiatku riadku: %wheel ALL=(ALL) ALL.
Vytváranie vlastných pravidiel
S doterajšími znalosťami všeobecnej syntaxe súboru sudoers je čas, aby ste nastavili niekoľko pravidiel.
Vytvorenie aliasov
Aliasy vám umožňujú organizovať súbor sudoers zoskupením položiek pod rôzne „aliasy“. V tejto časti si rozoberieme tri direktívy: User_Alias na vytváranie aliasov používateľov/skupín, Cmnd_Alias na vytváranie aliasov príkazov a Runas_Alias na povolenie spustenia pod iným používateľom.
Napríklad pomocou User_Alias, vo vašom súbore /etc/sudoers môžete pridať nasledujúci úryvok na vytvorenie troch rôznych skupín používateľov. Niektorí používatelia môžu patriť do viac ako jednej skupiny:
|
1 2 3 |
User_Alias GROUPONE = adelle, nikita, ellie User_Alias GROUPTWO = nikita, brenden, natalia User_Alias GROUPTHREE = brenden, walter, james |
Všimnite si, že všetky názvy skupín začínajú veľkým písmenom. Po pridaní vyššie uvedených aliasov skupín do súboru /etc/sudoers môžete priradiť oprávnenie na aktualizáciu databázy apt skupine GROUPTWO pridaním nasledujúceho pravidla do súboru /etc/sudoers:
|
1 |
GROUPTWO ALL = /usr/bin/apt-get update |
Všimnite si, že bez špecifikovania používateľa/skupiny, pod ktorou sa má príkaz spustiť, sa príkaz sudo predvolene spustí pod používateľom root .
Tu je príklad pre Cmnd_Alias, kde vytvoríme alias príkazu na vypnutie a reštartovanie systému. Pravidlo je potom priradené skupine GROUPTHREE. To dosiahnete pridaním nasledujúcich riadkov do súboru /etc/sudoers:
|
1 2 |
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER |
Vo vyššie uvedenom úryvku prvý riadok vytvára alias príkazu s názvom POWER, ktorý zahŕňa príkazy na vypnutie a reštart. Druhý riadok umožňuje členom skupiny GROUPTHREE spustiť tento príkaz.
Tu je príklad Runas_Alias, kde vytvoríme alias, ktorý umožní skupine používateľov spúšťať príkazy pod iným používateľom:
|
1 2 |
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL |
Vo vyššie uvedenom úryvku prvý riadok vytvára alias s názvom WEB, ktorý určuje, že alias sa spustí pod používateľom apache alebo www-data . Druhý riadok priraďuje alias skupine GROUPONE. Teraz môžu členovia prvej skupiny spúšťať príkazy buď ako používateľ apache alebo www-data .
Pravidlá obmedzenia
V tejto časti sa dozviete o rôznych spôsoboch, akými môžete kontrolovať, ako sudo reaguje na volanie. Niektoré príkazy sú na jednopoužívateľských systémoch relatívne neškodné. V takýchto prípadoch môžete používateľom povoliť ich spúšťanie s oprávneniami root bez toho, aby museli zadávať heslo root . Môžete napríklad vytvoriť pravidlo, ktoré používateľom v skupine GROUPONE umožní spustiť príkaz updatedb bez zadania hesla pridaním nasledujúceho riadku do súboru /etc/sudoers:
|
1 |
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb |
Značka NOPASSWD znamená, že heslo nebude vyžadované. Pridružená značka pre značku NOPASSWD je PASSWD, čo je predvolené správanie. To znamená, že pri výzve musí byť zadané heslo.
Značka sa vzťahuje na pravidlo, pokiaľ nie je prekonaná svojou pridruženou značkou, napríklad:
|
1 |
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill |
V tomto pravidle môžu používatelia v skupine GROUPTWO spustiť príkaz updatedb príkaz bez zadania hesla. Pred spustením príkazu kill však musia zadať heslo.
V niektorých prípadoch môžete chcieť obmedziť používateľov v spúšťaní určitých príkazov, aby ste zabránili nebezpečnému vykonaniu. Tu prichádza na rad značka NOEXEC. Niektoré programy môžu spúšťať iné príkazy zo svojho rozhrania. Príkladom takéhoto programu je less. Ak zadáte príkaz s nasledujúcou syntaxou v rozhraní less, spustí sa, čo spôsobí neočakávané správanie.
|
1 |
!name_of_command_to_run |
Aby ste takémuto správaniu zabránili, môžete do súboru /etc/sudoers pridať nasledujúce pravidlo na obmedzenie daného používateľa identifikovaného pomocou username:
|
1 |
username ALL = NOEXEC: /usr/bin/less |
Dodatočné informácie
V tejto časti uvádzame niekoľko dodatočných informácií, direktív a príkazov, ktoré môžete považovať za potrebné pri práci so sudo.
Ak ste v konfigurácii použili Runas_Alias, ktorý špecifikuje, že používateľ alebo skupina môže spúšťať príkazy ako iný používateľ, môžete spúšťať príkazy ako títo používatelia pomocou príznaku -u pre používateľa a príznaku -g pre skupiny. Tu je syntax:
|
1 2 |
sudo -u run_as_user command sudo -g run_as_group command |
Každý z príkazov vás vyzve na zadanie príslušného hesla. Z dôvodu pohodlia sudo ukladá heslo na určitý čas do vyrovnávacej pamäte, takže ho nemusíte zadávať znova pri každom spustení príkazu so sudo. Po dokončení práce s príkazmi s privilégiami sudo môžete tento čas vymazať zadaním nasledujúceho príkazu:
|
1 |
sudo -k |
V prípade, že máte viac úloh, ktoré musíte vykonať s privilégiami sudo, a chcete predĺžiť čas pred vyžiadaním hesla, alebo chcete zabrániť tomu, aby príkaz sudo neskôr vyžadoval heslo, môžete čas obnoviť zadaním nasledujúceho príkazu:
|
1 |
sudo -v |
Príkaz vás vyzve na zadanie hesla a uloží ho do vyrovnávacej pamäte pre neskoršie použitie sudo.
Ak chcete zobraziť zoznam privilégií sudo definovaných pre vaše meno, môžete zadať nasledujúci príkaz:
|
1 |
sudo -l |
Príkaz vypíše všetky pravidlá nakonfigurované v súbore /etc/sudoers, ktoré sa vzťahujú na vaše používateľské meno. Z týchto pravidiel si môžete urobiť predstavu o tom, aké úlohy môže vaše používateľské meno v systéme vykonávať. Tu je príklad snímky obrazovky:

V niektorých prípadoch môžete spustiť príkazy a tie zlyhajú, pretože ste pred ne zabudli pridať sudo. V takýchto prípadoch možno budete musieť príkaz prepísať znova, pričom začnete so sudo. Aby ste sa vyhli opätovnému písaniu príkazu, môžete využiť funkciu bashu na „opakovanie posledného príkazu“. Syntaxou sú dva výkričníky. Posledný príkaz, ktorý ste spustili v termináli, môžete vykonať zadaním nasledujúceho:
|
1 |
sudo !! |
Na záver je dôležité vedieť, že sudo jednoducho povýši príkaz, ktorý sa má vykonať s privilégiami sudo. Pre ďalšie informácie môžete postupovať podľa pokynov na tomto odkaze, kde sa môžete so svojimi používateľmi trochu zabaviť.
Záver
Pri práci s viacerými používateľmi je kľúčové vyznať sa v príkaze sudo a súbore sudoers. V tomto návode sme si predstavili základy čítania a úpravy súboru sudoers, ako aj rôzne metódy, ktoré môžete použiť na získanie práv roota.
Vždy majte na pamäti, že oddelenie privilégií je to, čo robí systémy Linux bezpečnými. Preto by sa privilégiá superpoužívateľa nemali udeľovať bežným používateľom. Prideľujte iba tie privilégiá, ktoré sú pre konkrétneho používateľa absolútne nevyhnutné na vykonávanie jeho špecifických úloh v systéme, a nie všetky privilégiá.
Príjemnú prácu s počítačom!
Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.