Chrooting Apache2使用mod_chroot在OpenSUSE 11.2上

Chrooting Apache2使用mod_chroot在OpenSUSE 11.2上 本指南解释如何设置mod_chroot  在OpenSUSE 11.2系统上使用Apache2。使用mod ...

chrooting Apache2与mod_chroot在OpenSUSE 11.2上

本指南介绍了如何在OpenSUSE 11.2系统上使用Apache2设置mod_chroot 。 使用mod_chroot,您可以在安全的chroot环境中运行Apache2,并使您的服务器不易受到尝试利用Apache2或安装的Web应用程序中的漏洞的入侵尝试。

我不会保证这将为您工作!

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 jail的目录。 OpenSUSE的Apache使用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 ; 在<Directory />节中,注释选项无行,并添加行选项+ FollowSymLinks

vi /etc/apache2/httpd.conf

[...]
# generated from APACHE_MODULES in /etc/sysconfig/apache2
Include /etc/apache2/sysconfig.d/loadmodule.conf
ChrootDir /srv/www
[...]
# forbid access to the entire filesystem by default
<Directory />
    #Options None
    Options +FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
[...]

接下来,我们必须告诉我们的vhosts文档根已经改变了(例如, DocumentRoot / srv / www现在转换为DocumentRoot / )。 我们可以通过在文件系统中创建符号链接来更改每个虚拟机的DocumentRoot指令,或者更容易。


3.1第一种方法:更改DocumentRoot

假设我们有一个带有DocumentRoot / srv / www的虚拟主机。 我们现在必须打开该vhost的vhost配置,并将DocumentRoot / srv / www更改为DocumentRoot / 。 因此, DocumentRoot / srv / www / web1 / web现在将转换为DocumentRoot / web1 / web ,等等。 如果要使用此方法,则必须为每个虚拟主机更改DocumentRoot

这种方法更容易,因为您只需执行一次,就不必修改任何虚拟机配置。 我们创建一个从/ 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等,那么您必须将所需的库复制到chroot jail以及所需的库中(例如/ usr / bin / perl/ usr / sbin / suphp等)由口译员 您可以使用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了解已知问题和解决方案。