chrooting Apache2与mod_chroot在Fedora 12上
本指南介绍如何在Fedora 12系统上使用Apache2设置mod_chroot 。 使用mod_chroot,您可以在安全的chroot环境中运行Apache2,并使您的服务器不易受到尝试利用Apache2或安装的Web应用程序中的漏洞的入侵尝试。
我不会保证这将为您工作!
1初步说明
我假设你有一个运行的Fedora 12系统,它具有一个可以工作的Apache2,例如本教程所示: 完美的服务器 - Fedora 12 x86_64 [ISPConfig 2] 。 除此之外,我假设您在/ var / www
目录中设置了一个或多个网站(例如,如果您使用ISPConfig)。
2安装mod_chroot
Fedora 12没有mod_chroot软件包,因此我们必须自己构建它。 首先我们安装先决条件:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install httpd-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
apxs -cia mod_chroot.c
然后我们重新启动Apache:
/etc/init.d/httpd restart
3配置Apache
我想使用/ var / www
目录作为包含chroot jail的目录。 Fedora的Apache使用PID文件/var/run/httpd/httpd.pid
; 当Apache被chroot到/ var / www
时, /var/
run
/
httpd
/
httpd.pid
转换为/var/www/var/run/httpd/httpd.pid
。 因此,我们现在创建该目录:
mkdir -p /var/www/var/run/httpd
chown -R root:apache /var/www/var/run/httpd
现在我们必须告诉Apache我们要使用/ var / www
作为我们的chroot目录。 我们打开/etc/httpd/conf/httpd.conf
,在PidFile
行的正下方,我们添加了ChrootDir / var / www
; 还要注释出PidFile run / httpd.pid
行并添加行PidFile /var/run/httpd/httpd.pid
:
vi /etc/httpd/conf/httpd.conf
[...] # # PidFile: The file in which the server should record its process # identification number when it starts. # #PidFile run/httpd.pid PidFile /var/run/httpd/httpd.pid ChrootDir /var/www [...] |
接下来,我们必须告诉我们的vhosts文档根已经改变了(例如, DocumentRoot / var / www
现在转换为DocumentRoot /
)。 我们可以通过在文件系统中创建符号链接来更改每个虚拟机的DocumentRoot
指令,或者更容易。
3.1第一种方法:更改DocumentRoot
假设我们有一个带有DocumentRoot / var / www
的虚拟主机。 我们现在必须打开该vhost的vhost配置,并将DocumentRoot / var / www
更改为DocumentRoot /
。 因此, DocumentRoot / var / www / web1 / web
现在将转换为DocumentRoot / web1 / web
,等等。 如果要使用此方法,则必须为每个虚拟主机更改DocumentRoot
。
3.2第二种方法:在文件系统中创建一个符号链接
这种方法更容易,因为您只需执行一次,就不必修改任何虚拟机配置。 我们创建一个从/ var / www / var / www
指向/ var / www
的符号链接:
mkdir -p /var/www/var
cd /var/www/var
ln -s ../../ www
最后,我们必须停止Apache,删除目录/ var / run / httpd
,从/ var / run / httpd
创建一个符号链接到/ var / www / var / run / httpd
,然后重新启动:
/etc/init.d/httpd stop
rm -fr /var/run/httpd
ln -sf /var/www/var/run/httpd /var/run/httpd
/etc/init.d/httpd 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了解已知问题和解决方案。
4链接
- mod_chroot: http : //core.segfault.pl/~hobbit/mod_chroot/
- Apache: http : //httpd.apache.org/
- Fedora: http : //fedoraproject.org/