Apache服务器实现用户验证

apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证。
通常分为以下三步
1、在apache的配置文件httpd.conf中声明要进行验证的目录
2、在要进行验证的目录中创建.htaccess文件,在此文件中指明用于验证的文件存放的位置
3、根据.htaccess指明的位置,用apache自带的htpasswd命令创建用于验证的文件
步骤说明:
假设要对/home/ddd这个目录进行访问控制。(这个目录不在APACHE的主目录中,因此要用alias 添加为虚拟目录)
1、在apache的配置文件httpd.conf中声明要进行验证的目录
编辑httpd.conf
LoadModule auth_module  modules/mod_auth.so #需要加载此模块进行认证
Alias /test "/home/ddd" #添加为虚拟目录
<Directory "/home/ddd">
Options Indexes MultiViews
AllowOverride All #允许用.htaccess文件中指定的验证文件进行身份验证
Order allow,deny
Allow from all
</Directory>
#AllowOverride all  表示进行身份验证 这是关键的设置
此外,也可用AllowOverride AuthConfig
实例:
<VirtualHost *>
    ServerName test.abc.com
    ServerAlias abc.com 123.123.123.123
    DocumentRoot /data/ddd/
        <Directory "/home/ddd/COLumn/">
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All
        </Directory>
    ErrorLog /error.log
</VirtualHost>
2、在要进行验证的目录中创建.htaccess文件,在此文件中指明用于验证的文件存放的位置
在/home/ddd下创建.htaccess文件
vi /home/ddd/.htaccess,内容如下:
AuthName "请输入用户名及口令"
AuthType Basic
AuthUserFile /home/.htpasswd
require valid-user
#AuthName 描述,出现在验证对话框标题栏中
#AuthUserFile /home/.htpasswd (指定验证文件存放于/home中,文件名为.htpasswd,此文件具有隐含属性,其中包括允许访问的用户名及密码
#require valid-user  使用验证文件中的有效用户进行验证
也可使用 require user <用户> 来指定特定用户进行验证
#密码文件推荐取名为.htpasswd,因为apache默认系统对“.ht”开头的文件默认不允许外部读取,安全系数会高一些。
3、根据.htaccess指明的位置,用apache自带的htpasswd命令创建用于验证的文件
由于已经在第2步中指定验证文件为/home/.htpasswd文件,所以下面创建这个文件
htpasswd -c /home/.htpasswd jp  #创建.htpasswd文件,并添加用户jp,会要求输入口令
htpasswd  /home/.htpasswd test  #.htpasswd文件中添加第二个用户:test)
也可以不通过交互方式,直接在命令行,将口令添加到.htpasswd文件中
htpasswd -bc /home/.htpasswd jp 111 (创建.htpasswd文件,并添加用户jp,密码为111)
htpasswd -b /home/.htpasswd test 222 (.htpasswd文件中添加第二个用户:test 密码为222)
#第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数,因为已经有.htpasswd文件,就不用再创建了。-b表示从命令行直接获取参数值,添加到验证文件.htpasswd中
如果想修改密码,可以用如下命令:
htpasswd -m .htpasswd jp
对存放于.htpasswd文件中的用户jp进行口令更改

让/home/ddd目录和/home/.htpasswd的所有者是名字为apache的用户和apache的组。同样,允许名字为apache的用户和组对此目录的权限为可读和可执行.
4、测试
重启apache服务,然后访问 http://你的网站地址/test 如果顺利的话,应该能看到一个用户验证的弹出窗口,只要填入第3步创建的用户名和密码就行。 如果以后还要添加其它认证用户,可用
htpasswd  /home/.htpasswd <用户名>   采用交互式添加即可。
或用htpasswd -b /home/.htpasswd <用户名> <口令> 直接从命令行读取参数进行添加
注:
  为了服务器的性能,一般不推荐使用AllowOverrideAuthConfig或者AllowOverrideALL,因为这会使服务器会不断的去寻找.htaccess,从而影响服务器的效能,一般我们把一些后台管理界面或者其他特殊目录可能需要加验证这个需求。
  由于采用了Basic认证的方法,每次向服务器请求甚至刷新一个受保护的页面或图片时都必须校验用户名和密码,为此,必须打开密码文件并逐行搜索用户名,因此,服务器响应速度会受一些影响,受影响的程度与密码文件的大小成正比。
  所以,对密码文件中的用户总数存在一个实际上的上限,此上限取决于特定的服务器机器的性能,但是一般有几百个用户就会对响应速度有非常明显的影响,在这种情况下,可以考虑用其他认证方法。
实例:限制某些用户访问特定文件

 

  可以对目录进行约束,要限制某些用户对某个特定文件的访问可以使用,比如:不允许非domain.com域内的用户对/prices/internal.html进行访问,可以用如下的设置:

 

 

<Location /prices/internal.html>

order deny,allow

deny from all

allow from .domain.com

</Location>

 

  如果你要授于相应权限的机器没有公开的域名,请在你的/etc/hosts文件中,将其IP地址映射到某个指定的名称,然后在Location中对其进行设置,否则该选项是不起作用的。

实例:只接受来自特定链接的访问

  例如,只让所有来自http://www.sina.com.cn/* 的链接的用户进入此目录,由其它链接来的访客都不得进入; " *"表示此网站底下所有的链接。其中的 http://www.sina.com.cn/*也可以是:http://202.106.184.200/* 或是指定文件 http://www.sina.com.cn/news.html

.htaccess文件的内容如下:

AuthUserFile /dev/null

AuthGroupFile /dev/null

AuthName ExampleAllowFromSpecificURL

AuthType Basic

<Limit GET>

order deny,allow

deny from all

referer allow from http://www.sina.com.cn/*

</Limit>

上一篇: IP转数字,数字转IP   下一篇: PHP脚本运行时间

提交疑问

回顶部