Späť na blog

Konfigurácia súboru Linux Sudoers

Konfigurácia súboru Linux Sudoers

Ú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:

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:

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ť:

Napríklad na aktualizáciu systému môžete zadať nasledovné:

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:

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:

displays a list of editors

V distribúcii CentOS Linux upravte súbor /etc/sudoers a pridajte nasledujúce riadky:

Zadajte nasledujúci príkaz. Nezabudnite nahradiť názov 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:

Keď máte visudo nakonfigurované, môžete otvoriť súbor v /etc/sudoers zadaním príkazu:

Ú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:

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
Tento riadok sa líši od ostatných a špecifikuje privilégiá používateľa root. Tu je vysvetlenie, čo jednotlivé značky v riadku znamenajú:

  1. 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ľ.
  2. root ALL=(ALL:ALL) ALL – Prvé ALL určuje, že pravidlo sa bude vzťahovať na všetkých hostiteľov.
  3. 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.
  4. 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.
  5. 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ť:

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:

Voliteľne môžete použiť príkaz gpasswd na dosiahnutie rovnakého výsledku:

Na systéme CentOS, sa predvolená skupina s privilégiami sudo nazýva wheel, takže privilégiá môžete priradiť pomocou príkazu:

Voliteľne môžete pomocou príkazu gpasswd dosiahnuť to isté pomocou príkazu:

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:

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:

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:

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:

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:

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:

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.

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:

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:

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:

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:

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:

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:

screenshot

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:

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!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev je kreatívny dizajnér v spoločnosti CloudSigma, ktorý sa zameriava na konzistentnú firemnú identitu prostredníctvom tradičných a inovatívnych marketingových kanálov. Dokáže brilantne spájať umeleckú víziu so strategickým marketingom, čím vytvára pôsobivé príbehy značky.

Komentáre

Zatiaľ žiadne komentáre. Buďte prvý.