httpd网页身份认证
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网页身份认证的更多相关文章
- api接口对于客户端的身份认证方式以及安全措施
转载 基于http协议的api接口对于客户端的身份认证方式以及安全措施 由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsession ...
- ASP.NET Core实现 随处可见的基本身份认证
概览 在HTTP中,基本认证(Basic access authentication,简称BA认证)是一种用来允许网页浏览器或其他客户端程序在请求资源时提供用户名和口令形式的身份凭证的一种登录验证方式 ...
- 转:细说ASP.NET Windows身份认证
转自:https://www.cnblogs.com/fish-li/archive/2012/05/07/2486840.html 细说ASP.NET Windows身份认证 阅读目录 开始 认识A ...
- 细说ASP.NET Windows身份认证
上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使用广泛,不过,如果是在 Windows Ac ...
- python的requests快速上手、高级用法和身份认证
https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...
- PHP中对用户身份认证实现两种方法
用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制. 当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...
- 使用USB Key(加密狗)实现身份认证
首先你需要去买一个加密狗设备,加密狗是外形酷似U盘的一种硬件设备! 这里我使用的坚石诚信公司的ET99产品 公司项目需要实现一个功能,就是客户使用加密狗登录, 客户不想输入任何密码之类的东西,只需要插 ...
- 类型:.net;问题:asp.net window验证;结果:细说ASP.NET Windows身份认证
细说ASP.NET Windows身份认证 阅读目录 开始 认识ASP.NET Windows身份认证 访问 Active Directory 在ASP.NET中访问Active Directory ...
- ASP.NET Core编程实现基本身份认证
概览 在HTTP中,基本认证(Basic access authentication,简称BA认证)是一种用来允许网页浏览器或其他客户端程序在请求资源时提供用户名和口令形式的身份凭证的一种登录验证方式 ...
随机推荐
- hashMap遍历方式
package Ch17; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java ...
- Personal Learning Path of Java——初识Java
初识Java 在我个人看来,Java是一门高大上的面向编程语言,这也是Java吸引我的地方.在自学Java之前,我在学校大概学过了一些C语言的知识,在学校学的那点C语言纯属是拿来打基础用的,大概了解了 ...
- java内存管理(堆、栈、方法区)
java内存管理 简介 首先我们要了解我们为什么要学习java虚拟机的内存管理,不是java的gc垃圾回收机制都帮我们释放了内存了吗?但是在写程序的过程中却也往往因为不懂内存管理而造成了一些不容易察觉 ...
- Cookie中的HttpOnly详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt377 1.什么是HttpOnly? 如果您在cookie中设置了HttpOn ...
- Java学习记录:文件的输入输出流
Java中的输入.输出流中可以用于文件的读写,拷贝. 由于文件都是由字节组成的,可以将文件中的内容以字节的方式读取出来. 输入流还可以直接转换为图片来使用.其实ImageIcon提供了方法可以直接打开 ...
- Android微信登录、分享、支付
转载需要著名出处: http://blog.csdn.net/lowprofile_coding/article/details/78004224 之前写过微信登录分享支付第一版: http://bl ...
- sublime中如何在浏览器中打开文件?
SideBarEnhancements 侧边栏增强 SideBarEnhancements本是增强侧边栏的插件,这里将教大家如何用来做sublime text 3浏览器预览插件,并可自定义浏览器预览的 ...
- 201421123059 http://www.cnblogs.com/deng201421123059/
201421123059 http://www.cnblogs.com/deng201421123059/
- mysql外键设置选项
. cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录 . set null方式 在父表上update/delete记录时,将子表上匹配记录的 ...
- 201521123075 《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. - 了解了多态就是以单一的接口操作多种类型的对象,但是对多态和继承的关系还是有点混乱. - ...