Hlavní navigace

Práva: je lepší root nebo sudo?

16. 5. 2006
Doba čtení: 3 minuty

Sdílet

Poměrně často se u některých systému setkáváme s vyřazením uživatele root, jehož úloha je nahrazena pomocí příkazu sudo. Pojďme se společně podívat na výhody a nevýhody tohoto řešení a možnosti zlepšení bezpečnosti.

O co jde?

Jako uživatelé unixů se běžně setkáváme se dvěma druhy uživatelů. Běžný franta, igor, lubos nebo pepa123 mají přístup do svého domovského adresáře a nemohou napáchat v systému žádné škody. Uživatel root pak má maximální privilegia a může udělat cokoliv, včetně „populárního” příkazu  rm -rf /.

To se samozřejmě mnoha administrátorům nelíbí a čím dál častěji se tak můžeme setkat se systémy, které roota prostě nemají a spoléhají se na funkci příkazu sudo. Ten umí uživateli patřičká privilegia na chvíli propůjčit, spustit příkaz a zase mu je sebrat. Napadlo mě, jestli má sudo vlastně nějakou výhodu proti klasickému přístupu a jak bychom mohli privilegia roota lépe chránit.

Je to lepší?

Obecně se má za to, že se v případě sudo jedná o bezpečnější řešení, které nenabízí naplno otevřenou cestu do systému. Argumenty pro sudo jsou obvykle dva:

  1. nikdo se nemůže z vnějšku (SSH, FTP) přímo přihlásit jako root
  2. každá akce se sudo je zaznamenána do logu

Bohužel všechno má svůj háček a i v tomto případě je tu několik nevýhod. Pro přístup k nejvyšším právům vám stačí jen jedno uživatelské heslo. Jakmile jej někdo získá (třeba odposlechne předchozí FTP spojení), má stejná práva, jako by získal účet samotného roota.

Výhoda logování odpadá ve chvíli, kdy uživatel zjistí, že může zavolat sudo -s a získá plnohodnotný terminál se vším všudy. Co se bude dít dál pak už na záznamu nebude a jediné, co víme, je, že konkrétní uživatel použil sudo.

Jak vidíte, samotné sudo nic nezaručuje a za standardní situace tedy nelze tvrdit, že by nám přineslo nějaká pozitiva ve smyslu bezpečnějšího systému. Varianty root a sudo jsou tedy rovnocenné. Existuje ale několik věcí, které můžeme obecně pro zvýšení bezpečnosti v obou případech udělat.

Vylepšení uživatele root

V první řadě je možno zakázat přihlašování roota přes ssh. Bude pak potřeba napsat při přihlašování dvě nezávislá hesla. Nejprve se budete muset přihlásit jako běžný uživatel, až potom můžete použít třeba su - a po zadání druhého hesla se stanete rootem. Kromě samotného faktu, že máte prostě dva zámky, zabráníte pokusům o odhad hesla roota přímo přes ssh.

Úprava je poměrně snadná a stačí do souboru /etc/ssh/sshd_config připsat řádek

PermitRootLogin no 

Podobně je možno postupovat v případě FTP, ale tam je obvykle přihlašování roota už zakázáno. Nezabezpečeným protokolem by rootovské heslo posílal jen blázen. Zkontrolovat to ovšem můžeme. Účty, kterým zakazujeme přihlášení přes FTP jsou vypsány v souboru  /etc/ftpusers.

Pokud jsme se rozhodli pro variantu s účtem roota, měli bychom zakázat použití sudo, aby nám nikdo „nelezl do zelí”. Je proto ještě potřeba změnit jeden řádek v /etc/sudoers. Ten obvykle povoluje vybrané skupině uživatelů používat sudo. Řádek vypadá přibližně takto:

%wheel        ALL=(ALL)       ALL 

V tomto případě je privilegovanou skupinou wheel a všichni uživatelé v ní mohou neomezeně sudo používat. Tento řádek zakomentujte nebo smažte.

Vylepšení sudo

Může se stát, že budete mít přesto nějaký důvod sudo použít. Také existuje několik možností, jak mu pomoci. V první řadě můžete omezit příkazy, které je možno s pomocí sudo spouštět. To zařídíte opět v souboru /etc/sudoers, ve kterém můžete vyjmenovat jednotlivé spustitelné soubory. Formát souboru podporuje aliasy, které celý proces zpřehledňují. Příklad takového souboru:

Cmnd_Alias RESTART=/sbin/reboot
restart ALL=(ALL)   RESTART 

Tímto jsme určili, že uživatelé, kteří patří do skupiny restart mají právo zavolat se sudo příkaz /sbin/reboot a tím restartovat počítač. Jednotlivé příkazy je možno oddělit čárkou a umožnit tak širší využití.

Další velmi šikovnou a doporučenou možností je požadovat po uživateli při použití sudo další heslo. Musíme k tomu použít malou fintu. Nejdříve aktivujeme účet roota, vybereme mu heslo a jako shell mu nastavíme /bin/false. Tím zajistíme, že nebude možno se na tento účet přihlásit. Do konfiguračního souboru /etc/sudoers pak napíšeme

CS24_early

DEFAULTS:ALL    rootpw 

To zajistí, že při každém použití bude po uživateli požadováno heslo roota. Pochopitelně můžeme vše zkombinovat a využití sudo omezit na konkrétní příkazy a uživatele a ještě chtít při použití heslo.

Závěrem

Sudo není rozhodně samospasitelné a jeho nasazení v systému místo klasického účtu roota nemusí přinést zásadní zlepšení bezpečnostní situace. Pokud ale provedeme správné zásahy a vše ještě „dokonfigurujeme”, získáme bezpečnější systém.

Používáte sudo nebo roota?

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.