[ 上一篇 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ 下一篇 ]
Apache
的 Chroot
环境chroot
实用程序通常用于将守护进程隔离在受限目录树中。你可以使用它来隔离服务,以便一个软件包中的安全问题不会危及整个服务器。当使用 makejail
脚本时,设置和更新 chroot 目录树会容易得多。
待办事项:Apache 也可以使用 http://www.modsecurity.org
进行 chroot,它在 libapache-mod-security
(用于 Apache 1.x) 和 libapache2-mod-security
(用于 Apache 2.x) 中可用。
本文档版权归 2002 年 Alexandre Ratti 所有。它已获得双重许可,并根据 GPL version 2 (GNU General Public License) 和 GNU-FDL 1.2 (GNU Free Documentation Licence) 发布,并已获得他的明确许可包含在本手册中。(来自 原始文档
)
此过程已在 Debian GNU/Linux 3.0 (Woody) 上使用 makejail
0.0.4-1 (在 Debian/testing 中) 进行测试。
以 root
身份登录并创建一个新的 jail 目录
$ mkdir -p /var/chroot/apache
创建一个新用户和一个新组。chroot 的 Apache 服务器将以此用户/组身份运行,该用户/组不用于系统上的任何其他用途。在此示例中,用户和组都称为 chrapach
。
$ adduser --home /var/chroot/apache --shell /bin/false \ --no-create-home --system --group chrapach
待办事项:需要新用户吗?(Apache 已经以 apache 用户身份运行)
像往常一样在 Debian 上安装 Apache:apt-get install apache
设置 Apache (例如,定义你的子域名等)。在 /etc/apache/httpd.conf
配置文件中,将 Group 和 User 选项设置为 chrapach。重启 Apache 并确保服务器正常工作。现在,停止 Apache 守护进程。
安装 makejail
(目前在 Debian/testing 中可用)。你还应该安装 wget
和 lynx
,因为 makejail
将使用它们来测试 chroot 服务器:apt-get install makejail wget lynx
将 Apache 的示例配置文件复制到 /etc/makejail
目录
# cp /usr/share/doc/makejail/examples/apache.py /etc/makejail/
编辑 /etc/makejail/apache.py
。你需要更改 chroot、users 和 groups 选项。要运行此版本的 makejail
,你还可以添加 packages
选项。请参阅 makejail 文档
。此处显示了一个示例
chroot="/var/chroot/apache" testCommandsInsideJail=["/usr/sbin/apachectl start"] processNames=["apache"] testCommandsOutsideJail=["wget -r --spider http://localhost/", "lynx --source https://localhost/"] preserve=["/var/www", "/var/log/apache", "/dev/log"] users=["chrapach"] groups=["chrapach"] packages=["apache", "apache-common"] userFiles=["/etc/password", "/etc/shadow"] groupFiles=["/etc/group", "/etc/gshadow"] forceCopy=["/etc/hosts", "/etc/mime.types"]
待办事项: 某些选项似乎无法正常工作。例如,/etc/shadow
和 /etc/gshadow
没有被复制,而 /etc/password
和 /etc/group
被完全复制,而不是被过滤。
创建 chroot 目录树:makejail /etc/makejail/apache.py
如果 /etc/password
和 /etc/group
被完全复制,请键入
$ grep chrapach /etc/passwd > /var/chroot/apache/etc/passwd $ grep chrapach /etc/group > /var/chroot/apache/etc/group
以用过滤后的副本替换它们。
将网站页面和日志复制到 jail 中。这些文件不会自动复制(请参阅 makejail
配置文件中的 preserve 选项)。
# cp -Rp /var/www /var/chroot/apache/var # cp -Rp /var/log/apache/*.log /var/chroot/apache/var/log/apache
编辑系统日志守护进程的启动脚本,使其也监听 /var/chroot/apache/dev/log
套接字。在 /etc/default/syslogd
中,将:SYSLOGD="" 替换为 SYSLOGD=" -a /var/chroot/apache/dev/log" 并重启守护进程 (/etc/init.d/sysklogd restart)。
编辑 Apache 启动脚本 (/etc/init.d/apache
)。你可能需要对默认启动脚本进行一些更改,才能使其在 chroot 目录树中正常运行。例如
在文件顶部设置一个新的 CHRDIR 变量;
编辑 start、stop、reload 等部分;
添加一行以在 jail 中挂载和卸载 /proc
文件系统。
#! /bin/bash # # apache Start the apache HTTP server. # CHRDIR=/var/chroot/apache NAME=apache PATH=/bin:/usr/bin:/sbin:/usr/sbin DAEMON=/usr/sbin/apache SUEXEC=/usr/lib/apache/suexec PIDFILE=/var/run/$NAME.pid CONF=/etc/apache/httpd.conf APACHECTL=/usr/sbin/apachectl trap "" 1 export LANG=C export PATH test -f $DAEMON || exit 0 test -f $APACHECTL || exit 0 # ensure we don't leak environment vars into apachectl APACHECTL="env -i LANG=${LANG} PATH=${PATH} chroot $CHRDIR $APACHECTL" if egrep -q -i "^[[:space:]]*ServerType[[:space:]]+inet" $CONF then exit 0 fi case "$1" in start) echo -n "Starting web server: $NAME" mount -t proc proc /var/chroot/apache/proc start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON \ --chroot $CHRDIR ;; stop) echo -n "Stopping web server: $NAME" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo umount /var/chroot/apache/proc ;; reload) echo -n "Reloading $NAME configuration" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" \ --signal USR1 --startas $DAEMON --chroot $CHRDIR ;; reload-modules) echo -n "Reloading $NAME modules" start-stop-daemon --stop --pidfile "$CHRDIR/$PIDFILE" --oknodo \ --retry 30 start-stop-daemon --start --pidfile $PIDFILE \ --exec $DAEMON --chroot $CHRDIR ;; restart) $0 reload-modules exit $? ;; force-reload) $0 reload-modules exit $? ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|reload|reload-modules|force-reload|restart}" exit 1 ;; esac if [ $? == 0 ]; then echo . exit 0 else echo failed exit 1 fi
待办事项:第一个 Apache 进程是否应该以 root 以外的其他用户身份运行(即添加 --chuid chrapach:chrapach)?缺点:chrapach 将需要写入日志的权限,这很麻烦。
在 /etc/logrotate.d/apache
中将 /var/log/apache/*.log 替换为 /var/chroot/apache/var/log/apache/*.log
启动 Apache (/etc/init.d/apache start
) 并检查 jail 日志 (/var/chroot/apache/var/log/apache/error.log
) 中报告的内容。如果你的设置更复杂(例如,如果你还使用 PHP 和 MySQL),则可能会缺少文件。如果某些文件未被 makejail
自动复制,你可以在 /etc/makejail/apache.py
配置文件中的 forceCopy (直接复制文件) 或 packages (复制完整软件包及其依赖项) 选项中列出它们。
键入 ps aux | grep apache 以确保 Apache 正在运行。你应该看到类似
root 180 0.0 1.1 2936 1436 ? S 04:03 0:00 /usr/sbin/apache chrapach 189 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 190 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 191 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 192 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache chrapach 193 0.0 1.1 2960 1456 ? S 04:03 0:00 /usr/sbin/apache
确保 Apache 进程以 chroot 方式运行,方法是查看 /proc
文件系统:ls -la /proc/process_number/root/. 其中 process_number 是上面列出的 PID 号码之一(第二列;例如 189)。应该列出受限目录树的条目
drwxr-sr-x 10 root staff 240 Dec 2 16:06 . drwxrwsr-x 4 root staff 72 Dec 2 08:07 .. drwxr-xr-x 2 root root 144 Dec 2 16:05 bin drwxr-xr-x 2 root root 120 Dec 3 04:03 dev drwxr-xr-x 5 root root 408 Dec 3 04:03 etc drwxr-xr-x 2 root root 800 Dec 2 16:06 lib dr-xr-xr-x 43 root root 0 Dec 3 05:03 proc drwxr-xr-x 2 root root 48 Dec 2 16:06 sbin drwxr-xr-x 6 root root 144 Dec 2 16:04 usr drwxr-xr-x 7 root root 168 Dec 2 16:06 var
要自动化此测试,你可以键入:ls -la /proc/`cat /var/chroot/apache/var/run/apache.pid`/root/.
待办事项:添加其他可以运行的测试,以确保 jail 已关闭?
我喜欢这样做的原因是设置 jail 并不困难,并且只需两行即可更新服务器
apt-get update && apt-get install apache makejail /etc/makejail/apache.py
如果你正在寻找更多信息,可以考虑以下信息来源,本文档中的信息基于这些来源
makejail 主页
,此程序由 Alain Tesio 编写
[ 上一篇 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ H ] [ 下一篇 ]
Debian 手册安全
版本: 3.13, Sun, 08 Apr 2012 02:48:09 +0000jfs@debian.org