Apache és PHP chroot-olása BSD-n

Címkék

Gondolom többeket foglalkoztat az a kérdés, hogy hogyan lehet Apache webszervert és PHP-t chroot-olni BSD rendszerek alatt.

Mire jó a chroot-olás? Mint ahogy a neve is mutatja, megváltoztatjuk a futtatandó program szemszögéből a / filerendszer helyét. Ha például létrehozunk egy chroot-ot a /chroot/httpd-re, akkor a benne futó program azt hiszi, hogy a /chroot/httpd könyvtár maga a / filerendszer. Ennek a jelentősége az, hogy mindössze azoknak a fileoknak kell a chroot-ban benne lenniük, amelyek a program futtatásához szükségesek. Az nagyon jó dolog, hogy a chroot-ban futtatott program nem tud ``kinyúlni'' a /chroot/httpd-n kívülre. Ezzel a megoldással a példában szereplő webszerver biztonságát nagy mértékben növeljük, hiszen betörés esetén a támadó nem fér hozzá a rendszer binárisokhoz, vagy a chroot-olt környezeten kívüli adatokhoz.

Az OpenBSD felhasználók egy ideje már alapértelmezett telepítés esetén is élvezhetik a chroot-olt Apache webszerver előnyeit.

A FreeBSD és NetBSD felhasználóknak még maguknak kell kialakítaniuk a biztonségos chroot környezetet. Ehhez lehet segítség ez az írás.

Hozzászólások

Es vajon miert is szeretjuk mi annyira az open sourcet ha nem azert, mert kedvunkre belenyulhatunk a forrasba? :)

Egy chroot() beirasahoz nem kell olyan nagy programozoi tudas... en mar rengeteg progit atirtam amiben nem volt ilyen alapbol.

Igaz en paranoid vagyok, mert nekem meg az identd is chrootolva van, ha hasznalom :>

OpenBSD-ben alap feature az apache chroot, mint ahogy a cikk is irja. Az ember egy kulon particiora rakja a /var/www-t, aztan /etc/fstab-ban beallitja, hogy noexec es nodev legyen a mountolaskor es meg sokkal biztonsagosabb, mert akkor a chrooton bellul ha tud is letrehozni filet a tamado, futtatni akkor sem tudja...

Ha valaki mas oprendszeren akarja hasznalni az OpenBSD-s apacheot nem tudok rola, hogy lenne barmifele akadalya... Nincs benne semmilyen OpenBSD specifikus dolog, gond nelkul lelehet szerintem forditani mas BSD-n vagy Linuxon is. Es akkor meg megint nincs szukseg semmifele patchelgetesre, mert leszeded cvsbol vagy ahonnan akarod a forrast es leforditod...

CGI pedig nem ok arra, hogy az ember ne mountolja noexecre azt a particiot. Szamos megoldas kinalkozik ra, hogy az ember CGI-t hasznaljon noexec mellett, lasd. apache module (pl. mod_fastcgi, vagy amit akarsz).

Egyebkent bongeszni nem chrootban szoktam, mert alapvetoen grafikus kornyezetet legtobbszor Windows alatt hasznalok. Es mielott megkerdezed, hogy ott hol a security, elmondom, hogy gond nelkul lehet azt is biztonsagosan hasznalni, csak kicsit erteni kell hozza es foglalkozni vele.

Mig a Linuxnal/BSD-nel (stb.) alap dolognak tartjak az emberek hogy elolvassak a handbookot es a programokat szigoruan csak sima userkent futtatjak, addig Windows eseteben ez valahogy elfelejtodik es az MS-t hibaztatja mindenki, hogy annyi virus es fereg tud terjedni. Pedig korlatozott felhasznalokent hasznalva a Windows is biztonsagos tud lenni es a programok java resze is gond nelkul fut rendszergazdai jogosultsag nelkul. A fereg pedig mar is nem tudja beirni magat a System32 konyvtarba, nem tudja modositani a rendszerfajlokat...

Ha valamihez meg is Administratori jog kellene (Administrative Toolsban levo dolgok), abban az esetben sudo helyett ott a runas.

Ja! Es a programokat (lasd. ie) a korlatozott felhasznalo mellett tovabbi korlatozott hozzaferessel is lehet futtatni (RunAs-nel a Restricted Access checkbox), igy a programnak gyakorlatilag semmi mashoz nincs joga, csak amit mi engedelyezunk neki...

Microsoftnak teljesen igaza van abban, hogy ha a Linux is jobban elterjed arra is ugyanugy meg fognak jelenni virusok es fergek, hisz az egyszeru felhasznalo ott is gond nelkul ra fog kattintani a levelben erkezett csatolmanyra.

Jol elkanyarodtam az eredeti tematol... namind1

Egyebkent nem vagyok MS parti, egyszeruen ez a velemenyem.

CGI-nel is megoldhato, hogy ne mint futtathato allomanyt kezelje, hanem beolvassa mint szoveges allomany aztan az cgi apache module ertelmezi (ugyan ugy, mint a php eseteben). De teny, hogy ezt nem probaltam, csak tippelek...

Ha mashogy nem megy, akkor a cgi-bin-t egy kulon particiora rakod (vagy virtualis filerendszer, tok8) ismet ami viszont nem noexec de mondjuk read-only... :) Ez amolyan filerendszerbeli W^X :-DD

Najo, ez mar igy tenyleg kicsit ganyolasnak tunik, de biztos van ra szep es okos megoldas.

Systracet nem ismerem nagyon, nem hasznalom, nincs is a kernelbe forditva. A linuxos ptrace jut rola eszembe...Tobb problema volt vele, mint haszon... lasd. ptrace exploitok :)

Sokkal szebb megoldás szerintem, ha a chrooton bellül nincsenek binárisok (lasd openbsd alatt...), így akár az lehet noexecre mountolva is.

Nem tudom miért lett ez a trend, hogy csomó libet bemásolgatnak chrooton bellülre és létrehozogatják a deveket meg etc... etc. Security szempontjából szerintem kevésbé hasznos... Nálam a /var/www/ az noexec és nodev.