Weiter Zurück [Inhalt] Online Suche im Handbuch

59. LAMP (Linux Apache MySQL PHP) und CHROOT()

Viele Distributionen bieten bereits von Hause aus eine LAMP Installation an. Allen gemeinsam ist, daß man diese niemals im Internet als Server verwenden sollte. Der Apache Server alleine ist in der Minimalkonfiguration sehr sicher und sozusagen bullet proof. Problematisch wird es bei CGI-BIN´s und Datenbank-Modulen. Im Firewall Handbuch http://www.little-idiot.de/firewall/ sind Möglichkeiten beschrieben, wie man z.B. PERL CGI_BIN´s so programmieren kann, daß diese recht sicher sind. PERL bietet im sog. Taint Modus eine hohe Sicherheit, sodaß Angreifer keine Befehle in das System einschleusen können. Beim Einsatz von PHP 3/4 muß ich jedoch sagen, daß es kaum Sicherungsmöglichkeiten gibt. Der einzige Ausweg ist eine CHROOT() Umgebung, wo quasi das oberste Verzeichnis, welches ein User erreichen kann, z.B. /home/www/ ist. Auf Verzeichnisse anderer User oder sogar auf das Verzeichnis /etc/ hat ein Angreifer dann keine Zugriffsmöglichkeit mehr.

Man kann so eine quasi vom Rest des Servers gekapselte Benutzerumgebung schaffen, aus der auf gewiefte Angreifer nicht mehr entkommen können. Falls in dieser Umgebung dann der Apache und MySQL Server läuft, dann kann ein Angreifer zwar den Betrieb stören, jedoch bleiben die Log-Dateien in /var/log/ für ihn unerreichbar. Er läuft in Gefahr, entdeckt zu werden und verabschiedet sich schon deswegen von bösen Absichten.

Leider enthält keines der Handbücher über PHP, PERL oder den Apache WWW-Server Lösungsmöglichkeiten. Im Firewall Handbuch ist ausführlich ein Skript beschrieben, wie man eine CHROOT() Umgebung aufbaut. Hierzu gibt es jedoch einiges bei der Installation zu beachten:

  1. Die Serverdämonen Apache, MySQL sowie die Libraries für PHP müssen völlig autak z.B. im Verzeichnis /home/www installiert laufen können. Ein Zugriff auf /lib/, /usr/local, /usr/lib, u.s.w. wiederspricht den Erfordernissen einer CHROOT() Umgebung.

  2. Alle Quellcodes, Bibliotheken u.s.w. müssen sich vor der Kompilation in einer CHROOT() Umgebung befinden.

  3. Wenn es gelingt, alle Programme als normaler User zu kompilieren, dann haben wir fast sichergestellt, daß keine Routinen außerhalb der CHROOT() Umgebung mehr angesprochen werden müssen.

  4. Statisches Kompilieren verhindet, daß Teile von Libraries nachgeladen werden müssen. Das kostet zwar mehr RAM, ist aber die Voraussetzung dafür, daß die Serverdämonen in der CHROOT() Umgebung autak laufen.

  5. Mit Hilfe von strace oder ptrace kann man als User sehen, ob eventuell noch Bibliotheken o.ä. außerhalb der CHROOT() Umgebung angesprochen werden.

  6. Danach erst, wenn alles korrekt läuft, kann man das CHROOT() Skript verwenden, um die Dämonen einzuschließen.

Unser größtes Problem ist nun, Den Apache-Server, den MySQL Server, PHP und die wichtigsten Routinen unterhalb des Verzeichnisses /home/www/ ohne irgendwelche Superuser-Rechte zu installieren.


Weiter Zurück [Inhalt] Online Suche im Handbuch