本文目录: 1.1 htpasswd命令 1.2 身份认证类基本指令 1.3 Require指令 1.4 web身份认证示例 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@linuxidc ~]# htpasswd -n Jim
New password:
Re-type new password:
Jim:ZKHud9tziGucY(2).使用批处理模式直接传递密码。 [root@linuxidc ~]# htpasswd -nb Jim 123456 ; htpasswd -nb Jim 123456
Jim:r.BF8RVw56BOA
Jim:xXoNgOS8nN3LQ发现密码完全是随机的。 (3).创建用户密码文件passwdfile。 [root@linuxidc ~]# htpasswd -cb Bobfile Bob 123456
[root@linuxidc ~]# cat Bobfile
Bob:fvUxzB3kcnDPk(4).删除用户文件中的某用户。 [root@linuxidc ~]# htpasswd -D Bobfile Bob(5).使用sha和md5加密算法计算密码。 [root@linuxidc ~]# htpasswd -mb Bobfile Bob 123456
[root@linuxidc ~]# cat Bobfile
Bob:$apr1$bllkodFt$GUmeb8hXngOAschs1SBgq0
[root@linuxidc ~]# htpasswd -sb Bobfile Bob 123456
[root@linuxidc ~]# cat Bobfile
Bob:{SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=1.2 身份认证类基本指令
基于basic类型的认证就这么几个指令,最主要的还是require指令的使用。更多的认证方法见官方手册的auth类模块。 1.3 Require指令该指令只能放在Directory容器中,用于控制对目录的访问权限。它的主要功能是由mod_authz_core模块提供,但有些身份认证类模块也提供它额外的功能,这时它可以放在< Directory >、< Files >或< Location >容器中。 主要功能:
身份认证类模块提供的require指令功能包括:
可以在require指令后紧跟not关键字,表示取反。例如"require not group group1"、"require not local"等。 还支持require条件容器,包括< RequireAll >、< RequireAny >和< RequireNone >,当require指令没有写在任何Require容器中时,它们隐式包含在一个< RequireAny >容器中。
1.4 web身份认证示例以最常见的Basic认证方式为例。支持基于用户的认证和基于组的认证。 1.4.1 基于用户的认证先创建一个web用户及其密码列表文件。其内有4个用户:Jim、Bob、Alice和Tom。 [root@linuxidc ~]# htpasswd -cb /usr/local/apache/a_com.pass Jim 123456
[root@linuxidc ~]# htpasswd -b /usr/local/apache/a_com.pass Bob 123456
[root@linuxidc ~]# htpasswd -b /usr/local/apache/a_com.pass Alice 123456
[root@linuxidc ~]# 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@linuxidc ~]# 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>再重启进行测试。 本文永久更新链接地址 : http://www.linuxidc.com/Linux/2017-10/147309.htm |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|