Používate sudo?
Nástroj sudo slúži na dočasné poskytnutie práv superpoužívateľa root (Super User DO). Na rozdiel od známeho nástroja su neslúži na získanie shellu, ale len vykoná zadaný príkaz s právami zadaného používateľa. Ale hlavne je detailne prispôsobiteľný. V tomto článku nájdete úvod do týchto nastavení.
Obsah článku
Použitie
Použitie príkazu sudo je veľmi jednoduché. Stačí napísať:
sudo príkaz
Ak má na to používateľ právo, bude zadaný príkaz vykonaný s právami používateľa root. Samozrejme, príkazy je možné spúšťať spolu s ich parametrami. Príkazy však možno vykonávať aj s právam i iného používateľa, napríklad vykonať príkaz ako ejabberd zaistí:
sudo -u ejabberd prikaz
Zaujímavou možnosťou je nechať si vypísať aké máte nastavenia a čo môžete robiť:
sudo -l
Prípadne ukončiť aktuálnu reláciu hesla (vynúti opätovné zadanie hesla, bez ohľadu na čas od posledného zadania):
sudo -K
A kopu ďalších možností, pozrite si sudo(1).
Nastavenie
Na nastavenie sudo poslúži príkaz:
visudo
Po spustení príkazu sa otvorí prednastavený editor a v ňom obsah
súboru /etc/sudoers
. Tento súbor je možné upravovať aj priamo, ale
príkaz visudo vykoná aj kontrolu správnosti syntaxe, takže je určite
vhodnejší. Ak urobíte chybu, pri pokuse o uloženie a ukončenie zobrazí
otázku:
>>> /etc/sudoers: syntax error near line 12 <<<
What now?
Options are:
(e)dit sudoers file again
(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
Prípadne, ak to nie je fatálna chyba, zobrazí len upozornenie:
visudo: Warning: unused Cmnd_Alias SHUTDOWN
Nastavenie používateľov
V nastavení sudo možno prideliť práva získania práv root používateľom alebo skupinám a všeobecná syntax takéhoto povolenia má formát:
kto stroj=(koho) aplikácie
Inými slovami, každý zápis udáva kto a na ktorom stroji môže spúšťať zadané aplikácie a v koho mene. Najjednoduchší zápis pritom môže vyzerať takto:
root ALL=(ALL) ALL
Tento jednoduchý zápis povoľuje používateľovi root spúšťať kdekoľvek, čokoľvek a v mene kohokoľvek. Poskytnutie rovnakých práv bežnému používateľovi je však nebezpečné!
Takéto vypisovanie práv pre každého používateľa môže byť problematické, najmä ak je tých používateľov veľa. V takom pripade môžu pomôcť aliasy a používateľské skupiny. Pridelenie práv členom skupiny možno docieliť obdobným zápisom, len miesto mena používateľa patrí meno skupiny, ktoré je odlíšené znakom %:
%sudo ALL=(ALL) ALL
Takto môžu členovia skupiny sudo robiť všetko, podobne ako root. Takéto nastavenie vyžaduje manipuláciu s členstvom používateľov v skupinách, čo nie je v podstate zlé, ale je tu aj možnosť použiť aliasy. V nastavení sudo možno vytvoriť viac typov aliasov, ten ktorý sa týka používateľov je označovaný User_Alias a jeho definícia môže vyzerať takto:
User_Alias ADMINI = jozo, fero, #1245
Definícia aliasu patrí na začiatok súboru sudoers
(alebo teda aspoň
pred jeho prvé použitie) a v tomto prípade sa skladá z mena aliasu
(musí začínať veľkým písmenom) a zoznamom používateľov, oddelenom
čiarkami. Používateľov možno zadať pomocou ich prihlasovacieho mena
alebo UID s predponou #. Do zoznamu používateľov možno pridať aj
systémovú skupinu (predpona %), sieťovú skupinu (prepdona +) alebo iné
aliasy používateľov.
Dobrým zvykom je nazývať aliasy veľkými písmenami, pretože takto na prvý pohľad možno odlíšiť alias od bežného mena. Pridelenie práv takémuto aliasu používateľov potom môže vyzerať takto:
ADMINI ALL=(ALL) ALL
Nastavenie programov
Predchádzajúce príklady používali miesto zoznamu povolených programov preddefinovaný alias ALL, ktorý jednoducho znamená všetky programy. Takáto špecifikácia však nie je veľmi bezpečná, pretože používateľ potom môže urobiť v systéme naozaj všetko, vrátane pátrania po heslách ostatných používateľov, či meniť systémové nastavenia. V podstate takýto používateľ nepotrebuje sudo, ale vystačí so su…
Veľkou silou nástroja sudo však je, že môžete presne vymenovať programy, ktoré používateľ môže spúšťať. Možnosti definícií sú rozsiahle a zahŕňajú možnosti definície programov pomocou zástupných znakov, či definície aliasov príkazov, ale postupne. Zdôrazním, že príkazy musia byť zadané pomocou úplnej cesty a musia byť oddelené čiarkami, napríklad:
ADMINI ALL=(ALL) /sbin/shutdown, /usr/sbin/ejabberdctl
Čiže používatelia z aliasu ADMINI môžu spúšťať príkazy shutdown a ejabberdctl. Pokus o spustenie iného programu skončí chybovým hlásením, napríklad pri preklepe:
Sorry, user jozo is not allowed to execute '/usr/sbin/ejabberdctl' as root on soumat.skk.
Povolenie samotného príkazu shutdown nedáva veľký zmysel, pretože pomocou neho môže používateľ systém nie len vypnúť, ale i reštartovať a na to sú k dispozícii aj príkazy halt, či reboot. Je preto vhodné ich používateľovi sprístupniť tiež, a to je vhodné miesto na alias príkazu, ktorý možno definovať napríklad takto:
Cmnd_Alias SHUTDOWN = /sbin/shutdown, /sbin/halt, /sbin/reboot
Práva používateľov ADMINI potom možno definovať takto:
ADMINI ALL=(ALL) SHUTDOWN, /usr/sbin/ejabberdctl
Pri ejabberdctl sa zastavím a využijem ho na ďalší príklad. Aj tento príkaz je potenciálne nebezpečný, pretože umožňuje vypísať všetky účty jabberového servera, vrátane ich hesiel. Povolím preto len vypisovanie štatistík. Výpis štatistík pomocou ejabberdctl poskytne jeho príkaz stats, ktorý však vyžaduje ešte ďalší parameter, a to, ktorú štatistiku vypísať. Samozrejme možno do povolení zapísať všetky štyri tvary príkazu, ale v tomto prípade si vystačím s použitím zástupného znaku:
ADMINI ALL=(ALL) SHUTDOWN, /usr/sbin/ejabberdctl stats *
Obmedzenie
Povolenia, nastavené vyššie, možno obmedzovať. Jednak možno definovať na ktorých strojoch môžu byť spúšťané a jednak možno definovať, ako ktorí používatelia môžu byť príkazy spúšťané. V prípade zobrazovania štatistík nie je potrebné spúšťať príkaz ako root, ale stačí povoliť spúšťanie len ako používateľ ejabberd:
ADMINI ALL=(ejabberd) /usr/sbin/ejabberdctl stats *
Možnosti zástupných znakov sú rozsiahlejšie ako spomínaná hviezdička, ale je nutné upozorniť, že sa nejedná o regulárne výrazy, ale len o zástupné znaky, podobné tým zo shellu.
Heslá a iné drobnosti
Vo východzom nastavení musí používateľ pri použití sudo zadať heslo. Nie zakaždým, pretože heslo je ukladané na určitú dobu, východzia doba je 20 minút a možno ju zmeniť. Dôležité je vedieť, že zadáva svoje heslo. Najmä v prípade, že nastavujete sudo na spustenie programov z rôznych skriptov je vhodné, aby príslušný používateľ mohol vykonávať príkaz bez zadania hesla. Toto správanie je možné nastaviť pomocou značky NOPASSWD:
ADMINI ALL=(ejabberd) NOPASSWD: /usr/sbin/ejabberdctl stats *
Takto budú členovia ADMINI môcť zobrazovať štatistiky bez toho, aby museli zadávať heslo. Značka NOPASSWD bude platiť na všetky príkazy, ktoré sú za ňou, takže zápis:
ADMINI ALL=(ALL) SHUTDOWN, NOPASSWD: /usr/sbin/ejabberdctl stats *
bude znamenať, že ADMINI musia stále zadať heslo pri vypínaná/reštarte počítača. Existuje i opačná značka, PASSWD, ktorá naopak zadávanie hesla zapína:
ADMINI ALL=(ALL) NOPASSWD: SHUTDOWN, PASSWD: /usr/sbin/ejabberdctl stats *
Takto zase ADMINI nemusia zadávať heslo pri vypínaní/reštarte, ale naopak musia pri zobrazovaní štatistík ejabberd. S heslom súvisí aj iné nastavenie, a to či bude zadávanie hesla mať vizuálnu odozvu alebo nie.
Konfiguračný adresár
Najnovšie už dokonca nie je ani potrebné upravovať centrálny súbor
/etc/sudoers
, pretože nastavenie sudo umožňuje použiť súbory
v adresári /etc/sudoers.d
. Použitie tohoto konfiguračného adresára
umožňuje direktíva:
#includedir /etc/sudoers.d
Je možná aj podoba na použite konkrétneho súboru pomocou:
#include /etc/sudoers.local
Dajte však pozor, mriežka na začiatku riadku neudáva, že je direktíva
zakomentovaná a neodstraňujte ju! V prípade konfiguračného adresára je
treba dodržať niekoľko zásad. Najprv, ignorované sú všetky súbory,
ktoré končia znakom vlnovka alebo bodka (aby neboli spracovávané
záložné súbory, vytvárané niektorými GUI editormi). Súbory sú
spracovávané v abecednom poradí, preto je vhodné použiť pomenovanie,
ktoré začína číslami, napr 01_prvý
, 10_druhý
, atď.
Neviem ako v iných distribúciách, ale v Debiane musí tento adresár obsahovať aspoň jeden súbor a všetky súbory v ňom musia mať nastavené práva na 440.
Ak na úpravu konfigurácie sudo používate visudo, nebudú súbory z konfiguračného adresára zahrnuté (editovateľné) s hlavným konfiguračným súborom, bude však kontrolovaná ich syntax. Takéto súbory potom možno pomocou visudo upravovať pomocou voľby -f súbor.
Informácie emailom
Ohľadom zasielania emailov možno nastaviť viacero parametrov. Ako prvý
spomeniem voľbu mailto
, ktorá udáva komu posielať emaily (predvolene
root). Okrem toho možno nastaviť kedy budú emaily posielané:
- mail_always – posiela email o každom použití sudo, čo môže byť dosť otravné, aj preto je predvolene vypnuté;
- mail_badpass – informuje o zadaní nesprávneho hesla;
- mail_no_host – informuje, ak používateľ síce môže používať sudo (je v súbore sudoers), ale nie na danom stroji;
- mail_no_perms – informuje, ak sa používateľ pokúsi použiť sudo s príkazom, ktorý nemá povolený alebo ho má zakázaný;
- mail_no_user – informuje, ak používateľ nemá právo používať sudo, predvolene zapnuté.
Samotné nastavenie potom môže vyzerať takto:
Defaults mailto=feroadmin, mail_badpass, mail_no_user, mail_no_perms
Premenné prostredia
Od verzie 1.7.4 došlo k zmene východzieho nastavenia spracovania premenných prostredia tak, že pri použití sudo sú tieto premenné vymazané. Čo to znamená? Napríklad to, že pomocou sudo nespustíte grafický program:
sudo xeyes
No protocol specified
Error: Can't open display: :0
Za toto nastavenie môže riadok konfiguračného súboru (/etc/sudoers
):
Defaults env_reset
Náprava je jednoduchá, stačí pridať voľbu, ktorá obsahuje zoznam
premenných, ktorých hodnota má byť zachovaná aj pri použití sudo. Aby
ste sa vyhli problémom pri aktualizácii (správy, že konfigurácia bola
zmenená), je dobré využiť na to konfiguračný adresár, kde si vytvorte
súbor, napríklad s menom 99default_env
s obsahom:
Defaults env_keep += HOME
Defaults env_keep += DISPLAY
Defaults env_keep += XAUTHORITY
Prvý riadok sa postará o premennú $HOME, ktorá obsahuje cestu domovského adresára, ale ďalšie dve sú tie, ktoré sa postarajú o bezproblémové použitie sudo a grafických programov… Len pripomeniem, že tento súbor musí mať nastavené práva na hodnotu 440:
chmod 440 /etc/sudoers.d/99default_env
Záver
Hoci článok narástol viac ako som pôvodne chcel, ani zďaleka to nie je kompletný popis možností. Ďalšie podrobnosti nájdete v man sudoers alebo v inej forme http://www.gratisoft.us/sudo/sudoers.man.html.