dvccxhk 2010-08-06
环境:Ubuntu Linux
这种认证方式其实相当简单,当WWW浏览器请求经此认证模式保护的URL 时,将会出现一个对话框,要求用户键入用户名和口令。用户输入后,传给WWW服务器,WWW服务器验证它的正确性,如果正确,返回页面,否则返回401错误。要说明的一点是,这种认证模式是基本的,并不能用于安全性要求极高的场合。
Apache 中有许多模块可以支持这种认证方式,下面我们就介绍一下最基本、最标准的mod_auth模块。正如前面提到的一样,mod_auth模块使用存储在文本文件中的用户名、组名和口令来实现认证。这种方法非常适合处理少量用户,它能工作得很好。如果你需要对大量的用户,如数以千计的用户做认证时,这种方法的性能将急剧下降到不可忍受,所以当这种情况下,就需要考虑使用mod_dbm模块或mod_mysql模块来获得更好的性能。
实战:需要用户名和口令的访问控制
1、若是开启虚拟主机,则将/etc/apache2/site-enabled/000-default中的<Direct></Direct>块全部注释掉(里面有访问规则,影响配置结果)。没开启虚拟主机的则将/etc/apache2/apache.conf中的Include /etc/apache2/site-enabled/ 注释掉。
2、在httpd.conf(一般为空)中,填入ServerName xxxxx #(xxxxx为你的服务器名称)
DocumentRoot /xxx/xxx #(网站根目录的路径)
AccessFileName .htaccess #(认证的配置文件)
3、建立.htpasswd文档(用于保存用户名和密码)touch /xxx/xxx/.htpasswd
用htpasswd命令建立用户名、密码
htpasswd -c /xxx/xxx/.htpasswd yyy (yyy为用户名)
接着输入密码,然后确认一遍。添加一个用户完成。如果还有其他用户,则继续用htpasswd命令(注意不加-c,加了则将覆盖前面添加内容)
4、在需要认证的网站根目录下建立.htaccess文档(要和httpd.conf中的DocumentRoot保持一致)
在.htaccess中填入一下内容
AuthName xxxxxxx (在弹出对话框中显示的标题名称)
AuthType Basic
AuthUserFile /xxx/xxx/.htpasswd(路径为.htpasswd的绝对路径)
require user xxx (xxx为用户名)
如果有不止一个的用户的话,则在第三步再建立个.htgroup文档 并在其中写入ggg:yyy zzz www(ggg为组名;yyy、zzz、www为用户名,要在.htpasswd中有对应的用户名和密码)
在第四步中添加 AuthGroupFile /xxx/xxx/.htgroup
require group ggg (ggg为.htgroup中的组名)
5、配置完毕,重启apache /etc/init.d/apache2 restart