Apache 目录访问控制的两种验证方式

[ 作者:笑傲江湖 发布于:2011年-6月-15日 23:11 星期三  分类:百 宝 箱 ]


  WEB环境:Apache2.2.4+PHP5.2.4+Mysql5.0.41 / Windows Server 2003
  企业内部网站现有个需求,也允许在外部可以访问,不过需要验证,企业内网用户直接访问,无需验证。于是满世界Google之,经过不懈的努力和Google不断的对我说链接被Reset,总算是在摸索中搞定。
  下面是两种验证方式,基本验证方式比较直接,简单一点,需要手工用Apache的工具生成用户名和密码,如果是临时需要验证的话,这种方式不错。另一种是Mysql数据库方式,这种验证方式可以用数据库来存储用户名和密码,便于维护。当然也可以使用网站的用户系统来作为验证基础,或者其他用户系统,不过需要其他的数据库连接模块。毕竟使用Mysql数据库的网站系统不少,这对俺们来说无疑是最方便的了。虽然俺折腾好了,也得记录一下,以防人老忘性大啊,记下来才是王道。
  基本验证方式:使用Apache自带的基础验证,用户和密码由Apache自带的工具生成验证文件,通过互联网访问企业内部网站时,即可使用用户名和密码验证后访问。需要使用的模块是:mod_auth_basic.so 这个模块一般来说Apache都自带了。
httpd.conf文件里配置部分:
#模块加载:
LoadModule auth_basic_module modules/mod_auth_basic.so
#需要验证的目录设置:
<Directory "D:/Webroot/Internal">
#上面双引号内修改成你需要验证的路径。
Options Indexes FollowSymLinks
AllowOverride AuthConfig
#路径访问需要验证。如果是None,那就所有人都能访问了。
order deny,allow
allow from 127.0.0.1
allow from 192.168.1.0/24
#允许直接访问无需验证的IP地址,可以是单个,也可以是地址段,也可以是域名。
Deny from all
#除了allow语句里允许的地址,其他访问均需要验证。
</Directory>

.htaccess文件内容:
authtype basic
#验证类型。
authname "企业内网访问验证"
#验证时输入用户名和密码的对话框显示名称。
authuserfile d:/Auth/Authuser/authuser
#基础方式验证时使用的验证文件,包含用户名和密码。
require valid-user
#用户验证需要有效用户。
satisfy any
#验证对象:all 所有用户都要验证,any 只验证外网用户。

  其中的authuserfile需要使用apache自带的工具生成,在Bin目录下,有个htpasswd.exe,在DOS命令行窗口里输入htpasswd /?可以查看使用帮助,如果还看不懂的话请自行Google之,有很多使用实例。要注意的是这个验证用的文件路劲,最好是放到你的WEB根目录之外的地方,确保安全。

  Mysql方式验证:这种验证方式,可以结合现有系统用户的数据来做,比如您的企业内部网站本身带有用户,且使用的是Mysql数据库,这样可以使用网站现有用户来进行验证,企业员工在企业外部,通过互联网访问企业内部网站时,就可以使用已有的用户名和密码来进行访问。需要使用的模块是:mod_auth_mysql.so 这个模块让我一顿好找啊,找了很多个没有一个可以加载使用的,有的还只是提供源代码,需要自己编译,而且网上大部分都是在Linux下编译后使用,愁啊。功夫不负有心人,总算在一个老外的论坛里下载了一个xampp的综合大包,从Apache里找出了这个能用的模块文件。如有需要请邮件联系我。

httpd.conf文件里配置部分:
#模块加载:
LoadModule mysql_auth_module modules/mod_auth_mysql.so

#需要验证的目录设置:
<Directory "D:/Webroot/Internal">
#上面双引号内修改成你需要验证的路径。
Options Indexes FollowSymLinks
AllowOverride AuthConfig
#路径访问需要验证。如果是None,那就所有人都能访问了。
order deny,allow
allow from 127.0.0.1
allow from 192.168.1.0/24
#允许直接访问无需验证的IP地址,可以是单个,也可以是地址段,也可以是域名。
Deny from all
#除了allow语句里允许的地址,其他访问均需要验证。
</Directory>


.htaccess文件内容:

AuthName "企业内网访问验证"
#验证时输入用户名和密码的对话框显示名称。
AuthType Basic
#验证类型。
Satisfy any
#验证对象:all 所有用户都要验证,any 只验证外网用户。
#AuthUserFile /dev/null 这一行是在Linux系统下使用的
AuthBasicAuthoritative off
#关闭mod_auth_basic.so模块的验证。
AuthMySQLEnable On
#开启Mysql
AuthMySQLHost localhost
#Mysql数据库主机地址,可以是IP。
AuthMySQLPort 3306
#数据库访问端口,默认端口的话这一行可有可无。
#AuthMySQLSocket /tmp/mysql.sock 这一行是在Linux系统下使用的
AuthMySQLUser authuser
#访问用户验证所需数据库的用户名。
AuthMySQLPassword authpass
#访问用户验证所需数据库的密码。
AuthMySQLDB authdata
#用户验证用的数据库名。
AuthMySQLUserTable authtable
#数据库中用于验证的表名称。
#AuthMySQLUserCondition 这个没研究,不知道啥意思。
AuthMySQLNameField username
#数据表中用户名字段。
AuthMySQLPasswordField password
#数据表中密码字段。
AuthMySQLNoPasswd Off
#是否需要密码,为On时只验证用户名。
AuthMySQLPwEncryption md5
#密码加密方式:none | crypt | scrambled | md5 | aes | sha1
AuthMySQLAuthoritative On
#这个不懂。
AuthMySQLSaltField <>
#这个也不懂。
#下面三行是用户组相关的设置
#AuthMySQLGroupTable usertable
#AuthMySQLGroupCondition
#AuthMySQLGroupField username

#AuthMySQLKeepAlive Off
#数据库连接保持。
#AuthMySQLCharacterSet
#数据库字符集设置。

require valid-user
#用户验证需要有效用户。
[Edit on 2011-6-15 15:21:07 By 笑傲江湖]

标签: apache 配置 访问控制 验证

评论0 引用0 浏览5883

说点什么:

正文内容:

 




图片博文
2013 元旦