apache作为一款广泛使用的web服务器软件,由于其优良的性能,以及良好的安全性,
赢得了广大用户的青睐。关于如何配置apache方面的文章已经很多了,我主要是介绍一下
apache的配置中安全方面的内容,由于本人知识水平有限,难处出现疏漏和错误,望指教
。
首先介绍一下AAA认证。AAA指的是认证(Authentication),授权(Authorization)
,和访问控制(Access control)。认证是辨别某人是否真的是其声称的身份,这通常包
括用户名和密码,但是也可以采用其他的方式,比如智能卡,虹膜扫描,语音识别或是指
纹。认证就相当于向********自己的身份证。授权指的是在通过认证之后,判定用户是否
允许拥有某种资源。这通常是看用户是否是某一个组的成员,是否这个用户被赋予了管理
员的权限(如SetUID)。授权就相当于在培训时对学生进行点名或是在车站检票。访问控
制则是一种web资源进行控制性访问的方法。访问控制可以基于很多的方面,如客户端的I
P地址,时间,浏览器的种类(这一点真的很有用,我遇到过一个站点,只能使用realpla
yer进行在线欣赏,就是不能下载,研究到最后的主要原因是HTTP_USER_AGENT必须是real
player才能下载,而我们的浏览器一般是Mozilla/4.0或是MSIE,所以不能下载),甚至可
以依据月亮的圆缺进行访问控制。访问控制就相当于定时关门或是只有穿西装打领带才能
进餐厅一样。由于这三种技术在实际应用中关系如此密切,我们很难将其分开。在大多数
的应用中,认证和授权是必不可少的。
apache的基本认证
正如名字所示,基本认证提供一种最简单的方式来进行认证,也是很长一段时间以来
人们所使用的方式。尽管这样,其他方式的认证正在逐步取代基本认证,这将在稍后进行
介绍。让我们来看看基本人正是如何工作的。当某一资源一基本认证的方式被保护时,ap
ache发送一个包含请求响应的401 Authentiction Request的报头(header)给客户端,用
以确定客户端的浏览器是否支持基本验证。当客户端的浏览器收到一个401的http头部时,
如果浏览器支持基本认证,将会要求用户输入用户名和密码来提交到服务器,从而进行身
份鉴别。比如在IE(Internet Explorer)或是Netcape收到一个401头部时,将会弹出一个对
话框来要求输入用户名和密码。如果用户名在允许访问的列表中并且密码正确,那么服务
器将客户请求的资源发送到客户端。因为http协议是无国界的,所以每一个请求都以相同
的方式被处理,哪怕是来自同一个客户端的请求。也就是说,用户在先后访问同一资源时
,要经过多次认证。幸运的是,这里面的细节有浏览器来处理,我们只需要在每一个进程
中输入一次用户名和密码,要是选择了“保存密码”,那么以后访问同一资源时尽管不是
同一进程,仍然不需要输入密码,但是我不推荐这样做,因为这些密码文件可能被破解而泄密。随着401的响应,一些其他的信息会随着返回到客户端。特殊情
况下,服务器会发送保护的域的名称到客户端,客户端在接收到输入的用户名和密码之后
会缓存这些信息与访问的域在一起,要是同一个域中其他的资源被访问,浏览器便将缓存
的用户名和密码发送到服务器,通常浏览器只在一个进程中缓存用户名和密码。
接下来介绍一下基本认证在apache上面是如何实现的,我们两步完成:首先,创建一
个密码文档。然后配置apache来使用这个密码文档,第三步是可选的:创建组文档。我们
一步一步来配置。客户端提交的用户名和密码就是与密码文档进行比较,我们需要为密码
文档添加允许访问的用户的用户名和密码。由于这个文档包含有敏感的信息,所以应该将
其放置在一个安全的目录中,并且设定它的访问权限,并且不要以明文的形式存放密码。
我们使用与apache一起发布的htpasswd组件来创建密码文档,htpasswd位于apache的安装
目录中,如progra~1apache~1apacheinhtpasswd(在windows中)或是/usr/local/a
pache/bin/htpasswd(Linux/Unix)。以下介绍在Linux下面的操作,在widnows下面的操作
类似。输入
htpasswd -c /usr/local/apache/passwd/passwords username
htpasswd将会要求输入密码,然后是要求确定密码
# htpasswd -c /usr/local/apache/passwd/passwords httpuser
New password: mypassword
Re-type new password: mypassword
Adding password for user httpuser
这将创建一个包含用户名为httpuser密码为mypassword的用户的密码文档。如果htpasswd
没有在你的当前目录下,你需要输入完整的路径来运行htpasswd。至于参数,这里不详细
介绍了。说说-c,它表示新建一个密码文档,要是想一个已经存在的密码文档添加用户,
只需要省略-c这个参数就可以了。在Windows和NetWare中,密码默认情况下一MD5形式被加
密,在其他系统中使用crypt来加密。这里要特别小心,要是在你向一个已经存在的密码文
档中增加用户时使用了-c,那么将创建一个新的文档,里面只有你刚才添加的那一个用户
。对于生成的密码文档,我们最好使用chmod来修改其权限为640。
生成了密码文档之后我们接着来配置apache来使密码文档生效,注意,修改httpd.co
nf以前请先备份,切记切记!!!这将需要修改以下参数
AuthType 所使用的认证方式,修改为 Basic
AuthName 认证的域或名字
AuthUserFile 密码文档的位置
AuthGroupFile 组文档的位置
Require 授权登陆所必须满足的请求
这些参数可以被存为文件.htaccess放在需要保护目录下,也可以在httpd.conf中的ctory>进行配置,看看下面这个例子
AuthType Basic
AuthName "一个简单的测试"
AuthUserFile /usr/local/apache/passwd/passwords
Require user httpuser <------------中文浏览器中需要修改为Require "用户名" htt
puser才能工作
Require valid-user httpuser
当客户访问到需要认证的资源时,客户端浏览器会弹出一个对话框,“领域“的名字就是
“一个简单的测试”。如果我们在httpd.conf中进行修改,则需要重新启动apache才能使
修改生效。如果在.htaccess中修改,则可以立即生效而不需要重新启动apache.然后我们
说说可选的组文章的配置。大多数时候,你可能希望不止一个用户访问资源,要是一个一
个的添加Require user就太麻烦了,我们可以定义访问资源的一组用户,并且可以对该组
进行管理如添加或删除组成员而无需修改其他的apache配置文档,也不需要重新启动apac
he服务器。一个组需要有一个与组内成员相关联的名字,组文件需要存放在与密码文档相
同的目录下。组文档的格式相当的简单,只需要在第一行上给出组的名字,接下来一个冒
号(:),然后是组成员,组成员之间用空格分隔。如:
authors: yqy jy gl
一旦组文件被创立,你就可以“要求”具体某一个组的成员来获得请求的资源,我们需要
修改AuthGroupFile参数
AuthType Basic
AuthName "一个简单的测试"
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group authors
这时,当服务器接收到一个来自客户端提交的用户名时,便在制定的组中寻找匹配的用户
名,要是找到便在passwords中寻找相应的密码,如果与客户端提交的密码匹配,则返回客
户端请求的资源。如果前面的步骤有一步不满足,服务器都将拒绝请求。
基本认证的不足之处在于客户端提交的用户名和密码都是以明文的形式在网络上传输
,并且每一次请求受保护的资源都要发送用户名和密码,所以这很容易被嗅探器监听。
ykzj(土匪), 信区: hacker
标 题: apache的安全配置(上)
发信站: 西安交大思源bbs站 (Sat Feb 15 04:55:36 2003)
精典收藏:SQL Server 2008 集群+SAN集成方案:
精典收藏:中小型IT机房UPS不间断电力解决方案:
阅读(2443) | 评论(0) | 转发(0) |