阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

httpd网页身份认证

107次阅读
没有评论

共计 4925 个字符,预计需要花费 13 分钟才能阅读完成。

本文目录:
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 身份认证类基本指令

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@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

再测试访问。

httpd 网页身份认证

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

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计4925字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中