Moduly pro Apache V – mpm_itk
Jedním ze základních požadavků na bezpečnost bývá rozdělení běžících služeb pod různá UID a GID. Bohužel webový server Apache je schopen běžet pouze pod jedním UID/GID, čož při použití na obsluhu pouze jedné webové aplikace od jednoho živatele není vůbec žádný problém. Situace se ale z hlediska bezpečnosti výrazne zhorší pokud na serveru bude více webových aplikací od více uživatelů, kdy jejich webové aplikace sdílí společná práva. Ačkoliv často zatracovaný server IIS obsahuje funkcionalitu pro obsluhu jednotlivých virtuálních serverů pod různými oprávněními je toto chování do „úžasného“ apache nutné doplnit externím patchem.
mpm_itk
Řešením tohoto problému je modul mpm_itk, který vychází z nejběžneji používaného mpm modulu mpm_prefork. Jediným rozdílem je doplnění možnosti nastavení UID a GID pro jednotlivé virtuální servery, možnost nastavení maximálního počtu procesů obsluhujících daný virtuální server a možnost nastaveni nice. Mpm-itk naleznete na adrese http://mpm-itk.sesse.net/ a jedná se o sadu patchů na klasický apache webserver. Postup instalace je pro zkušeného administrátora jasný, stáhnout zdrojové kódy apache a mpm_itk, provést patch a zkompilovat. Dále si dovolím upozornit že některé distribuce již tento patch do apache buďto začlenily nebo nabízejí ve speciálním balíčku – konkrétně jde o distribuce: Arch Linux, Debian GNU/Linux, Gentoo Linux, Mandriva, Ubuntu. Pokud používáte FreeBSD tak při instalaci apache z portů je rovněž možné mpm_itk přímo zvolit.
Konfigurace
Pokud v definici virtualhostu nebude definován žádný parametr specifický pro tento mpm modul bude se Apache chovat zcela obvyklýmypůsobem a použije pro obsluhu požadavků uživatelský účet specifikovaný v globálních parametrech User a Group. Následuje tedy malá ukázka konfigurace jednotlivých virtuálních serverů:
NameVirtualHost *:80 <Virtualhost *:80> ServerName server1 DocumentRoot /home/server1/ AssignUserID server1 users MaxClientsVHost 30 </Virtualhost> <Virtualhost *:80> ServerName server2 DocumentRoot /home/server2/ AssignUserID server2 users MaxClientsVHost 20 NiceValue 10 </Virtualhost>
AssignUserID akceptuje dva parametry, první je jméno uživatele a druhý jméno skupiny. Případně je možné místo jmen použít přímo UID a GID čísla která jsou v takovém případě uvozena znakem #. Například AddignUserID #501 apache nebo AssignUserID #501 #20.
MaxClientsVHost je vpodstatě stejná direktiva jako MaxClients s tím rozdílem že její platnost je omezena na obsluhu daného virtualhostu. Jedná se o vynikající součást ochrany před zahlcením serveru. Její velikost je nutné určit experientálně na základě konkrétních potřeb.
NiceValue je zajimavá možnost jak v případě nedostatku výkonu na serveru některé virtualhosty omezit a jiné naopak více preferovat. Může být vhodné pro některé typy nasazení kdy je potřeba dobré odezvy některého z virtualhostů nadřazena ostatním požadavkům.
Další výhody používání mpm_itk
- Mnohem jednodužší dohledávání problémů (např. spamující PHP aplikace, v logu hned vidíte UID)
- Lepší přehled o zdrojích (např. BSD accounting)
- Aplikování FS quoty i na webové aplikace
- Zjednodušení systému práv, bezproblémové automatické aktualizace CMS systémů bez nastavení práv zápisu pro všechny
RPM balík
Na závěr ještě tradičně přikládám zdrojový RPM balík pro distribuce RedHat Enterprise Linux, CentOS, Oracle Enterprise Linux: httpd-2.2.3-131.src.rpm
Jedním ze základních požadavků na bezpečnost bývá rozdělení běžících služeb pod různá UID a GID. Bohužel webový server Apache je schopen běžet pouze pod jedním UID/GID, čož při použití na obsluhu pouze jedné webové aplikace od jednoho živatele není vůbec žádný problém. Situace se ale z hlediska bezpečnosti výrazne zhorší pokud na serveru bude více webových aplikací od více uživatelů, kdy jejich webové aplikace sdílí společná práva. Ačkoliv často zatracovaný server IIS obsahuje funkcionalitu pro obsluhu jednotlivých virtuálních serverů pod různými oprávněními je toto chování do „úžasného“ apache nutné doplnit externím patchem.
+1