apache httpd系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html


httpd对web身份认证的支持很丰富,提供的控制也非常细致。无疑,功能丰富意味着模块多。关于完整的模块,见http://httpd.apache.org/docs/2.4/mod/ ,其中mod_authX_XXX都是和认证有关的模块。要实现最基本的帐户认证访问控制,只需几个常见的模块即可:mod_authz_core,mod_authz_user,mod_authz_host...。

1.1 htpasswd命令

htpasswd用于为指定用户生成基于网页用户身份认证的密码,由httpd-tools软件包提供。支持3种加密算法:MD5、SHA和系统上的crypt()函数,不指定算法时,默认为md5。

htpasswd [ -c ] [ -m ] [ -D ] passwdfile username
htpasswd -b [ -c ] [ -m | -d | -p | -s ] [ -D ] passwdfile username password
htpasswd -n [ -m | -d | -s | -p ] username
htpasswd -nb [ -m | -d | -s | -p ] username password
选项说明:
passwdfile:包含用户名及其密码的用户密码文件。如果使用了"-c"选项,则会创建或覆盖文件。不使用"-n"选项时必须指定passwdfile参数。
username:为指定的用户名创建密码。如果该用户记录已存在,则更新。
-c:创建用户密码文件passwdfile,如果文件已经存在则会覆盖已存在的文件。不能和"-n"一起使用。
-n:在标准输出中输出结果,而不是将其写入到用户密码文件中。该选项会忽略用户密码文件passwdfile参数。不能和"-c"选项一起使用。
-m:使用MD5加密算法。默认。
-d:使用crypt()函数计算密码,不安全。
-s:使用SHA加密算法。安全。
-P:强制不加密密码,保持明文状态,不安全。
-B:强制bcrypt加密密码,非常安全。
-D:从用户密码文件中删除指定的用户及其密码。
-b:使用批处理模式,即非交互模式,可以直接待加密的传递明文密码。
password:指定要输入的明文密码。只能在批处理模式中使用,即和"-b"一起使用。

例如:

(1).使用"-n"选项直接将结果输出到标准输出而不创建passwdfile。

[root@xuexi ~]# htpasswd -n Jim
New password:
Re-type new password:
Jim:ZKHud9tziGucY

(2).使用批处理模式直接传递密码。

[root@xuexi ~]# htpasswd -nb Jim 123456 ; htpasswd -nb Jim 123456
Jim:r.BF8RVw56BOA Jim:xXoNgOS8nN3LQ

发现密码完全是随机的。

(3).创建用户密码文件passwdfile。

[root@xuexi ~]# htpasswd -cb Bobfile Bob 123456
[root@xuexi ~]# cat Bobfile
Bob:fvUxzB3kcnDPk

(4).删除用户文件中的某用户。

[root@xuexi ~]# htpasswd -D Bobfile Bob

(5).使用sha和md5加密算法计算密码。

[root@xuexi ~]# htpasswd -mb Bobfile Bob 123456
[root@xuexi ~]# cat Bobfile
Bob:$apr1$bllkodFt$GUmeb8hXngOAschs1SBgq0
[root@xuexi ~]# htpasswd -sb Bobfile Bob 123456
[root@xuexi ~]# cat Bobfile
Bob:{SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=

1.2 身份认证类基本指令

AuthType:指定web身份认证的类型。有效值为none、basic、digest以及form。通常最基本的认证使用的是文件认证,所以通常使用basic。
AuthName:设置身份认证时的提示信息。
AuthUserFile file-path:指定web用户认证列表。由htpasswd命令生成。
AuthGroupFile file-path:指定组认证文件,文件中分组格式为"mygroup: Jim Bob Alice"。如果文件路径为相对路径,则相对于ServerRoot

基于basic类型的认证就这么几个指令,最主要的还是require指令的使用。更多的认证方法见官方手册的auth类模块。

1.3 Require指令

该指令只能放在Directory容器中,用于控制对目录的访问权限。它的主要功能是由mod_authz_core模块提供,但有些身份认证类模块也提供它额外的功能,这时它可以放在< Directory >、< Files >或< Location >容器中。

主要功能:

  • Require all granted
    无条件允许所有人访问该目录
  • Require all denied
    无条件拒绝所有人访问该目录
  • Require env env-var [env-var] ...
    只有给定的环境变量var-env已经定义才允许访问该目录
  • Require method http-method [http-method] ...
    只有给定的HTTP请求方法才允许访问该目录,如只允许GET才能访问
  • Require expr expression
    只有给定的表达式为true才允许访问该目录

身份认证类模块提供的require指令功能包括:

  • mod_authz_user为require指令提供的功能:

    • Require user userid [userid] ...:认证列表中只有指定的userid才能访问
    • Require valid-user:认证列表中的所有用户都可以访问
  • mod_authz_groupfile为require指令提供的功能:
    • Require group group1 [group2] ...:指定组内的用户都可以访问
  • 本地文件系统身份参考类:
    • Require file-owner:要求web用户名必须和请求文件的uid对应的username完全相同
    • Require file-group:要求web用户名必须为请求文件的gid组中的一员
  • mod_authz_host为require指令提供的ip和host功能:
    • Require ip 192.168.1.104 192.168.1.205
    • Require ip 10.1
    • Require ip 10 172.20 192.168.2
    • Require ip 10.1.0.0/255.255.0.0
    • Require ip 10.1.0.0/16
    • Require host www.example.org
    • Require host example.org
    • Require host .net example.edu
    • Require local

可以在require指令后紧跟not关键字,表示取反。例如"require not group group1"、"require not local"等。

还支持require条件容器,包括< RequireAll >、< RequireAny >和< RequireNone >,当require指令没有写在任何Require容器中时,它们隐式包含在一个< RequireAny >容器中。

  • < RequireAll >:其内封装的Require指令必须全都不能失败,且至少有一个成功时,该容器成功。如果其内所有指令既不成功又不失败,则该容器中立。其余所有情况都会导致该容器失败。
  • < RequireAny >:其内封装的Require指令只要有一个成功,该容器就成功。如果其内所有指令既不成功又不失败,则该容器中立。其余所有情况(即全部失败时)都会导致该容器失败。
  • < RequireNone >:其内封装的Require指令只要有一个成功时该容器就失败,否则就中立。

1.4 web身份认证示例

以最常见的Basic认证方式为例。支持基于用户的认证和基于组的认证。

1.4.1 基于用户的认证

先创建一个web用户及其密码列表文件。其内有4个用户:Jim、Bob、Alice和Tom。

[root@xuexi ~]# htpasswd -cb /usr/local/apache/a_com.pass Jim 123456
[root@xuexi ~]# htpasswd -b /usr/local/apache/a_com.pass Bob 123456
[root@xuexi ~]# htpasswd -b /usr/local/apache/a_com.pass Alice 123456
[root@xuexi ~]# htpasswd -b /usr/local/apache/a_com.pass Tom 123456

修改httpd配置文件,假设只有www.a.com中的a.com目录才需要认证且只有Jim和Bob可以认证,而其他目录以及www.b.com不需要认证,其他用户认证不通过。

<VirtualHost 192.168.100.14:80>
ServerName www.a.com
DocumentRoot /usr/local/apache/htdocs/a.com
<Directory /usr/local/apache/htdocs/a.com>
AllowOverride Authconfig
AuthType Basic
AuthName "please enter your name & passwd"
AuthUserFile a_com.pass
Require user Jim Bob
</Directory>
</VirtualHost> <VirtualHost 192.168.100.14:80>
ServerName www.b.com
DocumentRoot /usr/local/apache/htdocs/b.com
</VirtualHost>

此处AuthUserFile使用的相对路径,所以该文件必须放在ServerRoot(我的测试环境ServerRoot为/usr/local/apache)下。且Require user行可以替换为"Require valid-user"表示a_com.pass中的所有用户都允许认证。

然后重启httpd,并修改客户端hosts文件。

192.168.100.14 www.a.com www.b.com

再测试访问。

1.4.2 基于组的认证

基于组的认证只需创建一个组文件,文件中包含的是组名和组中用户成员。

例如,将Tom和Alice加入到allow组,使它们也可以访问a.com目录。

[root@xuexi ~]# echo 'allow:Tom Alice' >/usr/local/apache/auth_group

修改配置文件,例如:

<VirtualHost 192.168.100.14:80>
ServerName www.a.com
DocumentRoot /usr/local/apache/htdocs/a.com
<Directory /usr/local/apache/htdocs/a.com>
AllowOverride Authconfig
AuthType Basic
AuthName "please enter your name & passwd"
AuthUserFile a_com.pass
AuthGroupFile auth_group
Require user Jim Bob
Require group allow
</Directory>
</VirtualHost> <VirtualHost 192.168.100.14:80>
ServerName www.b.com
DocumentRoot /usr/local/apache/htdocs/b.com
</VirtualHost>

再重启进行测试。

httpd网页身份认证的更多相关文章

  1. api接口对于客户端的身份认证方式以及安全措施

    转载 基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsession ...

  2. ASP.NET Core实现 随处可见的基本身份认证

    概览 在HTTP中,基本认证(Basic access authentication,简称BA认证)是一种用来允许网页浏览器或其他客户端程序在请求资源时提供用户名和口令形式的身份凭证的一种登录验证方式 ...

  3. 转:细说ASP.NET Windows身份认证

    转自:https://www.cnblogs.com/fish-li/archive/2012/05/07/2486840.html 细说ASP.NET Windows身份认证 阅读目录 开始 认识A ...

  4. 细说ASP.NET Windows身份认证

    上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使用广泛,不过,如果是在 Windows Ac ...

  5. python的requests快速上手、高级用法和身份认证

    https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...

  6. PHP中对用户身份认证实现两种方法

    用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制.     当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...

  7. 使用USB Key(加密狗)实现身份认证

    首先你需要去买一个加密狗设备,加密狗是外形酷似U盘的一种硬件设备! 这里我使用的坚石诚信公司的ET99产品 公司项目需要实现一个功能,就是客户使用加密狗登录, 客户不想输入任何密码之类的东西,只需要插 ...

  8. 类型:.net;问题:asp.net window验证;结果:细说ASP.NET Windows身份认证

    细说ASP.NET Windows身份认证 阅读目录 开始 认识ASP.NET Windows身份认证 访问 Active Directory 在ASP.NET中访问Active Directory ...

  9. ASP.NET Core编程实现基本身份认证

    概览 在HTTP中,基本认证(Basic access authentication,简称BA认证)是一种用来允许网页浏览器或其他客户端程序在请求资源时提供用户名和口令形式的身份凭证的一种登录验证方式 ...

随机推荐

  1. 分享一个 jmeter ant的build.xml

    <?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-t ...

  2. JSON取值(key是中文或者数字)方式详解

    JSON取值(key是中文或者数字)方式详解 先准备一个json对象用于演示 var json = {'name':'zhangsan', '年龄':23, 404:'你可能迷路了'}; 使用JS中w ...

  3. JS常用方法总结

    1.javascript删除元素节点 IE中有这样一个方法:removeNode(),这个方法在IE下是好使的,但是在Firefox等标准浏览器中就会报错了 removeNode is not def ...

  4. Postman几种常用方式

    Postman几种常用方式 1.get请求直接拼URL形式 对于http接口,有get和post两种请求方式,当接口说明中未明确post中入参必须是json串时,均可用url方式请求 参数既可以写到U ...

  5. Bootstrap框架的了解和使用(一)

      前  言 Bootstrap 什么是 Bootstrap?Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JavaScrip ...

  6. 201521123079 《Java程序设计》第1周学习总结

    1. 本周学习总结 了解学习了JAVA的开发环境的基础内容以及JDK,JRE等,学会用eclipse编写简单的代码 2. 书面作业 Q1.为什么java程序可以跨平台运行?执行java程序的步骤是什么 ...

  7. 201521123098 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1. finally 题目4-2 1.1 截图你的提交结果( ...

  8. 201521123019 《Java程序设计》第12周学习总结

    1. 本章学习总结 2. 书面作业 Q1.字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 1.1 生成的三个学生对象,使用PrintWriter的printl ...

  9. java课程设计-猜数游戏

    1. 团队名称.团队成员介绍 团队名称:breeze 团队成员 组长:网络1514张朝玮 201521123106 组员:网络1513侯帅军 201521123092 2. 项目git地址 https ...

  10. JAVA课程设计-学生信息管理系统(个人博客)

    1. 团队课程设计博客链接 http://www.cnblogs.com/Min21/p/7064093.html 2.个人负责模块或任务说明 负责person类的编写,建立person对象, 完成M ...