Apache настройка · 3 min read · Nov 25, 2025

Chrooting Apache2 With mod_chroot On OpenSUSE 11.2

Chrooting Apache2 With mod_chroot On OpenSUSE 11.2

Версия 1.0
Автор: Фалко Тимме
Следите за мной в Twitter

Этот гид объясняет, как настроить mod_chroot с Apache2 на системе OpenSUSE 11.2. С помощью mod_chroot вы можете запускать Apache2 в безопасной среде chroot и сделать ваш сервер менее уязвимым к попыткам взлома, которые пытаются использовать уязвимости в Apache2 или ваших установленных веб-приложениях.

Я не даю никаких гарантий, что это сработает для вас!

1 Предварительная заметка

Я предполагаю, что у вас есть работающая система OpenSUSE 11.2 с работающим Apache2, например, как показано в этом учебнике: Идеальный сервер - OpenSUSE 11.2 x86_64 [ISPConfig 2]. Кроме того, я предполагаю, что у вас настроено один или несколько веб-сайтов в каталоге /srv/www (например, если вы используете ISPConfig).

2 Установка mod_chroot

Для OpenSUSE 11.2 нет пакета mod_chroot, поэтому мы должны собрать его сами. Сначала установим необходимые пакеты:

yast2 -i libgcc glibc-devel gcc flex lynx compat-readline4 db-devel wget gcc-c++ make vim
yast2 -i apache2-devel

Теперь мы собираем mod_chroot следующим образом:

cd /tmp  
wget http://core.segfault.pl/~hobbit/mod_chroot/dist/mod_chroot-0.5.tar.gz  
tar xvfz mod_chroot-0.5.tar.gz  
cd mod_chroot-0.5  
apxs2 -cia mod_chroot.c

Затем мы перезапускаем Apache:

/etc/init.d/apache2 restart

3 Настройка Apache

Я хочу использовать каталог /srv/www в качестве каталога, содержащего тюрьму chroot. Apache OpenSUSE использует файл PID /var/run/httpd2.pid; когда Apache находится в chroot в /srv/www, /var/run/httpd2.pid переводится в /srv/www/var/run/httpd2.pid. Поэтому мы создаем этот каталог сейчас:

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

Теперь мы должны сказать Apache, что мы хотим использовать /srv/www в качестве нашего каталога chroot. Мы открываем /etc/apache2/httpd.conf и прямо под строкой Include /etc/apache2/sysconfig.d/loadmodule.conf добавляем строку ChrootDir /srv/www; в разделе закомментируем строку Options None и добавим строку Options +FollowSymLinks:

vi /etc/apache2/httpd.conf

| [...] # сгенерировано из APACHE_MODULES в /etc/sysconfig/apache2 Include /etc/apache2/sysconfig.d/loadmodule.conf ChrootDir /srv/www [...] # по умолчанию запрещаем доступ ко всей файловой системе #Options None Options +FollowSymLinks AllowOverride None Order deny,allow Deny from all [...] |

Далее мы должны сказать нашим виртуальным хостам, что корень документа изменился (например, DocumentRoot /srv/www теперь переводится в DocumentRoot /). Мы можем сделать это либо изменив директиву DocumentRoot каждого виртуального хоста, либо проще, создав символическую ссылку в файловой системе.


3.1 Первый метод: Изменение DocumentRoot

Предположим, у нас есть виртуальный хост с DocumentRoot /srv/www. Теперь мы должны открыть конфигурацию виртуального хоста и изменить DocumentRoot /srv/www на DocumentRoot /. Соответственно, DocumentRoot /srv/www/web1/web теперь будет переводиться в DocumentRoot /web1/web и так далее. Если вы хотите использовать этот метод, вам нужно изменить DocumentRoot для каждого отдельного виртуального хоста.

3.2 Второй метод: Создание символической ссылки в файловой системе

Этот метод проще, потому что вам нужно сделать это только один раз и не нужно изменять конфигурацию виртуального хоста. Мы создаем символическую ссылку, указывающую с /srv/www/srv/www на /srv/www:

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

Наконец, мы должны остановить Apache, создать символическую ссылку с /var/run/httpd2.pid на /srv/www/var/run/httpd2.pid и снова запустить его:

/etc/init.d/apache2 stop
ln -sf /srv/www/var/run/httpd2.pid /var/run/httpd2.pid  
/etc/init.d/apache2 start

Вот и все. Теперь вы можете вызывать ваши веб-страницы как раньше, и они должны обслуживаться без проблем, если это статические HTML-файлы или использование mod_php.

Если вы используете CGI, например, Perl, suPHP, Ruby и т.д., то вы должны скопировать интерпретатор (например, /usr/bin/perl, /usr/sbin/suphp и т.д.) в тюрьму chroot вместе со всеми библиотеками, необходимыми для интерпретатора. Вы можете узнать о необходимых библиотеках с помощью команды ldd, например:

ldd /usr/sbin/suphp
server2:/var/www/web1/log# ldd /usr/sbin/suphp  
        linux-gate.so.1 =>  (0xffffe000)  
        libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7e34000)  
        libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7e0f000)  
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7e03000)  
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7cd2000)  
        /lib/ld-linux.so.2 (0xb7f23000)  
server2:/var/www/web1/log#

Если вы скопировали все необходимые файлы, но страница все еще не работает, вам следует взглянуть на журнал ошибок Apache. Обычно он говорит вам, где проблема. Также прочитайте http://core.segfault.pl/~hobbit/mod_chroot/caveats.html для известных проблем и решений.

4 Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.