chroot在OpenSUSE上启动Apache2

  本篇介绍了如何在OpenSUSE 11.2系统中为Apache2安装mod_chroot模块。使用mod_chroot模块,可以让Apache2运行在安全的chroot环境下,从而让你的服务器在面对系统漏洞攻击和利用Web应用程序入侵时更具抵抗力。

  准备工作

  假定你电脑上装有OpenSUSE11.2系统,并且Apache2在此环境中可以正常工作。本教程使用的系统环境为:OpenSUSE 11.2 x86_64 [ISPConfig 2]。另外你还需要在/srv/www路径下建立1个或者多个站点。

  1. 安装mod_chroot

  OpenSUSE11.2中没有mod_chroot包,因此我们必须要自己生成一个。首先要安装一些准备内容,如下代码所示:

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

  yast2 -i apache2-devel

  2. 接下来按照以下命令来生成mod_chroot:

  cd /tmp

  wget ~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

  3. 然后重启Apache:

  /etc/init.d/apache2 restart

配置Apache

  设定/srv/www为chroot jail的存储路径。OpenSUSE系统中的Apache使用/var/run/http2.pid路径下的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。步骤如下所示:

//打开httpd.conf  

vi /etc/apache2/httpd.conf

//打开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

  #Options None

  Options +FollowSymLinks

  AllowOverride None

  Order deny,allow

  Deny from all

  [...]

  接下来要告诉vhost:文档目录被修改了(举个例子来说,将DocumentRoot/srv/www改为DocumentRoot/).我们也可以通过修改每个vhost的DocumentRoot指示,更简单的方式是创建一个文件符号链接。

创建符号链接两种方式

  第一种方式:改变文档根目录(DocumentRoot)

  我们假设我们有一个使用/srv/www做为vhost的文档根目录。我们必须打开vhost的配置文件,然后将文档根目录由/srv/www改为/。于是,目录/srv/www/web1/web就会被理解为/web1/web等。如果你想使用这种方法,那么你必须更改所有vhost的文档根目录。

  第二种方式:创建一个系统文件符号链接

  这种方式很简单,因为你只需要修改一次,而且不需要修改vhos所有的t配置文件。你只需要在/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之间建立一个符号链接后在再启动Apache,命令如下所示:

  /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,比如suPHP,Ruby,etc.,那么你必须复制解释器(e.g. /usr/bin/perl, /usr/sbin/suphp, etc.)和解释器需要的库文件到chroot jail中。你可以使用Idd命令找到解释器需要的所有库文件。

  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 日志。日志常常会告诉我们浏览器哪里出错了。同时,你也可以阅读~hobbit/mod_chroot/caveats.html 上面的FAQ。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wydfgy.html