Používáme SUDOers
I na velkých serverech, kde se o každou síťovou službu stará jiný člověk, musí být root jen jeden! Zde si ukážeme, jak to lze celkem jednoduše, bezpečně a efektivně vyřešit pomocí sudoers.
Ve firmách, kde se např. vyvíjí/testuje software, konfigurují síťové služby, vytváří nové dhcp/dns/mail záznamy apod., se o to vše nutně nemusí starat jeden administrátor, ale může jich být několik. Nicméně by se určitě jejich práva měla omezit na potřebnou míru a nedávat jim hned právo roota. Pokud někdo spravuje účty Qmailu a jinak se o chod serveru nestará, tak určitě nemá mít přístup superuživatele, ale jen taková práva, které ke své práci potřebuje, čímž se podstatně sníží bezpečnostní riziko a možnost chyby lidského faktoru. V tomto článku bych vám chtěl přiblížit, jak se o práva v řízení systému podělit pomocí sudo(ers).
sudo (superuser do) -- umožňuje administrátorovi dát určitým osobám (nebo skupinám) možnost spustit definované příkazy s právy roota. Tento článek nijak nesouvisí s příkazem su, kterým spustíte shell pod zadaným uživatelem. My využijeme konfigurační soubor /etc/sudoers, kde budeme definovat, co který uživatel smí spouštět s právy roota (či jakéhokoliv uživatele).
Upozornění: nikdy needitujte sudoers normálním editorem, ale jen přes visudo!
Základní syntaxe vypadá takto:
$uzivatel $stroj = ($user_pod_kterym_pobezi) $prikaz_s_parametry
Zpočátku je v /etc/sudoers tento záznam:
Říká nám tím: uživatel root může na všech systémech spouštět s právy všech uživatelů (tj. především roota, ale jde o to, že může spouštět příkazy i pod jinými uživateli) všechny příkazy.
Pokud bychom například v systému chtěli dát práva uživateli webmaster:
Takže co jsme vlastně nastavili? Uživatel webmaster může na lokální stanici spouštět jakékoliv příkazy pod uživatelem apache ( ) a spustit shell s oprávněním uživatele apache ( ). Pokud by jsme nastavili jen tak by se su spouštělo s právy roota a mohli by jsme spustit shell pod jakýmkoliv uživatelem, což není zrovna ideální ;).
Další co byste měli vědět, že pokud uživatel webmaster tedy spustí příkaz: sudo /usr/bin/su apache, tak bude požádán o heslo. Ne však heslo roota, ale jeho vlastní (webmastera!). Je to kvůli vyšší bezpečnosti, aby bylo zaručeno, že jen někdo nepřišel k otevřenému terminálu a zároveň webmaster nebude potřebovat heslo roota. Heslo se uloží po dobu 5-ti minut, takže jej není nutné zadávat pokaždé (samozřejmě jak čas, tak i nutnost zadávat heslo lze nastavit).
Mějme skupinu chpass, která může měnit hesla uživatelům, ale rozhodně ne rootovi:
Skupinu tedy poznáme tak, že je před ní znak %. Tito uživatelé můžou měnit heslo na jakémkoliv stroji komukoliv, ale znak ! způsobí, že nesmějí spustit a tím mu změnit heslo.
Volba, která nepožaduje heslo uživatele je NOPASSWD: např.
Aliasy
Takže úvod máme napsaný a teď si ukážeme, jak si zjednodušit psaní pravidel. Pokud budete psát opravdu větší konfigurační soubor, tak se aliasy hodí, protože změny se provádí jen v definovaných proměnných.
Máme čtyři druhy aliasů: User_Alias, Runas_Alias, Host_Alias a Cmnd_Alias.
Příklad použití:
Jak vidíte, použití je velice snadné a lze tím ušetřit spoustu práce u velkých konfiguračních souborů.
Nastavení defaultního chování
Tohle je ta část, kde si můžete vyhrát s nastavením a chováním sudoers. Doporučuji si projet manuálove stránky, nebo mrknout na homepage sudo: http://www.courtesan.com/sudo/man/sudoers.html#defaults
Jak jsem třeba zmiňoval, že po zadání hesla u sudo se v paměti uchovává po 5 minut, tak tímto záznamem:
způsobíme, že se nás sudo bude ptát na heslo pokaždé a nebude se vůbec ukládat do paměti. Druhý záznam povoluje maximální počet chybných zadání hesla.
Voleb je velká řada, a pokud byste se v nich chtěli vyřádit, tak se podívejte na výše uvedený odkaz manuálových stránek. Nejdřív bychom si však mohli ukázat takový jednoduchý příklad nastavení defaults.
Aktivujeme si logování; logujeme i roky; určíme, že se bude logovat do souboru /var/log/sudo.log; na email nám bude chodit oznámení, když někdo použije sudo příkaz, který nemá povolený; tohle nevim úplně přesně, takže radši nebudu spekulovat; vypneme zalamování řádků logu; vypneme logování FQDN (celé názvy počítačů), protože pokud bude DNS server nějak nedostupný, tak se sudo nebude možné pracovat; mailová adresa kam se budou zasílat vyžádané logy.
Závěr
Na konec článku bych chtěl upozornit, abyste si dávali velký pozor, co komu povolíte, protože člověk s možností spuštění editoru pod rootem má možnost editovat i /etc/shadow ! Přistupujte k tomu obezřetně a práva udělujte jen tomu, kdo to opravdu potřebuje a komu v rámci možností věříte. Jěště jedna rada pro paranoiky: díky sudoers můžete všem programům odebrat suid, sgid bit a nastavit konkretní práva i na konkretní parametry předávané programům ;o)
Odkazy:
Manuálové stránky sudo -- http://www.courtesan.com/sudo/sudo.html
Příklad souboru sudoers -- http://www.courtesan.com/sudo/sample.sudoers
- Pro psaní komentářů se přihlašte





díky
Vím, že sice píšu k šest let starému článku, ale přesto děkuji za skvělý článek :).
Dotaz
Dobry den,
rad bych se zeptal na jednu vec. Konkretne me zaujal nasledujici config. radek:
webmaster localhost = (apache) ALL, (root) /usr/bin/su apache
Zajimalo by me, zda neni prvni pravidlo "(apache) ALL" zbytecne - tedy prece jeho vyznam je obsazen v pravidle nasledujicim "(root) /usr/bin/su apache" - kdy mohu spustit shell uzivatele apache, tak pod nim mohu vykonat libovolny rikaz pod uzivatelem apache. Nebo jsem neco prehledl ?
Dekuji za odpoved
Poděkování
Také se přidávám k poděkování za perfektně napsaný článek :-)