Bezpečí s chrootem

Petr Ferschmann 31. 3. 2006

Naše firma provozuje několik linuxových serverů a na každém z nich jsou spuštěny různé služby. Jako správce těchto serverů samozřejmě klademe důraz na bezpečnost. Mimo standardní obrany jako je grsecurity patch, PaX, vypnutí podpory modulů jádra, Trusted Path Execution pro apache a PHP safe mode používáme také vlastní chroot pro jednotlivé služby.

Chroot je program, který najdeme téměř ve všech variantách unixu. Jeho název vznikl zkrácením slov „change root“ (změň kořen souborového systému). Již z názvu vyplývá, že chroot mění kořenový adresář pro zvolený program a jím spuštěné potomky.

Jedná se o vytvoření vlastní instalace systému, ve které je jen nezbytné množství souborů k provozování služby (např. schází /bin/bash) . Pro každou službu, kterou provozujeme, vytvoříme vlastní mini-instalaci. Díky této konfiguraci bude velmi těžké po napadení jedné služby útočníkem ovlivnit i služby další (a doufejme, že s grsecurity i nemožné – tento patch umožňuje další omezení pro programy běžící v chrootu). A protože ve světě unixu je téměř vše souborem, je izolace služeb již téměř kompletní. Výjimku tvoří pouze naslouchání na TCP/UDP portech, některé varianty BSD však umožňují separovat i je.

Příkaz chroot můžeme také použít, pokud máte nainstalovano více linuxových distribucí současně. Připojíte druhou distribuci a pustíte příkaz:

# chroot /adresar prikaz 

Vytvořit mini-instalaci ovšem není vůbec jednoduché. Problém je, co všechno v instalaci ještě schází. Když chroot dokončíte, narazíte na potíž, jak jej pravidelně aktualizovat o bezpečnostní opravy.

Abychom těmto problémům předešli, používáme úspěšně program jailer. Jedná se o jednoduchý nástroj pro debian, který se o vše postará.

Stačí vytvořit konfigurační soubor /etc/jailer.conf a do něj uvést balíček, který chcete chrootovat. On zajistí, aby v chrootu byly i všechny závislosti. Je snadné uvést, které další soubory/balíčky nainstalovat, a také které vyjmout, přestože je na ně v balíčku závislost.

Konfigurační soubor je rozdělen na části general (globální) a na jednotlivé chrooty. Lze použít tyto příkazy:

  • Root: název adresáře, do kterého bude umístěn celý chroot
  • Debs: seznam balíčků, které se mají nainstalovat. Budou nainstalovány včetně všech závislostí.
  • Junk-Debs: seznam balíčků, které nemají být v žádném případě nainstalovány.
  • Extra: seznam souborů a adresářů, které mají být nainstalovány, i když na ně není závislost. Jedná se především o /dev/null a /dev/random.
  • Junk: seznam souborů a adresářů, které nemají být nainstalovány, přestože patří do nějakého balíčku.

Takto by mohl vypadat konfigurační soubor pro mysql, rsync a jabber:

<general>

Conf: /etc/resolv.conf /etc/hosts /etc/passwd /etc/group /etc/localzone /etc/ld.so.conf /etc/ld.so.cache /etc/nsswitch.conf /sbin/ldconfig
Junk: /usr/doc/* /usr/man/* /usr/share/man/* /usr/share/doc/* /etc/init.d/* /usr/share/zoneinfo/* /sbin/ldconfig.new /etc/* /usr/share/info/* /usr/lib/mime/* /usr/sbin/arp  /usr/sbin/arping /usr/sbin/inetd /usr/sbin/ipautofw /usr/sbin/ipmasqadm /usr/lib/ssl/* /usr/sbin/tzconfig /usr/sbin/update-inetd /usr/sbin/zic /usr/bin/tzselect /usr/bin/ldd /usr/bin/getent /usr/bin/zdump /lib/libm* /lib/libcrypt* /lib/libthread* /lib/libutil* /lib/librt* /lib/libpthread* /lib/libnss* /lib/libdb* /lib/libdl* /lib/libBrokenLocale* /lib/libnsl* /lib/libSegFault* /lib/libresolv* /usr/sbin/iconv /usr/sbin/local /usr/bin/rpc* /usr/bin/trace* /usr/sbin/pam_getenv /usr/sbin/iconvconfig /usr/share/lintian/* /usr/share/pam/* /usr/sbin/locale /usr/sbin/iconv /usr/sbin/getconf /sbin/ldconfig
Junk-Debs: tcpd arpd login net-tools debianutils passwd libpam-modules at cron logrotate adduser debconf base-passwd ssl-cert anacron mime-support libpam-modules base-files mailx debconf-i18n perlapi-5.8.3 libtext-iconv-perl liblocale-gettext-perl libtext-wrapi18n-perl libtext-charwidth-perl perl perl-base  perl-modules psmisc mail-transport-agent libdbd-mysql-perl libplrpc-perl libnet-daemon-perl
Extra: /dev/null /dev/log /dev/zero /dev/random /dev/urandom /sbin/start-stop-daemon
</general> 
<mysql>
Root: /var/chroot/mysql
Conf: /etc/mysql/*
Debs: mysql-server bash libncurses5 hostname coreutils sed bsdutils libwrap0
Junk-Debs: libdbi-perl

</mysql> 
<rsync>
Root: /var/chroot/rsync
Conf: /etc/rsync/*
Debs: rsync
</rsync> 
<jabber>
Root: /var/chroot/jabber

Conf: /etc/jabber/*
Debs: jabber jabber-jit
Junk-Debs:  libncurses5 coreutils
</jabber> 

Důvodem, proč neinstalovat některé balíčky a/nebo soubory je, že např. u apache běží v chrootu jen proces, který obsluhuje HTTP. Ta část, která se stará o konfiguraci, běží i nadále mimo něj. Abychom toho docílili, po spuštění příkazu jailer, vytvoříme symlink z /etc/apache do odpovídajícího adresáře v chrootu. To samé provedeme i pro adresáře ve /var.

Pak stačí pustit jen:

# jailer /etc/jailer.conf 

a vše je nainstalováno.

Nesmíte ještě zapomenout připojit /proc do cílového chrootu (jinak některé aplikace nefungují) a můžete pouštět služby. Naštěstí není problém připojit jeden souborový systém na více míst. Stačí tedy zduplikovat v  /etc/fstab záznam a přepsat u něj adresář.

Některé programy potřebují logovat i z chrootu, musíme jim proto umožnit komunikovat se syslogem. Nejlepším řešením je upravit soubor /etc/init.d/syslog a doplnit:

SYSLOGD="-a /var/chroot/jabber/dev/log -a /var/chroot/apache/dev/log" 

Tímto příkazem dosáhneme, že syslog vytvoří několik „pojmenovaných rour“ pro komunikaci s aplikacemi.

Pro dokončení instalace je ještě potřeba upravit /etc/init.d/apache2 a doplnit spuštění pomocí příkazu chroot:

APACHE2="$ENV /usr/sbin/chroot /var/chroot/apache /usr/sbin/apache2"
APACHE2CTL="$ENV /usr/sbin/chroot /var/chroot/apache /usr/sbin/apache2ctl" 

Protože používáme postfix, měli jsme problém s posíláním emailů z apache a php v takovémto chrootu (kvůli unix socketům postfixu). Proto instalujeme do chrootu i balíček ssmtp, což je jednoduchý MTA, který emaily přepošle na port 25 a doručí jej postfixu mimo chroot.

Při instalaci to chce mnoho zkoušení, protože nic nebude fungovat napoprvé. Přeji mnoho úspěchů při zabezpečování serveru.

Ohodnoťte jako ve škole:

Průměrná známka 2,83

Našli jste v článku chybu?
Zasílat nově přidané příspěvky e-mailem
120na80.cz: V zákulisí farmafirmy: růžový, ale i bílý Ibalgin

V zákulisí farmafirmy: růžový, ale i bílý Ibalgin

120na80.cz: 10 nejprodáva­nějších homeopatik

10 nejprodáva­nějších homeopatik

Podnikatel.cz: Asociace podnikatelů: Souhlas i odpor k EET

Asociace podnikatelů: Souhlas i odpor k EET

Podnikatel.cz: 10 novinek u přiznání k dani za rok 2015

10 novinek u přiznání k dani za rok 2015

Vitalia.cz: Snížení DPH na potraviny? Buď všechno, nebo nic

Snížení DPH na potraviny? Buď všechno, nebo nic

Měšec.cz: Katalogoví šmejdi. Oberou vás o 30 tisíc a legálně.

Katalogoví šmejdi. Oberou vás o 30 tisíc a legálně.

Vitalia.cz: Můj sýrový život

Můj sýrový život

Lupa.cz: Miliony mladých lidí utíkají z Facebooku. Kam?

Miliony mladých lidí utíkají z Facebooku. Kam?

Lupa.cz: Tip: tucet užitečných shieldů pro Arduino

Tip: tucet užitečných shieldů pro Arduino

Lupa.cz: Vlhký sen vnitra se splnil: vznikl státní podnik pro IT

Vlhký sen vnitra se splnil: vznikl státní podnik pro IT

120na80.cz: Domácí homeopatická lékárnička

Domácí homeopatická lékárnička

Root.cz: Tails: superbezpečný systém nejen pro Snowdena

Tails: superbezpečný systém nejen pro Snowdena

Vitalia.cz: Proč si černý kašel cestu zpátky našel

Proč si černý kašel cestu zpátky našel

Vitalia.cz: Černá ředkev: silné přírodní antibiotikum

Černá ředkev: silné přírodní antibiotikum

Lupa.cz: Osmý plán na stavbu rychlých sítí je nedodělek

Osmý plán na stavbu rychlých sítí je nedodělek

Vitalia.cz: Ministerstvo: Palmový olej nezakážeme, není důvod

Ministerstvo: Palmový olej nezakážeme, není důvod

Vitalia.cz: Pro otrlé: 42 obrázků, které budou na cigaretách

Pro otrlé: 42 obrázků, které budou na cigaretách

Podnikatel.cz: Nechtějí vrátit odpočet DPH? Chtějte úrok

Nechtějí vrátit odpočet DPH? Chtějte úrok

Lupa.cz: Google navádí, jak krást fotky, stěžuje si ČTK

Google navádí, jak krást fotky, stěžuje si ČTK

Vitalia.cz: Kouzlo generik: Jak se liší Paralen a Paralen Grip?

Kouzlo generik: Jak se liší Paralen a Paralen Grip?

Ušetřete