GNU/Linux >> Znalost Linux >  >> Debian

Chrooting Apache 2.4 s mod_unixd na Debian 8 (Jessie)

Tato příručka vysvětluje, jak nastavit mod_unixd s Apache 2.4 na systému Debian Jessie. S mod_unixd můžete spouštět Apache v zabezpečeném chroot prostředí a učinit váš server méně zranitelným vůči pokusům o vloupání, které se snaží zneužít zranitelnosti Apache nebo vašich nainstalovaných webových aplikací. Modul mod_unixd je náhradou za modul mod_chroot, který byl používán ve starém Apache 2.2.

1 předběžná poznámka

Předpokládám, že máte spuštěný systém Debian 8 s funkčním Apache, např. jak je znázorněno v tomto tutoriálu:Kurz serveru Debian 8 Jessie LAMP s Apache 2, PHP 5 a MariaDB. Kromě toho předpokládám, že máte v adresáři /var/www nastavenu jednu nebo více webových stránek (např. pokud používáte ISPConfig).

Server, který zde používám, má IP adresu 192.168.1.100 a název hostitele server1.example.com . Nahraďte prosím tyto hodnoty IP adresou a názvem hostitele vašeho serveru, kdekoli se v tutoriálu vyskytují.

2 Konfigurace Apache

Modul Apache mod_unixd, který nabízí funkci Chroot v Apache 2.4, je součástí základních modulů Apache a je staticky zkompilován do binárního souboru Apache na Debianu 8, takže k jeho používání nemusíme instalovat další software.

Chci použít adresář /var/www jako adresář obsahující chroot jail. Debian's Apache používá PID soubor /var/run/apache2.pid; když je Apache chrootován na /var/www, /var/run/apache2.pid se převede na /var/www/var/run/apache2.pid. Proto nyní vytvoříme tento adresář:

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

Nyní musíme říci Apache, že chceme použít /var/www jako náš chroot adresář. Otevřeme /etc/apache2/apache2.conf a přímo pod řádek PidFile přidáme řádek ChrootDir:

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
[...]

Dále musíme našim vhostům sdělit, že se kořen dokumentu změnil (například DocumentRoot /var/www se nyní převede na DocumentRoot /). Můžeme to udělat buď změnou direktivy DocumentRoot každého vhost, nebo jednodušeji vytvořením symbolického odkazu v systému souborů.

2.1 První metoda:Změna kořenového adresáře dokumentu

Předpokládejme, že máme vhost s DocumentRoot /var/www. Nyní musíme otevřít konfiguraci vhost tohoto vhost a změnit DocumentRoot /var/www na DocumentRoot /. V souladu s tím by se DocumentRoot /var/www/web1/web nyní přeložil do DocumentRoot /web1/web a tak dále. Pokud chcete použít tuto metodu, musíte změnit DocumentRoot pro každý jednotlivý vhost.

Tato metoda je jednodušší, protože ji musíte provést pouze jednou a nemusíte upravovat žádnou konfiguraci vhost. Vytvoříme symbolický odkaz směřující z /var/www/var/www na /var/www:

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

Nakonec musíme zastavit Apache, vytvořit symbolický odkaz z /var/run/apache2.pid na /var/www/var/run/apache2.pid a spustit jej znovu:

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

A je to. Nyní můžete své webové stránky volat jako dříve a měly by být obsluhovány bez problémů, pokud se jedná o statické soubory HTML nebo používající mod_php.

Nyní to otestuji pomocí stránky phpinfo(). Otevřete nový soubor info.php s nano v kořenovém adresáři dokumentu výchozí webové stránky:

nano /var/www/html/info.php

a přidejte následující obsah:

<php
phpinfo();

Uložte soubor a otevřete název hostitele vašeho serveru nebo IP adresu v prohlížeči a poté /info.php. Příklad:

http://192.168.1.100/info.php

Když PHP funguje správně, měla by se nyní zobrazit následující stránka:

Zatím je to dobré, ale jak víme, zda je Apache skutečně chrootovaný? Zkusme přistupovat k souboru, který je mimo chroot, zde například použiji /etc/hosts.

nano /var/www/html/testchroot.php

s tímto obsahem:

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

a otevřete adresu URL testovacího souboru v prohlížeči. Výsledek je:

Jak vidíte, obsah souboru /etc/hosts již není z tohoto PHP skriptu přístupný.

Smažte testovací soubory, pokud je již nepotřebujete:

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

Pokud používáte CGI, např. Perl, Ruby atd., pak musíte zkopírovat interpret (např. /usr/bin/perl, atd.) do chroot jail spolu se všemi knihovnami, které interpret potřebuje. O požadovaných knihovnách se můžete dozvědět pomocí příkazu ldd, např.

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#

nebo použijte nástroje jailkit k vybudování vězeňského prostředí. Pokud jste zkopírovali všechny požadované soubory, ale stránka stále nefunguje, měli byste se podívat na protokol chyb Apache /var/log/apache2/error.log . Obvykle vám řekne, kde je problém.

  • 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. Zrychlete Apache pomocí mod_pagespeed a Memcached na Debianu 8

  2. Jak nainstalovat WebDAV s Lighttpd na Debian 8 (Jessie)

  3. Nainstalovat phpMyAdmin s Apache na Debian 9 – proces krok za krokem?

  1. Nastavení replikace Master-Master s MySQL na Debian 8 (Jessie)

  2. Nastavte Apache a Php pomocí mod_fcgid na Ubuntu/Debian

  3. Nainstalujte phpMyAdmin na Debian 11 s Apache

  1. Jak nainstalovat a zabezpečit phpMyAdmin pomocí Apache na Debianu 9

  2. Zabezpečte Apache pomocí Lets Encrypt na Debianu 9

  3. Zabezpečte Apache pomocí Lets Encrypt na Debianu 10