
Flash Advertise
| 实例:保障Ubuntu Apache Web服务器安全 | ||
| 摘自: linux.chinaitlab.com 被阅读次数: 302 | ||
由 yangyi 于 2008-04-05 23:10:15 提供 | ||
一、文件许可和访问控制 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 注意: 1、上面的命令行防止Apache访问root之外的文件。 2、有一些Linux发行版本比其它版本拥有更好的安全性。EnGarde Secure Linux就是一个很好的例子,因为它默认情况下就在其Apache配置文件中包含了上面的代码行。 我们并不想让用户在文件系统上的任何地方运行CGI脚本,不过我们确实需要它们在root中运行。对这个问题的解决办法是“Options ExecCGI”指令。 例如,将下面的行添加到/etc/apache2/apache2.conf文件中: AllowOverride None Options ExecCGI Order allow,deny Allow from all 重新加载Apache: # /etc/init.d/apache2 reload 那么,如果你拥有只应当被某个网络或IP地址访问的资源怎么办?对这个问题的解决办法是使用我们的Apache配置来为你增强安全性: 先说一个只允许访问192.168.0.0网络的例子,需要改变/etc/apache2/apache2.conf文件中以下的一行: AllowOverride None Options ExecCGI Order allow,deny Allow from all 将其改为: AllowOverride None Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16 然后重新加载以使更改生效: # /etc/init.d/apache2 reload 现在只有你内部网络上的用户能够在/home/username/public_html/cgi-bin中运行CGI脚本。 二、身份验证 我们怎样才能仅允许那些拥有正确口令和用户名的用户访问部分web root呢?下面的步骤将向你展示如何安全地做到这一点: 1. 基本验证 允许.htaccess: # vi /etc/apache2/apache2.conf 将AllowOveride None改为AllowOveride AuthConfig 重新加载以使改变生效: # sudo /etc/init.d/apache2 reload 创建一个口令文件: # mkdir /var/www/misc # chmod a+rx /var/www/misc # cd /var/www/misc # htpasswd -bc private.passwords username password Adding password for user username 创建.htaccess # cd /home/username/public_html/cgi-bin # vi .htaccess 在.htaccess中增加下面的命令: AuthName My Private Area" AuthType Basic AuthUserFile /var/www/misc/private.passwords AuthGroupFile /dev/null require valid-user 将AllowOverride None Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16 改变为:AllowOverride .htaccess Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16 然后重新加载以使更改生效: # /etc/init.d/apache2 reload 2、摘要验证(Digest authentication) 另外一种验证方法称之为摘要验证。如果采用摘要验证,你的口令将不是以明文通过网络传送,因为它们总是作为用户口令的一个MD5摘要传送的。如果采用这种方法,那么通过嗅探网络通信的方法就不能决定用户的口令了。 下面创建口令文件: # mkdir /var/www/misc # chmod a+rx /var/www/misc # cd /var/www/misc # htdigest -c private.passwords realm username Adding password for username in realm realm. New password: 创建 .htaccess : # cd /home/username/public_html/cgi-bin # vi .htaccess 在.htaccess中增加下面的内容: AuthName "My Private Area" AuthType Digest AuthUserFile /var/www/misc/private.passwords AuthGroupFile /dev/null require valid-user 注意: 1、一些老的浏览器并不支持摘要验证(Digest authentication) 2、要完全地保护你的.htaccess就要使用SSL 三、总结 使Apache更安全的下一步措施是使用Apache的模块来帮助实现更好的安全性,例如mod_security 和 mod_chroot。此外,要保护我们的验证我们还需要配置SSL。 |