httpd-2.4 - 基于用户的访问控制(AuthType Basic)

部署httpd服务时,有些路径下的内容不希望所有用户都能访问,只有提供用户名和密码才能正常访问,此时就会用到基于用户的访问控制。

前提

vmware的CentOS 7虚拟主机地址为192.168.43.78;
httpd的基本配置情况:

DocumentRoot “/data/www/html”
ServerName 192.168.43.78
Listen 80

要求:
httpd设置一个Alias,名称为/backgrounds/,指向/usr/share/backgrounds/目录;
现在只让指定用户通过“用户名+密码”登录的方式访问backgrounds中的文件。

配置步骤

目前需要做的是将/usr/share/backgrounds/目录定义为安全域,基于Basic方式认证。

1. 定义安全域

在/etc/httpd/conf.d/目录下新建配置文件basic_test.conf,添加如下配置:

Alias /backgrounds/ "/usr/share/backgrounds/"

        Options Indexes` #允许访问索引
        AllowOverride None
        AuthType Basic  #基于Basic认证
        AuthName "Test BasicAuthType To Directory backgrounds/"
        AuthUserFile "/etc/httpd/conf.d/.basic_test.user"  #指定账号文件(最好设为隐藏文件)
        Require valid-user  #指定允许登录的用户,valid-user表示账号文件内的所有用户

2. 制作账号密码的存储文件

使用htpasswd命令(httpd自带的账号密码创建工具)创建,并对用户进行管理。
这里创建三个用户:user_a,user_b,user_c,密码分别为a123,b123,c123。

首次创建使用-c选项新建存储文件:
# htpasswd -c /etc/httpd/conf.d/.basic_test.user user_a
输入用户密码:
New password: 
确认密码:
Re-type new password: 
Adding password for user user_a

也可以使用-b选项直接给出密码串,-m选项使用md5加密:
(之后添加用户不能使用-c选项,否则会覆盖之前的用户)

# htpasswd -b -m /etc/httpd/conf.d/.basic_test.user user_b b123
Adding password for user user_b
# htpasswd -b -m /etc/httpd/conf.d/.basic_test.user user_c c123
Adding password for user user_c

三个用户创建完成:

# cat .basic_test.user 
user_a:$apr1$RYCy74cb$hOmC0GVSEBBeD0Ln.CUo51
user_b:$apr1$5fA4WNKL$cA740WsK4c8hOKOSvbtXP/
user_c:$apr1$BdRPl/Rz$/2.a1naVcq1.oT3hDVvwu1

3. 验证配置结果

检查配置文件语法,重启服务:

# httpd -t
Syntax OK
# systemctl restart httpd.service

浏览器访问http://192.168.43.78/backgrounds/,要求输入用户名和密码:

httpd-2.4_AuthType Basic_test_登录界面.JPG

输入任意一个用户,访问backgrounds目录:


httpd-2.4_AuthType Basic_test_访问backgrounds目录索引.JPG

4. 只允许账号文件中的个别用户登录访问

上边的配置方式是,账号文件中存储的所有用户都可以通过登录来访问指定路径,也可以限制只有特定用户才能登录访问。
有两种方式:
(1) 允许访问的用户数量少的情况下,可以逐个指定:

比如,将Require valid-user改为:
Require user user_a user_b
表示只允许user_a和user_b登录访问

(2) 允许访问的用户数量多时,可以通过组来指定:

创建组文件.basic_test.group,在其中指定PermitUsers组中的用户为user_a和user_b:
# vim /etc/httpd/conf.d/.basic_test.group
PermitUsers: user_a user_b
在配置文件中指定所使用的组文件和允许登录的组:

        Options Indexes
        AllowOverride None
        AuthType Basic
        AuthName "Test BasicAuthType To Directory backgrounds/"
        AuthUserFile "/etc/httpd/conf.d/.basic_test.user"
        AuthGroupFile "/etc/httpd/conf.d/.basic_test.group"
        Require group PermitUsers

此时,就只有user_a和user_b可以通过登录访问,user_c不可以。

通过这样的配置,就可以快速建立一个基于安全域和用户的访问控制,对特定路径进行简单的内容保护。

你可能感兴趣的:(httpd-2.4 - 基于用户的访问控制(AuthType Basic))