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 vimyast2 -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 restart3 Настройка 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; в разделе
vi /etc/apache2/httpd.conf| [...] # сгенерировано из APACHE_MODULES в /etc/sysconfig/apache2 Include /etc/apache2/sysconfig.d/loadmodule.conf ChrootDir /srv/www [...] # по умолчанию запрещаем доступ ко всей файловой системе |
Далее мы должны сказать нашим виртуальным хостам, что корень документа изменился (например, 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 stopln -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/suphpserver2:/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 Ссылки
- mod_chroot: http://core.segfault.pl/~hobbit/mod_chroot/
- Apache: http://httpd.apache.org/
- OpenSUSE: http://www.opensuse.org/
Get new posts in your inbox
No spam. Unsubscribe anytime.