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:
- nikdo se nemůže z vnějšku (SSH, FTP) přímo přihlásit jako root
- 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
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.