关于 Apache 虚拟主机的配置,请参考:Apache 之一 - 虚拟主机

注意:以下操作都在 root 用户下执行

用户认证的目的

Apache配置用户认证的主要目的是确保网站内容或特定目录只能被授权用户访问,提高网站的安全性和保护敏感信息。通过用户认证,网站管理员可以限制对网站内容的访问,只允许经过身份验证的用户访问受保护的区域。

用户认证的作用包括:

  1. 保护敏感信息: 用户认证可以确保只有经过授权的用户才能访问包含敏感信息的页面或目录,防止未经授权的访问。
  2. 限制访问权限: 管理员可以根据用户的身份和权限设置不同的访问级别,例如管理员、普通用户等,从而控制其访问权限。
  3. 保护网站内容: 对于需要保护的网站内容,如会员信息、财务数据等,用户认证可以增加一层安全性,防止未经授权的访问。
  4. 监控访问记录: 用户认证可以记录每个用户的访问记录,包括登录时间、IP地址等信息,有助于监控和审计用户的访问行为。

总的来说,Apache配置用户认证可以帮助网站管理员控制和管理网站的访问权限,保护敏感信息,提高网站的安全性和可靠性。

用户认证的配置

1.编辑 apache 虚拟主机配置文件 /usr/local/apache2/conf/extra/httpd-vhost.conf,修改 基于 80 端口的配置 的虚拟主机配置,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
## 基于单域名的虚拟主机配置
<VirtualHost *:80>
# 指定了该虚拟主机的根目录为 /data/websites/apache/site01 ,即网站文件的存放路径。
DocumentRoot "/data/websites/apache/site03"
# 设置了虚拟主机的域名为 localhost ,表示通过该域名可以访问该虚拟主机配置的网站。
ServerName apache.abc.com
# 这个指令 AddDefaultCharset utf-8 用于向Apache的配置中添加默认字符集为UTF-8。
# 当浏览器没有指定字符集时,服务器会使用UTF-8作为默认字符集来发送内容给客户端。
# 这有助于确保网站内容能够正确地显示在各种浏览器中,并且支持Unicode字符。
AddDefaultCharset utf-8
# 指定了错误日志文件的路径为 logs/site01_error_log ,用于记录该虚拟主机的错误日志信息。
ErrorLog "logs/site03_error_log"
# 指定了访问日志文件的路径为 logs/site01_access_log ,使用 common 格式记录访问日志信息。
CustomLog "logs/site03_access_log" common
# 针对 /data/websites/apache 目录的访问权限设置。 不配置会出现 403
<Directory "/data/websites/apache/site03">
# 设置目录的访问权限。允许在目录中显示文件列表,同时允许跟随符号链接
Options Indexes FollowSymLinks
# 这个指令用于设置允许使用 .htaccess 文件来覆盖特定目录的配置选项
#AllowOverride all
AllowOverride authconfig
# 设置了对 /data/websites/apache 目录下的所有请求都允许访问。
# Require all granted 表示允许所有请求访问该目录,是Apache 2.4版本中的访问控制设置方式。
Require all granted
</Directory>
</VirtualHost>

Options 参数说明:

参数 说明 备注
Indexes 允许在目录中显示文件列表,如果目录下没有默认的索引文件(如index.html)时,会显示目录的内容列表。 -
FollowSymLinks 允许Apache服务器在处理符号链接时能够跟随符号链接指向的目标文件或目录。 -

AllowOveried 参数说明:
AllowOverride参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件,如果设置为All,那么所有在.htaccess文件里有的指令都将被重写。

参数 说明 备注
None 禁止在 .htaccess 文件中覆盖任何指令。 -
all 表示允许覆盖所有配置选项。 -
authconfig 允许在 .htaccess 文件中设置认证和授权相关的指令,如 AuthType 、 AuthName 、 Require 等。 -
FleInfo 允许在 .htaccess 文件中设置文件控制指令,如 ErrorDocument 、 AddType 、 AddHandler 等。 -
Indexes 允许在 .htaccess 文件中控制目录列表的显示,如 Options Indexes。 -
Limit 允许在 .htaccess 文件中设置访问控制指令,如 Order 、 Deny 、 Allow 等。 -

2.在虚拟主机配置的网站目录 DocumentRoot /data/websites/apache/site03 下新建 .htaccess 文件,内容为:

1
2
3
4
5
6
cat << 'EOF' > /data/websites/apache/site03/.htaccess
AuthName "提示信息"
AuthType basic
AuthUserFile /data/websites/apache/.site03.passwd
require valid-user
EOF

.htaccess 配置参数说明:

  • AuthName:定义提示信息,用户访问时提示信息会出现在认证的对话框中;
  • AuthType:定义认证类型,在HTTP1.0中,只有一种认证类型:basic。在HTTP1.1中有几种认证类型,如:MD5;
  • AuthUserFile:定义包含用户名和密码的文本文件,每行一对;
  • AuthGroupFile:定义包含用户组和组成员的文本文件。组成员之间用空格分开,如:group1:user1 user2;
  • require命令:定义哪些用户或组才能被授权访问。如:
    • require user user1 user2 (只有用户user1和user2可以访问)
    • requires groups group1 (只有group1中的成员可以访问)
    • require valid-user (在AuthUserFile指定的文件中的所有用户都可以访问)

3.使用 apache 自带的 htpasswd 命令生成用户认证文件

1
2
root@leazhi-ubuntu2204:~# htpasswd -bc /data/websites/apache/.site03.passwd linuser chekir
Adding password for user linuser

注意: 这里生成的用户认证文件一定要和上面 .htaccess 文件里面的 AuthUserFile 配置路径一致,包括文件名也一样!

htpasswd 常用参数说明:

参数 说明 备注
-c 创建一个新的配置文件
-b 在创建用户的同时必须在用户名后面指定密码,而不是根据提示输入密码 -
-m 强制使用 MD5 加密密码(默认的) -
-B 强制使用 bcrypt 加密密码(非常安全) -
-C 设置用于bcrypt算法的计算时间(越高越安全,但速度越慢,默认值:5,有效值:4到17) -
-D 删除指定用户 -
-v 验证指定用户的密码 -

4.执行命令 apachectl -t 测试 apache 配置是否有误,在没报错的情况下也执行下 apachectl restart 重启 apache 服务:

1
apachectl -t && apachectl restart

5.打开浏览器,输入配置的域名进行访问,如下: