由于网站的需要,需要有一个目录的内容只能供特定的用户访问,因此浏览了一下apache的文档说明(http://httpd.apache.org/docs/howto/auth.html#intro),特此记录下来,同时也希望能够帮助英文不好的同仁们。另外,我还参考了一些google搜索的内容,感觉国内的介绍大都出自该文档,但过程和其中的一些概念似乎介绍的不太清楚,因此在这里略作补充。
1. AAA的概念
AAA可是安全界的老概念了(Authentication, Authorization, Access Control),也即认证、授权以及访问控制。
认证,是指证明你自己的身份,在计算机中就是出示用户名和密码。这是最简单的,还有比如智能卡,指纹验证之类的。总之,要证明那个人是你。
授权,是指对认证用户的权力进行设定。一般是根据一个配置文件,来对用户的权力进行设定。
访问控制,则是根据用户权力,判断是否可以访问特定资源。
*这三个概念,经常在一起使用,没有明确界线。
2. Basic Authentication的原理
这个简单,你发送一个HTTP GET请求,服务器发现你请求的文件需要访问控制。OK,它回应你一个消息(401号消息),告诉你需要提供你的身份信息。这时,浏览器弹出需要密码的窗口,输入后,浏览器重新发送GET请求,同时附带认证信息。如果正确,则请求被执行,反之,请求失败。
3. Apache Server中服务器认证的使用
当然,php、jsp页面中作认证也是可以的。我们这里只讨论劳动量最小的:) 即使用apache server的特性的方法。
1) 制作passwd文件
使用htpasswd命令(在apache安装目录的bin中),可以生成passwd文件。passwd文件的每一项有两部分组成。
<用户名>:<加密密码>
加密密码使用加密算法生成,htpasswd工具可以代劳帮助我们计算加密密码。最简单的命令行是
htpasswd -c mypasswd yangsun
mypasswd是密码文件的名字,yangsun则是用户名了,hoho
制作完passwd文件,把它放在一个妥善的位置,千万别放在网页服务器可以通过http得到的文件夹中(当然,通过特殊设置可以放在文件夹中,而不能被下载,这个以后分解
)。否则,你的加密密码一定会被破解的,要不linux干吗要shadow它的passwd文件呢?2) 在你需要保护的文件夹下,放置.htaccess文件
就如这个
AuthType Basic
AuthName "By Invitation Only"
AuthUserFile /usr/local/apache/passwd/passwords
Require user yangsun
其中 AuthUserFile指定了刚才我们创建的密码文件的完全路径。而Require User则指明谁可以访问该目录。
通过这样的设置,就完成了Basic Authentication的密码保护了。不过,发送密码可都是明文的,会用tcpdump的都可以把这个密码拦下来,因此重要文件还是用其他方式保护吧。比如MD5方式,具体请参见apache的文档。