在 Debian 8 上使用 mod_unixd Chrooting Apache 2.4 (Jessie)在 Debian 8 上使用 mod_unixd Chrooting Apache 2.4 (Jessie)在 Debian 8 上使用 mod_unixd Chrooting Apache 2.4 (Jessie)在 Debian 8 上使用 mod_unixd Chrooting Apache 2.4 (Jessie)
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

在 Debian 8 上使用 mod_unixd Chrooting Apache 2.4 (Jessie)

本教程适用于这些操作系统版本

  • Debian 8(杰西)
  • Debian 4(蚀刻)

在此页

  1. 1 条初步说明
  2. 2 配置阿帕奇
    1. 2.1 第一种方法:更改 DocumentRoot
    2. 2.2 第二种方法:在文件系统中创建符号链接

    本指南解释了如何在 Debian Jessie 系统上使用 Apache 2.4 设置 mod_unixd。使用 mod_unixd,您可以在安全的 chroot 环境中运行 Apache,并使您的服务器不易受到试图利用 Apache 或已安装的 Web 应用程序中的漏洞的入侵尝试的攻击。模块 mod_unixd 是旧 apache 2.2 中使用的 mod_chroot 模块的替代品。

    1 初步说明

    我假设您有一个正在运行的 Debian 8 系统和一个正在运行的 Apache,例如如本教程所示:Debian 8 Jessie LAMP 服务器教程与 Apache 2、PHP 5 和 MariaDB。除此之外,我假设您在 /var/www 目录中设置了一个或多个网站(例如,如果您使用 ISPConfig)。

    我在这里使用的服务器具有 IP 地址 192.168.1.100 和主机名 server1.example.com。请将这些值替换为本教程中出现的服务器的 IP 地址和主机名。

    2 配置阿帕奇

    在 Apache 2.4 中提供 Chroot 功能的 apache 模块 mod_unixd 是 Apache 核心模块的一部分,并且在 Debian 8 上被静态编译到 Apache 二进制文件中,因此我们无需安装额外的软件即可使用它。

    我想使用 /var/www 目录作为包含 chroot 监狱的目录。 Debians Apache 使用 PID 文件 /var/run/apache2.pid;当 Apache chroot 到 /var/www 时,/var/run/apache2.pid 转换为 /var/www/var/run/apache2.pid。因此我们现在创建该目录:

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

    现在我们必须告诉 Apache 我们想使用 /var/www 作为我们的 chroot 目录。我们打开 /etc/apache2/apache2.conf,在 PidFile 行的正下方,我们添加一个 ChrootDir 行:

    nano /etc/apache2/apache2.conf
    [...]
    #
    # PidFile: The file in which the server should record its process
    # identification number when it starts.
    # This needs to be set in /etc/apache2/envvars
    #
    PidFile ${APACHE_PID_FILE}
    ChrootDir /var/www
    [...]

    接下来,我们必须告诉虚拟主机文档根目录已更改(例如,DocumentRoot /var/www 现在转换为 DocumentRoot /)。我们可以通过更改每个 vhost 的 DocumentRoot 指令来完成此操作,或者通过在文件系统中创建符号链接来更简单。

    2.1 第一种方法:改变DocumentRoot

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

    2.2 第二种方法:在文件系统中创建符号链接

    这种方法更简单,因为您只需执行一次并且不必修改任何 vhost 配置。我们创建一个从 /var/www/var/www 指向 /var/www 的符号链接:

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

    最后,我们必须停止 Apache,创建一个从 /var/run/apache2.pid 到 /var/www/var/run/apache2.pid 的符号链接,然后重新启动它:

    service apache2 stop
    ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
    service apache2 start

    就是这样。您现在可以像以前一样调用您的网页,只要它们是静态 HTML 文件或使用 mod_php,它们应该可以毫无问题地提供。

    我现在将使用 phpinfo() 页面对此进行测试。在默认网站的文档根目录下用 nano 打开一个新的 info.php 文件:

    nano /var/www/html/info.php

    并添加以下内容:

    <php
    phpinfo();

    保存文件并在浏览器中打开服务器的主机名或 IP 地址,然后打开 /info.php。例子:

    当 PHP 正常工作时,应该会出现以下页面:

    到目前为止一切顺利,但我们如何知道 Apache 是否真的被 chroot 了?让我们尝试访问 chroot 之外的文件,例如,我将在此处使用 /etc/hosts。

    nano /var/www/html/testchroot.php

    内容如下:

    <?php
    $var = file_get_contents('/etc/hosts');
    echo 'The content of /etc/hosts is: <br />' . $var;

    并在浏览器中打开测试文件的 URL。结果是:

    如您所见,无法再从该 PHP 脚本访问 /etc/hosts 文件的内容。

    如果您不再需要测试文件,请将其删除:

    rm /var/www/html/testchroot.php
    rm /var/www/html/info.php

    如果您使用的是 CGI,例如Perl、Ruby 等,那么您必须将解释器(例如 /usr/bin/perl 等)连同解释器所需的所有库一起复制到 chroot jail。您可以使用 ldd 命令找到所需的库,例如

    ldd /usr/bin/perl
    :/var/www/html#

    或者使用 jailkit 工具来构建监狱环境。如果您已经复制了所有必需的文件,但页面仍然无法正常工作,您应该查看 Apache 错误日志 /var/log/apache2/error.log。通常它会告诉您问题出在哪里。

    3个链接

    • mod_unixd:https://httpd.apache.org/docs/2.4/mod/mod_unixd.html
    • 阿帕奇:http://httpd.apache.org/
    • Debian:http://www.debian.org/

©2015-2025 艾丽卡 support@alaica.com