在一个Linux发行版本上设置一个Web服务器是一个很快的过程,不过要让这种设置成为一种安全的过程可能就需要花点儿工夫。本文将向你展示如何有效地使用访问控制和身份验证策略,使你的Apache Web服务器更安全。下面所有的例子都假定你用的是Ubuntu7.10,并对Apache进行了基本的配置。不过,这些例子将帮助任何一位运行Apache服务器的用户获得更大的安全性,因为其要领仍然适用于其它Linux系统。本文中所涉及到的方法应当首先在一台测试服务器上进行试验,在成功之后才能迁移到一个实际使用的 Web服务器上。
一、文件许可和访问控制
1. 用户和组
首先要保障的是Apache不要以root身份运行,因为如果Apache被攻破的话,那么攻击者就可以控制root账户。下面让我们看一下Apache正以何种用户和组的身份运行:
运行下面的命令:
# ps auwwfx | grep apache www-data 25675 0.0 0.0 10348 508 ? S Jan21 0:00 \_ /usr/sbin/apache2 -k start
www-data 25686 0.0 0.2 231816 2208 ? Sl Jan21 0:00 \_ /usr/sbin/apache2 -k start
www-data 25688 0.0 0.2 231816 2200 ? Sl Jan21 0:00 \_ /usr/sbin/apache2 -k start
可以看出,www-data是运行Apache的用户。不过,我们需要编辑Apache的配置并创建一个新用户和组:
# groupadd www-data
# useradd -g www-data www-data
# vi /etc/apache2/apache2.conf
将User root Group root改为:
User www-data Group www-data
然后重新加载以使改变生效:
# /etc/init.d/apache2 reload
2. 服务文件准许
一个最易被忽视的安全问题是如何正确地使用chmod命令。例如,我们在Apache 的html root目录中创建了一个index.cgi文件,不过在浏览器中打开这个文件时却被告知拒绝访问。为了让我们的index.cgi文件正常工作,我们执行一个chomod 777 index.cgi。在我们如此试验时,每一个Apache管理员都在考虑这样安全吗?答案是否定的。不过,如何使这种许可足够安全并能允许 index.cgi脚本正常运行呢?
Apache需要得到准许来访问index.cgi文件。不过,我们不希望人人都能读写index.cgi。这个文件的所有者应当拥有读写这个文件的许可。为此我们需要下面的命令:
# chmod 755 index.cgi
将下面的一行加入到你的Apache.conf文件中是很重要的:
Options FollowSymLinks AllowOverride None