如何在 Ubuntu 20.04 上使用 Apache 设置密码验证

介绍

作为 Web 管理员,您可能觉得有价值暂时或永久地限制访问者访问网站的某些部分,虽然 Web 应用程序可能提供自己的身份验证和授权方法,但如果这些方法不充分或不可用,您也可以依赖 Web 服务器本身来限制访问。

本教程将引导您通过在Ubuntu 20.04上运行的ApacheWeb服务器上的密码保护资产,这将为您的服务器提供额外的安全层。

前提条件

要完成本教程,您将需要:

  • 设置一个Ubuntu 20.04服务器,配备一个非root用户,并启用`sudo'权限和防火墙。 您可以遵循 [Ubuntu 20.04 初始服务器设置指南] (https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-20-04).
  • Apache 网络服务器安装在您的 Ubuntu 服务器上 。 如果您还没有设置, [如何在 Ubuntu 20. 04 上安装 Apache 网络服务器 (https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04 ) 教程可以引导您 。 请确定完成 ** 第 5 段 ** , 并为您域设置 [虚拟主机文件] (https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04#step-5-setting-up-virtual-hosts-recommended ) 。 此教程会将 你的_域 用作整个实例,并在虚拟主机文件中使用/etc/apaches2/ sites-capables/ your_域.conf' 。 (_) ( )* 您的虚拟主机以 SSL 安全 。 设置此选项取决于您是否有您网站的域名 。 (_) ) - 如果您有域名, 您可以使用提供免费可信证书的 Let's Enterpress` 来保护您的网站 。 遵循 Apache [让我们加密指南] (https://andsky.com/tech/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04) 来设置此设置.
  • 如果您没有域名,并且您正在使用此配置进行测试或个人使用,您可以使用自签名的证书取而代之. 这提供了同类型的加密,但没有域验证. 遵循 [自签的 Apache (https://andsky.com/tech/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-20-04) SSL 指南来设置 。
  • 如果您想设置一个域名( 可选), 您可以在 [Namecheap] (https://namecheap.com/ 上购买一个域名, 在 [Freenom] (http://www.freenom.com/en/index.html ) 上免费获取一个域名, 或者使用您选择的域名登记器 。 此外,您还需要为您的服务器设置以下两个 DNS 记录 。 遵循此选项[引入到 DigitalOcean DNS (https://andsky.com/tech/tutorials/an-introduction-to-digitalocean-dns) ,以了解如何添加它们的细节.
  • 一张带有‘你的_域'指向您服务器的公开IP地址的记录. () ) - 一个记录有‘www.your_domain'指向您服务器的公开IP地址. () (英语)

一旦你完成了这些前提条件,登录你的服务器作为sudo用户,并继续到第一步。

步骤 1 – 安装 Apache 工具包

为了完成本教程,我们将使用一个名为htpasswd的实用程序,是apache2-utils包的一部分,创建该文件并管理访问受限制内容所需的用户名和密码。

首先,更新您的服务器的包索引:

1sudo apt update

然后安装 Apache 实用程序包:

1sudo apt install apache2-utils

有了这个安装,你现在可以访问htpasswd命令。

步骤2:创建密码文件

htpasswd命令允许您创建一个密码文件,Apache可以用来验证用户,您将在您的/etc/apache2配置目录中创建一个名为.htpasswd的隐藏文件。

第一次使用此实用程序时,您需要添加 -c 选项来创建指定的 .htpasswd 文件. 在这里,我们在命令的末尾指定一个用户名 (`sammy' 在本例中) 以在文件中创建一个新的条目:

1sudo htpasswd -c /etc/apache2/.htpasswd sammy

您将被要求提供并确认用户的密码。

如下示例所示,为您想要添加的任何额外用户留下-c参数,以免重写文件:

1sudo htpasswd /etc/apache2/.htpasswd another_user

如果您检查文件的内容,它将包含每个记录的用户名和加密密码:

1cat /etc/apache2/.htpasswd
1[secondary_label Output]
2sammy:$apr1$eponJaBR$9uyVIRpDpbHoseI.hS1cq/
3another_user:$apr1$dDXiQxte$RGn3CVfFLQOPf5lSJgNvV1

现在你有你的用户和密码在一个Apache可以读取的格式。

步骤 3 – 配置 Apache 密码身份验证

在此步骤中,您需要配置Apache以检查.htpasswd文件,然后为您提供受保护的内容。您可以这样做两种方式之一:要么直接在网站的虚拟主机文件中,要么在需要限制的目录中放置.htaccess文件。一般来说,最好使用虚拟主机文件,但如果您需要允许非root用户管理自己的访问限制,请参考第二种选项来检查版本控制的限制,或者有一个Web应用程序已经使用了.htaccess文件用于其他目的。

<$>[注] **注:**您可以对任何活跃的虚拟主机执行下列选项。如果您正在使用自己的主机,请确保更改任何命令和值以反映您的配置。

选择最适合您的需求的选项。

选项1:在虚拟主机定义中配置访问控制(偏好)

第一种选择是编辑Apache配置,并将密码保护添加到虚拟主机文件中,这通常会提供更好的性能,因为它避免了阅读分布式配置文件的成本。

為我們的例子,我們將使用持有虛擬主機的 /etc/apache2/sites-available/your_domain.conf 檔案。

1sudo nano /etc/apache2/sites-available/your_domain.conf

内部,随着评论被删除,该文件应该看起来如下:

1[label /etc/apache2/sites-available/your_domain.conf]
2<VirtualHost *:80>
3    ServerAdmin webmaster@localhost
4    ServerName your_domain
5    ServerAlias www.your_domain
6    DocumentRoot /var/www/your_domain
7    ErrorLog ${APACHE_LOG_DIR}/error.log
8    CustomLog ${APACHE_LOG_DIR}/access.log combined
9</VirtualHost>

要设置身份验证,您需要用一个<Directory ___>块来瞄准您想要限制的目录. 在我们的示例中,我们将限制整个文档根,但您可以修改此列表以仅针对 Web 空间中的特定目录:

 1[label /etc/apache2/sites-available/your_domain.conf]
 2<VirtualHost *:80>
 3    ServerAdmin webmaster@localhost
 4    ServerName your_domain
 5    ServerAlias www.your_domain
 6    DocumentRoot /var/www/your_domain
 7    ErrorLog ${APACHE_LOG_DIR}/error.log
 8    CustomLog ${APACHE_LOG_DIR}/access.log combined
 9
10<Directory "/var/www/your_domain">
11    </Directory>
12</VirtualHost>

在此目录块中,指定您正在设置基本身份验证。对于AuthName,选择一个域名,在请求凭证时会显示给用户。使用AuthUserFile指令将Apache指向您创建的密码文件。最后,要求只有有效用户才能访问该资源,这意味着任何可以用密码验证身份的人都将被允许进入:

 1[label /etc/apache2/sites-available/your_domain.conf]
 2<VirtualHost *:80>
 3    ServerAdmin webmaster@localhost
 4    ServerName your_domain
 5    ServerAlias www.your_domain
 6    DocumentRoot /var/www/your_domain
 7    ErrorLog ${APACHE_LOG_DIR}/error.log
 8    CustomLog ${APACHE_LOG_DIR}/access.log combined
 9
10<Directory "/var/www/your_domain">
11      AuthType Basic
12      AuthName "Restricted Content"
13      AuthUserFile /etc/apache2/.htpasswd
14      Require valid-user
15  </Directory>
16</VirtualHost>

如果您正在使用nano,您可以通过按CTRL + X然后按Y然后按ENTER来完成保存和关闭文件。

在重新启动 Web 服务器之前,您可以使用以下命令检查配置:

1sudo apache2ctl configtest

如果一切都被检查出来,并且您输出Syntax OK,您可以重新启动服务器来执行您的密码策略:

1sudo systemctl restart apache2

由于systemctl不显示所有服务管理命令的结果,请使用状态命令确保服务器正在运行:

1sudo systemctl status apache2
 1[secondary_label Output]
 2 apache2.service - The Apache HTTP Server
 3     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
 4     Active: active (running) since Fri 2022-04-29 17:12:24 UTC; 4s ago
 5       Docs: https://httpd.apache.org/docs/2.4/
 6    Process: 4493 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SU>
 7   Main PID: 4514 (apache2)
 8      Tasks: 55 (limit: 9508)
 9     Memory: 5.8M
10     CGroup: /system.slice/apache2.service
11             ├─4514 /usr/sbin/apache2 -k start
12             ├─4516 /usr/sbin/apache2 -k start
13             └─4517 /usr/sbin/apache2 -k start

现在,您指定的目录应该是密码保护的。

选项2:使用.htaccess 文件配置访问控制

由于Apache必须在涉及目录的每个请求上重新读取这些文件,这可能会对性能产生负面影响,但如果您已经使用了.htaccess 文件或需要允许非root用户管理限制,则.htaccess 文件是有意义的。

要使用.htaccess 文件启用密码保护,请使用命令行文本编辑器,如 'nano' 打开主 Apache 配置文件:

1sudo nano /etc/apache2/apache2.conf

查找包含文档根的 /var/www/ 目录的 <Directory> 区块. 更新此行以反映您的文档根. 接下来,通过将该区块内的 AllowOverride 指令从 None 改为 All 来启用 .htaccess 处理。

 1[label /etc/apache2/apache2.conf]
 2. . .
 3
 4<Directory /var/www/your_domain>
 5  Options Indexes FollowSymLinks
 6  AllowOverride All
 7  Require all granted
 8</Directory>
 9
10. . .

保存并关闭文件,当你完成。

在我们的演示中,我们将限制基于 /var/www/your_domain 的整个文档根(整个网站),但您可以将此文件放置在您想要限制访问的任何目录中:

1sudo nano /var/www/your_domain/.htaccess

在此文件中,指定您想要设置基本身份验证。对于AuthName,选择一个域名,在请求凭证时会显示给用户。使用AuthUserFile指令将Apache指向我们创建的密码文件。最后,您将需要一个有效用户来访问此资源,这意味着任何可以用密码验证身份的用户将被允许进入:

1[label /var/www/your_domain/.htaccess]
2AuthType Basic
3AuthName "Restricted Content"
4AuthUserFile /etc/apache2/.htpasswd
5Require valid-user

重新启动 Web 服务器以通过密码保护.htaccess文件的目录内或下方的所有内容:

1sudo systemctl restart apache2

然后运行systemctl status来验证重启的成功:

1sudo systemctl status apache2
 1[secondary_label Output]
 2 apache2.service - The Apache HTTP Server
 3     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese>
 4     Active: active (running) since Fri 2022-04-29 17:18:17 UTC; 3s ago
 5       Docs: https://httpd.apache.org/docs/2.4/
 6    Process: 4721 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SU>
 7   Main PID: 4744 (apache2)
 8      Tasks: 55 (limit: 9508)
 9     Memory: 5.9M
10     CGroup: /system.slice/apache2.service
11             ├─4744 /usr/sbin/apache2 -k start
12             ├─4745 /usr/sbin/apache2 -k start
13             └─4746 /usr/sbin/apache2 -k start

您指定的目录现在应该被密码保护。

步骤 4 – 确认密码身份验证

要确认您的内容是受保护的,请尝试在网页浏览器中访问受限制的内容,通过导航到https://your_domain_or_server_IP

您将收到一个用户名和密码提示,看起来如下:

Apache2 password prompt

如果您输入正确的凭证,您将被允许访问内容. 如果您输入错误的凭证或点击取消,您将收到未经授权错误页面:

Apache2 unauthorized error

结论

您现在已经为您的网站设置了基本的身份验证。

您可以使用 Apache 配置和.htaccess 做得更多。 要了解有关 Apache 配置中可用的灵活性和功率的更多信息,请尝试以下教程之一:

  • 要更好地了解主配置文件,请阅读有关 [ 熟悉重要的 Apache 文件和目录 ] 的部分。

](https://andsky.com/tech/tutorials/how-to-install-the-apache-web-server-on-ubuntu-20-04#step-6-getting-familiar-with-important-apache-files-and-directories)在我们的Apache安装指南。

Published At
Categories with 技术
comments powered by Disqus