GNU/Linux >> Linux Esercitazione >  >> Debian

Chroot di Apache 2.4 con mod_unixd su Debian 8 (Jessie)

Questa guida spiega come configurare mod_unixd con Apache 2.4 su un sistema Debian Jessie. Con mod_unixd, puoi eseguire Apache in un ambiente chroot sicuro e rendere il tuo server meno vulnerabile ai tentativi di effrazione che tentano di sfruttare le vulnerabilità in Apache o nelle tue applicazioni web installate. Il modulo mod_unixd è un sostituto del modulo mod_chroot, che era usato nel vecchio apache 2.2.

1 Nota preliminare

Suppongo che tu abbia un sistema Debian 8 in esecuzione con un Apache funzionante, ad es. come mostrato in questo tutorial:tutorial del server Debian 8 Jessie LAMP con Apache 2, PHP 5 e MariaDB. In aggiunta a ciò, presumo che tu abbia uno o più siti web impostati all'interno della directory /var/www (ad esempio se usi ISPConfig).

Il server che utilizzo qui ha l'indirizzo IP 192.168.1.100 e il nome host server1.example.com . Sostituisci questi valori con l'indirizzo IP e il nome host del tuo server ovunque si trovino nel tutorial.

2 Configurazione di Apache

Il modulo apache mod_unixd che offre la funzione Chroot in Apache 2.4 fa parte dei moduli core di Apache ed è compilato staticamente nel binario Apache su Debian 8, quindi non è necessario installare software aggiuntivo per usarlo.

Voglio usare la directory /var/www come directory contenente la jail chroot. Apache di Debian utilizza il file PID /var/run/apache2.pid; quando Apache è in chroot su /var/www, /var/run/apache2.pid si traduce in /var/www/var/run/apache2.pid. Quindi creiamo quella directory ora:

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

Ora dobbiamo dire ad Apache che vogliamo usare /var/www come nostra directory chroot. Apriamo /etc/apache2/apache2.conf e, subito sotto la riga PidFile, aggiungiamo una riga 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
[...]

Successivamente, dobbiamo dire ai nostri vhost che la radice del documento è cambiata (ad esempio, un DocumentRoot /var/www si traduce ora in DocumentRoot /). Possiamo farlo sia modificando la direttiva DocumentRoot di ogni vhost, o più facilmente, creando un collegamento simbolico nel file system.

2.1 Primo metodo:modificare la DocumentRoot

Supponiamo di avere un vhost con DocumentRoot /var/www. Ora dobbiamo aprire la configurazione vhost di quel vhost e cambiare DocumentRoot /var/www in DocumentRoot /. Di conseguenza, DocumentRoot /var/www/web1/web verrà ora tradotto in DocumentRoot /web1/web e così via. Se vuoi usare questo metodo, devi cambiare DocumentRoot per ogni singolo vhost.

Questo metodo è più semplice, perché devi farlo una sola volta e non devi modificare alcuna configurazione di vhost. Creiamo un collegamento simbolico che punta da /var/www/var/www a /var/www:

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

Infine, dobbiamo fermare Apache, creare un collegamento simbolico da /var/run/apache2.pid a /var/www/var/run/apache2.pid e riavviarlo:

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

Questo è tutto. Ora puoi chiamare le tue pagine web come prima e dovrebbero essere servite senza problemi, purché siano file HTML statici o utilizzino mod_php.

Lo testerò ora con una pagina phpinfo(). Apri un nuovo file info.php con nano nella radice del documento del sito Web predefinito:

nano /var/www/html/info.php

e aggiungi il seguente contenuto:

<php
phpinfo();

Salva il file e apri il nome host del tuo server o l'indirizzo IP nel browser, seguito da /info.php. Esempio:

http://192.168.1.100/info.php

La seguente pagina dovrebbe apparire ora quando PHP funziona correttamente:

Fin qui tutto bene, ma come facciamo a sapere se Apache è davvero in chroot? Proviamo ad accedere a un file che è al di fuori del chroot, userò /etc/hosts qui per esempio.

nano /var/www/html/testchroot.php

con questo contenuto:

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

e apri l'URL del file di prova in un browser. Il risultato è:

Come puoi vedere, non è più possibile accedere al contenuto del file /etc/hosts da questo script PHP.

Elimina i file di prova se non ne hai più bisogno:

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

Se stai usando CGI, ad es. Perl, Ruby, ecc., quindi devi copiare l'interprete (es. /usr/bin/perl, ecc.) nella chroot jail insieme a tutte le librerie necessarie all'interprete. Puoi scoprire le librerie richieste con il comando ldd, ad es.

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#

oppure usa gli strumenti jailkit per creare l'ambiente jail. Se hai copiato tutti i file richiesti, ma la pagina continua a non funzionare, dovresti dare un'occhiata al log degli errori di Apache /var/log/apache2/error.log . Di solito ti dice dove si trova il problema.

  • 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. Velocizza Apache con mod_pagespeed e Memcached su Debian 8

  2. Configurazione della replica Master-Master con MySQL su Debian 8 (Jessie)

  3. Come installare WebDAV con Lighttpd su Debian 8 (Jessie)

  4. Installare phpMyAdmin con Apache su Debian 9 - Processo passo dopo passo?

  5. Configura Apache e Php con mod_fcgid su Ubuntu/Debian

Come installare phpMyAdmin con Apache su Debian 11 / Debian 10

Installa phpMyAdmin con Apache (LAMP) su Debian 10 Buster

Come installare LAMP (Apache, MySQL, PHP) su Debian 8 Jessie

Come installare Apache con PHP-FPM su Debian 10

Installa Zabbix su Debian 11 Bullseye con MySQL/MariaDB e Apache

Come installare Apache con Python Mod_wsgi su Debian 10