【IT168 专稿】随着Internet技术的飞速发展,Web技术得到广泛应用。而安全问题一直都是Internet的一个薄弱环节,任何连接到Internet或者其他网络的计算机都有可能受到黑客的攻击。
从国际www安全小组CERT(Computer Emergency Response Team)的统计资料来看,Internet中与www相关的安全事故呈逐年上升趋势。www安全主要包括三个方面:Web服务器安全、主机安全和传输安全。由于服务器端操作系统的安全漏洞、www服务软件本身存在问题和服务器端的错误配置等等一些问题,导致web服务器存在一定的安全隐患;网络病毒、恶意代码和系统配置不当等等是对主机的安全威胁;Internet是连接Web客户机和服务器通信的信道,攻击者可以利用嗅探程序,侦听信道,以获取机密信息。这些多种多样的安全威胁给人们的日常生活和经济生活造成很大麻烦。
这里重点讨论如何加强web服务器安全。市场上有许许多多的web服务器,例如:Apache、IIS、Zeus、iPlanet、AOLserver和Jigsaw等等。
一、加强Web服务器安全的措施
无论何种类型的Web服务器,其基本的安全问题是相同的,这就是:安全配置、身份认证和访问控制等。加强Web服务器安全的主要措施如下:
(1)合理配置Web服务器
主要措施有:①具有合法权限的用户才可以运行web服务器;②通过某个IP地址、IP地址段或者某个域来控制,未被允许的IP地址、IP地址段或某个域发出来的请求将被拒绝;③通过用户名/口令来控制,只有输入正确的用户名/口令时,才允许访问。
(2)设置Web服务器有关目录的权限
(3)审阅日志文件
日志文件是web服务器工作的记录。它记录了系统每天发生的各种各样的情况,可以通过它来检查故障发生的原因,或者受到攻击时攻击者留下的痕迹。日志的主要功能是:审计和监测。它还可以实时监测系统状态,监测和追踪入侵者等等。
(4)进行必要的数据备分
定期对web服务器做安全检查,安全管理Web服务器。这里以Apache服务器为例,介绍上述安全措施的具体实施方案。
二、设置Web服务器有关目录的权限
为了更好地维护Web服务器安全,管理员应对“服务器根目录”(日志文件和配置文件存放目录)和“文档根目录”(默认的客户文档存放目录)做严格的访问权限控制。
(1)服务器根目录下存放配置文件、错误和日志文件等敏感信息,它们对系统的安全至关重要,不能随意读取或删改。
(2)一般,Web服务器由root用户启动,然后切换为由user指令所指定的用户。在根目录下执行命令时需注意非root对其操作无效。不仅文件本身,目录及其父目录都只有root具有写的权限。如果允许非root用户对由root执行或读写的文件有写权限,则会危及系统。
(3)文档根目录定义Web服务器对外发布的超文本文档存放的路径,客户程序请求的URL就被映射为这个目录下的网页文件。这个目录下的子目录,以及使用符号连接指出的文件和目录都能被浏览器访问,只是要在URL上使用同样的相对目录名。
符号连接虽然逻辑上位于根文档目录之下,但实际上可以位于计算机上的任意目录中,因此可以使客户程序能访问那些根文档目录之外的目录,这在增加了灵活性的同时也减少了安全性。Apache在目录的访问控制中提供了FollowSymLinks选项来打开或关闭支持符号连接的特性。
三、限制对Web服务器的访问
目前,很多的网站都限制了客户对Web服务器的访问权限。当客户访问站点的某些资源时,就需要输入“用户名/口令”。如果输入正确,则可以访问资源;否则服务器将拒绝服务。访问也可以针对IP地址、域名或者网段进行控制。这样可以大大加强Web服务器的安全。
1、基本HTTP格式的认证
基本的HTTP认证提供了一种基于用户名/口令的认证方式。Apache大部分模块的格式都支持基本HTTP认证。使用Apache的多个认证模块可以使Web站点更加安全。对于Apache服务器,我们通过使用mod_access和mod_auth模块来实现对web服务器的访问控制。
如果需要对某一目录下的文件,例如/usr/local/apache2/conf使用用户认证,则在Apache配置文件httpd.conf中加入如下指令:
<Directory /usr/local/apache2/conf>
Options Indexes FOIIOwSymLinks
AllowOverride AuthConfig
Order Allow,Deny
Allow from all
</Directory>
其中,<Directory directory>……</Directory>用来封装指令,使这些指令应用在directory目录及其子目录当中。Directory可以是所设定目录的完整路径名,或者是带有通配符的。可对不同的目录提供不同的保护,但这样的设置必须重新启动才能生效,灵活性较差。
通过AccessFile指令指定访问控制文件的方式则较为灵活。AllowOverride AuthConfig表示允许对/usr/local/apache2/conf目录下的文件进行用户认证,这是关键的设置。Order指令的参数是用逗号隔开的指令列表,Order指令告诉Apache处理deny和allow这两个指令的顺序。
然后,在目录/usr/local/apache2/conf下创建.htaccess文件,其文件内容如下:
AuthType Basic
AuthName “SecretFiles”
AuthUserFile /usr/local/apache/conf/.htpasswd
Require user song
其中,AuthType指令说明用户验证的类型。此处的认证类型为基本认证。最常用的是mod_auth模块提供的Basic,还有更安全的Digest认证。Digest认证由mod_auth_digest模块提供支持。
AuthName指令设置了使用认证的领域。AuthUserFile指令指定了用户文件名。Require指令指定了允许访问的用户,此处说明只有名为song的用户才可以访问该目录。
最后,建立密码文件。Apache在其安装目录的bin子目录中提供了名为htpasswd的工具,以建立密码文件。如果我们是第一次创建用户密码,命令格式如下:htpasswd –c 密码文件名字 用户名称
在上面的例子中,可以进行如下操作:
htpasswd –c /usr/local/apache2/conf/.htpasswd song
这样,重新启动httpd后,进行该Web目录时就会弹出一个对话框,要求输入用户名和口令。上面我们仅允许一个人(一个名为song的用户)访问这个目录,但是在许多情况下,需允许多人访问,则需用到AuthGroupFile指令。
2、利用MySQL为Web服务器做用户验证
使用Apache的主要优势之一就是它各种功能部件的模块化。换言之,就是用户可以选择在Apache服务器中应具备或排除的功能,并由此选择安装合适的模块,这为安装Apache提供了很大的灵活性。
目前,Apache、PHP、MySQL三者是Linux下构建Web网站的非常好的组合。下面,我们就利用MySQL为Web服务器做用户验证。假设编译、安装MySQL到usr/local/mysql目录,mod_auth_mysql模块(支持使用MySQL数据库实现基本HTTP认证)编译安装完成。
编辑httpd.conf,添加LoadModulemysql_auth_modulelibexec/mod_auth_mysq1.so和AddModulemod_auth_mysq1.c,让Apache启动时加载mod_auth_mysql模块。然后进入MySQL:
mysql>creat data base auth;
mysql>use auth;
mysql>create table user(->user_name char(30) not null,
->user_password char(20) not null,
->primary key(user_name)
->);
mysql>insert into user values(‘song’,encrypt(‘2004233’));
这里2004233是口令,用encrypt函数来进行加密。最后在我们要保护的目录创建.htaccess文件,其文件内容如下:
AuthName “SecretFiles”
AuthType Basic
AuthMySQL User authuser ————mysql用户
AuthMySQL Password password ————mysql用户口令
AuthMySQLDB auth ————我们所建立的库
AuthMySQLUserTable user ————所用到的表
AuthMySQLNameField user_name
AuthMySQLPasswordField user_password
Require user song
这样,重新启动httpd后,进入该Web目录时就会弹出一个对话框,要求输入用户名和口令。这里我们所讨论的是采用MySQL模块,若采用Oracle模块也类似。
3、Digest认证
由于在使用基本HTTP认证时,口令是以UU编码的格式通过网络发送出去的,这些口令是没有加密的,所以很不安全。针对基本HTTP认证的弱点,HTTP/1.1提出了改进的用户认证和鉴权方案,称为Digest认证。与基本认证类似,Digest认证也是收发双方都知道一个密码,但是密码的传输不是明文传输,而是加密后传输。
在Digest认证过程中,网络发送的是一些基于用户输入口令和其他基本相关请求信息而生成的数值,这些数值采用MD5加密算法进行组合,最终产生的结果称为“digest”,并通过网络发送出去,然后再将它与服务器的其他消息进行组合,并同服务器储存的digest进行比较。服务器则根据digest是否匹配来确定允许或拒绝用户访问。
4、基于主机的认证
通过用户名,口令的认证只是方法之一,我们还可以用Allow和Deny指令允许和拒绝来自某个IP地址或者域名的访问。Order指令告诉Apache处理指令的顺序,以改变过滤器。这些指令能够提供对访问的控制和支持。
例如:
允许IP地址为210.42.151.198的主机访问:
Allow from 210.42.151.98
拒绝所有包含部分域名scuec.edu.cn的主机访问:
Deny from scuec.edu.cn
Order可以组合Deny和Allow指令,以保证在允许一个群体访问的同时,对其中的一些加以限制。如:
Order deny,allow
Deny from scuec.edu.cn
Allow from all
拒绝所有包含部分域名scuec.edu.cn的主机访问,但允许其他所有主机访问。
四、结束语
安全问题是一个很复杂的问题。Web安全所涉及的内容很广泛。这里通过设置Web服务器有关目录的权限和限制对Web服务器的访问来加强Web服务器安全。