Az Apache webszerver biztonsági és egyéb kiegészítései

Vincze Dávid <>
Miskolci Egyetem Számítóközpont

Manapság egyre szélesebb körben terjednek el a webes alkalmazások. Többfelhasználós rendszereken a legtöbb esetben ezeket az alkalmazásokat kiszolgáló webszerverek a gyors feldolgozás érdekében minden felhasználó szkriptjét ugyanazzal a közös felhasználói azonosítóval és jogkörrel futtatják. A futtatott szkriptek így egyenrangúak, függetlenül attól, hogy melyik felhasználóhoz tartoznak, mivel mind a webszerver jogosultságával fut. Ez sok esetben kényelmetlen lehet és rosszindulatú felhasználók ezt könnyedén kihasználhatják.

A gyakorlatban hamar jelentkeznek a közös felhasználó miatt kialakult problémák, leggyakrabban: elérhetőek más felhasználók szkriptjeinek forráskódjai, adatbázis hozzáférés jelszavai; file feltöltésekhez külön kell jogosultságokat beállítani az adott jegyzékre; a feltöltött fileokkal műveleteket végezni nehézkes, mivel a webszerver felhasználói azonosítójával jött létre; így a webszerver felhasználójának quotájához számít; nem választható szét felhasználókra az erőforrások igénybevételének korlátozása, naplózása, és ehhez hasonló apróságnak tűnő, de komoly problémák. Mivel manapság a webkiszolgálók túlnyomó többsége ezt a felépítést követi (Apache+mod_php/mod_python/mod_ruby/stb.), így sokakat érint: internet szolgáltatókat, oktatási intézményeket, stb.

Ezen problémák kiküszöbölésére kerül bemutatásra egy saját fejlesztésű lehetséges megoldás, ami lehetővé teszi a Linux kernelben, hogy már létező processzen menet közben többször is lehessen felhasználói/csoport azonosítót változtatni, és ennek alkalmazása az Apache webszerverben.

Ismertetésre kerülnek a futásidőben történő felhasználói azonosító váltás lehetőségei, a Linux kernelben és az Apache webszerverben szükséges módosítások az említett mechanizmus használatához. Továbbá annak magyarázata, hogy mikor legyen jogosultsága a processznek egy másik azonosító beállítását kérni a kerneltől, és az ehhez kapcsolódó egyéb módosítások a kernelben, hogy ne lehessen kijátszatni az azonosító átállítást, amikor éppen egy felhasználó szkriptjét hajta végre egy Apache gyermek processz.

Végeredményben így megmarad az mpm_prefork+mod_php/mod_python/stb. modell gyorsasága, de a suexec/suphp/mpm_itk/stb. megoldások által nyújtott biztonság is, egyszerre gyors és biztonságos környezetet biztosítva a webalkalmazások számára.

Továbbá azokról a kifejleszett kiegészítésekről is szó esik, amelyek önállóan is megállják a helyüket:

  1. a webszerverhez intézett kérések által elhasznált processzor idő naplózása,

  2. az aktuális kérések megjelenítése a processzek neveiben,

  3. a kiszolgálás szabályozása a rendszer terhelésének (load) függvényében.

Végül ezen módszerek alkalmazásának teljesítmény befolyásolási összehasonlításáról és a lehetséges további fejlesztésekről is információt kaphatunk.

Az említett megoldások Linux operációs rendszer alá lettek kifejlesztve C és Assembly (x86) programnyelveken.