GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Chrooting von Apache 2.4 mit mod_unixd auf Debian 8 (Jessie)

In dieser Anleitung wird erläutert, wie Sie mod_unixd mit Apache 2.4 auf einem Debian-Jessie-System einrichten. Mit mod_unixd können Sie Apache in einer sicheren Chroot-Umgebung ausführen und Ihren Server weniger anfällig für Einbruchsversuche machen, die versuchen, Schwachstellen in Apache oder Ihren installierten Webanwendungen auszunutzen. Das Modul mod_unixd ist ein Ersatz für das Modul mod_chroot, das im alten Apache 2.2 verwendet wurde.

1 Vorbemerkung

Ich gehe davon aus, dass Sie ein laufendes Debian 8-System mit einem funktionierenden Apache haben, z. wie in diesem Tutorial gezeigt:Debian 8 Jessie LAMP-Server-Tutorial mit Apache 2, PHP 5 und MariaDB. Darüber hinaus gehe ich davon aus, dass Sie eine oder mehrere Websites im /var/www-Verzeichnis eingerichtet haben (z. B. wenn Sie ISPConfig verwenden).

Der Server, den ich hier verwende, hat die IP-Adresse 192.168.1.100 und den Hostnamen server1.example.com . Bitte ersetzen Sie diese Werte durch die IP-Adresse und den Hostnamen Ihres Servers, wo immer sie im Tutorial vorkommen.

2 Apache konfigurieren

Das Apache-Modul mod_unixd, das die Chroot-Funktion in Apache 2.4 bietet, ist Teil der Apache-Kernmodule und wird statisch in die Apache-Binärdatei auf Debian 8 kompiliert, sodass wir keine zusätzliche Software installieren müssen, um es zu verwenden.

Ich möchte das Verzeichnis /var/www als das Verzeichnis verwenden, das das Chroot-Gefängnis enthält. Debians Apache verwendet die PID-Datei /var/run/apache2.pid; wenn Apache nach /var/www chrooted wird, wird /var/run/apache2.pid zu /var/www/var/run/apache2.pid übersetzt. Deshalb erstellen wir jetzt dieses Verzeichnis:

mkdir -p /var/www/var/run
chown -R root:root /var/www/var/run

Jetzt müssen wir Apache mitteilen, dass wir /var/www als unser Chroot-Verzeichnis verwenden wollen. Wir öffnen /etc/apache2/apache2.conf und fügen direkt unter der PidFile-Zeile eine ChrootDir-Zeile hinzu:

nano /etc/apache2/apache2.conf
[...]
#
# PidFile: The file in which the server should record its process
# identification number when it starts.
# This needs to be set in /etc/apache2/envvars
#
PidFile ${APACHE_PID_FILE}
ChrootDir /var/www
[...]

Als nächstes müssen wir unseren vhosts mitteilen, dass sich der Dokumentenstamm geändert hat (zum Beispiel wird ein DocumentRoot /var/www jetzt in DocumentRoot / übersetzt). Wir können dies entweder tun, indem wir die DocumentRoot-Direktive jedes vhost ändern, oder einfacher, indem wir einen symbolischen Link im Dateisystem erstellen.

2.1 Erste Methode:Ändern des DocumentRoot

Nehmen wir an, wir haben einen vhost mit DocumentRoot /var/www. Wir müssen nun die vhost-Konfiguration dieses vhost öffnen und DocumentRoot /var/www in DocumentRoot / ändern. Dementsprechend würde DocumentRoot /var/www/web1/web nun in DocumentRoot /web1/web übersetzt und so weiter. Wenn Sie diese Methode verwenden möchten, müssen Sie das DocumentRoot für jeden einzelnen vhost ändern.

Diese Methode ist einfacher, da Sie sie nur einmal ausführen müssen und keine vhost-Konfiguration ändern müssen. Wir erstellen einen Symlink, der von /var/www/var/www auf /var/www:

zeigt
mkdir -p /var/www/var
cd /var/www/var
ln -s ../../ www

Schließlich müssen wir Apache stoppen, einen symbolischen Link von /var/run/apache2.pid zu /var/www/var/run/apache2.pid erstellen und ihn erneut starten:

service apache2 stop
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
service apache2 start

Das ist es. Sie können Ihre Webseiten nun wie bisher aufrufen und sollten problemlos bedient werden, sofern es sich um statische HTML-Dateien handelt oder mod_php verwendet wird.

Ich werde das jetzt mit einer phpinfo() Seite testen. Öffnen Sie eine neue info.php-Datei mit nano im Dokumentenstammverzeichnis der Standard-Website:

nano /var/www/html/info.php

und fügen Sie den folgenden Inhalt hinzu:

<php
phpinfo();

Speichern Sie die Datei und öffnen Sie den Hostnamen Ihres Servers oder die IP-Adresse im Browser, gefolgt von /info.php. Beispiel:

http://192.168.1.100/info.php

Die folgende Seite sollte jetzt erscheinen, wenn PHP korrekt funktioniert:

So weit so gut, aber woher wissen wir, ob Apache wirklich chrooted ist? Versuchen wir, auf eine Datei zuzugreifen, die sich außerhalb der Chroot befindet, ich werde hier zum Beispiel /etc/hosts verwenden.

nano /var/www/html/testchroot.php

mit diesem Inhalt:

<?php
$var = file_get_contents('/etc/hosts');
echo 'The content of /etc/hosts is: <br />' . $var;

und öffnen Sie die URL zur Testdatei in einem Browser. Das Ergebnis ist:

Wie Sie sehen können, kann von diesem PHP-Skript nicht mehr auf den Inhalt der Datei /etc/hosts zugegriffen werden.

Löschen Sie die Testdateien, wenn Sie sie nicht mehr benötigen:

rm /var/www/html/testchroot.php
rm /var/www/html/info.php

Wenn Sie CGI verwenden, z. Perl, Ruby usw., dann müssen Sie den Interpreter (z. B. /usr/bin/perl usw.) zusammen mit allen vom Interpreter benötigten Bibliotheken in das Chroot-Gefängnis kopieren. Über die benötigten Bibliotheken können Sie sich mit dem ldd-Befehl informieren, z. B.

ldd /usr/bin/perl
[email protected]:/var/www/html# ldd /usr/bin/perl
linux-vdso.so.1 (0x00007ffe951f4000)
libperl.so.5.20 => /usr/lib/x86_64-linux-gnu/libperl.so.5.20 (0x00007f1dafe54000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1dafc50000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1daf94f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1daf732000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1daf387000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f1daf150000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1db0214000)
[email protected]:/var/www/html#

oder verwenden Sie die Jailkit-Tools, um die Jail-Umgebung zu erstellen. Wenn Sie alle erforderlichen Dateien kopiert haben, die Seite aber immer noch nicht funktioniert, sollten Sie einen Blick in das Apache-Fehlerprotokoll /var/log/apache2/error.log werfen . Normalerweise sagt es Ihnen, wo das Problem liegt.

  • mod_unixd:https://httpd.apache.org/docs/2.4/mod/mod_unixd.html
  • Apache:http://httpd.apache.org/
  • Debian:http://www.debian.org/

Debian
  1. Beschleunigen Sie Apache mit mod_pagespeed und Memcached auf Debian 8

  2. Einrichten der Master-Master-Replikation mit MySQL unter Debian 8 (Jessie)

  3. So installieren Sie WebDAV mit Lighttpd unter Debian 8 (Jessie)

  4. phpMyAdmin mit Apache auf Debian 9 installieren – Schritt-für-Schritt-Prozess?

  5. Installieren Sie phpMyAdmin auf Debian 11 mit Apache

So installieren Sie phpMyAdmin mit Apache unter Debian 11 / Debian 10

Installieren Sie phpMyAdmin mit Apache (LAMP) auf Debian 10 Buster

So installieren Sie LAMP (Apache, MySQL, PHP) unter Debian 8 Jessie

So installieren Sie Apache mit PHP-FPM unter Debian 10

Installieren Sie Zabbix auf Debian 11 Bullseye mit MySQL/MariaDB &Apache

So installieren Sie Apache mit Python Mod_wsgi unter Debian 10