在RHEL/CentOS 7 中如何为Apache Web 服务器设置 Chroot Jail

在 Linux 中,Chroot 是一种操作,用于更改正在运行的进程及其子进程的明显根目录,例如:/。
在 Chroot 中运行的进程无法访问该环境目录树之外的文件和命令。
这个修改后的环境称为 Chroot Jail 。

通过 chroot Apache Web 服务器,我们实际上并没有提高安全性,而是限制了 httpd 进程对文件和命令的访问,并减少了当 Apache Web 服务器受到威胁时可能产生的影响。
还有潜在危险的 CGI 脚本只能访问环境根目录。

与传统安装相比,chroot 环境的设置相对困难,尤其是当我们运行其他软件(如 MySQL、PHP、Python 等)时。

在这篇文章中,我们将为 RHEL/CentOS 7 中的 Apache Web Server 设置一个 chroot jail,并创建 systemd 单元来自动启动 httpd 服务。

https://onitroad.com 更多教程

对 Apache Web 服务器进行chroot

创建用于设置 chroot jail 的目录。

[root@webserver-01 ~]# mkdir -p /chroot/httpd/

现在,使用 yum 安装 Apache Web 服务器,但在一个非默认目录中。

[root@webserver-01 ~]# yum install -y httpd --installroot=/chroot/httpd

上面的命令将在 /chroot/httpd 中安装 Apache Web 服务器及其依赖项。
我们可能会注意到,它安装了许多已安装在默认根目录/上的软件包。
为了 chroot jail 设置,这些包被重新安装在 /chroot/httpd 中。

为 chroot 环境创建一些必需的设备。

[root@webserver-01 ~]# cd /chroot/httpd/dev
[root@webserver-01 dev]# rm -f null
[root@webserver-01 dev]# mknod /chroot/httpd/dev/null c 1 3
[root@webserver-01 dev]# mknod /chroot/httpd/dev/random c 1 8
[root@webserver-01 dev]# mknod /chroot/httpd/dev/urandom c 1 9
[root@webserver-01 dev]# ls -al
total 0
drwxr-xr-x.  2 root root   47 Sep  2 19:26 .
dr-xr-xr-x. 17 root root  224 Sep  2 19:17 ..
crw-r--r--.  1 root root 1, 3 Sep  2 19:26 null
crw-r--r--.  1 root root 1, 8 Sep  2 19:26 random
crw-r--r--.  1 root root 1, 9 Sep  2 19:26 urandom
[root@webserver-01 dev]#

为 Apache Web 服务器添加默认主页。

[root@webserver-01 dev]# cd /chroot/httpd/var/www/html/
[root@webserver-01 html]# cat >> index.html << EOF
> <html>
> <head>
> <body>
> <h1>Apache Homepage from Chroot Jail.</h1>
> </body>
> </html>
> EOF
[root@webserver-01 html]#
Allow httpd service to communicate through Firewall.
[root@webserver-01 html]# firewall-cmd --permanent --add-service=http
success
[root@webserver-01 html]# firewall-cmd --reload
success

配置 systemd 单元以自动启动 httpd 服务。
首先将所需的配置文件从 chroot jail 复制到宿主环境。

[root@webserver-01 html]# cp /chroot/httpd/etc/sysconfig/httpd /etc/sysconfig/
[root@webserver-01 html]# cp /chroot/httpd/usr/lib/systemd/system/httpd.service /usr/lib/systemd/system/

现在编辑 httpd.service 单元以在 chrooted 环境中启动 Apache。

[root@webserver-01 html]# vi /usr/lib/systemd/system/httpd.service

搜索并更新以下三行。

Type=simple
ExecStart=/sbin/chroot /chroot/httpd /usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/sbin/chroot /chroot/httpd /usr/sbin/httpd $OPTIONS -k graceful

启动并启用 httpd 服务。

[root@webserver-01 html]# systemctl daemon-reload
[root@webserver-01 html]# systemctl start httpd ; systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

检查根目录以运行 httpd 服务。
首先我们获取httpd进程的PID,然后检查它在proc文件夹中的根目录。

[root@webserver-01 html]# systemctl status httpd

[root@webserver-01 html]# ls /proc/10620/root -al
lrwxrwxrwx. 1 root root 0 Sep  2 20:20 /proc/10620/root -> /chroot/httpd
[root@webserver-01 html]#

使用浏览器打开 http://webserver-01.onitroad.com/ 以验证 httpd 服务。

日期:2020-09-17 00:11:51 来源:oir作者:oir