如何在 Ubuntu 16.04 上使用 Apache 设置密码验证如何在 Ubuntu 16.04 上使用 Apache 设置密码验证如何在 Ubuntu 16.04 上使用 Apache 设置密码验证如何在 Ubuntu 16.04 上使用 Apache 设置密码验证
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

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

介绍

在运行网站时,您通常希望限制访问者访问网站的某些部分。 Web 应用程序可能会提供自己的身份验证和授权方法,但如果这些方法不充分或不可用,Web 服务器本身也可用于限制访问。

在本指南中,我们将演示如何在 Ubuntu 16.04 上运行的 Apache Web 服务器上使用密码保护资产。

先决条件

为了完成本教程,您需要访问 Ubuntu 16.04 服务器。

此外,在开始之前,您还需要具备以下条件:

    <李> 服务器上的 sudo 用户:您可以按照 Ubuntu 16.04 初始服务器设置指南创建具有 sudo 权限的用户。 <李> Apache2 Web 服务器:如果您还没有设置一个,请参阅深度文章 How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 16.04 的 Apache 部分 ,可以指导你。 <李> 使用 SSL 保护的网站:设置方式取决于您的网站是否有域名。
    • 如果您有域名……保护您网站的最简单方法是使用 Let's Encrypt,它提供免费、可信的证书。按照 Apache 的 Let's Encrypt 指南进行设置。
    • 如果您没有域……并且您只是将此配置用于测试或个人使用,则可以改用自签名证书。这提供了相同类型的加密,但没有域验证。按照 Apache 的自签名 SSL 指南进行设置。

    当所有这些都准备就绪后,以 sudo 用户身份登录到您的服务器,然后继续下面的操作。

    第 1 步 — 安装 Apache 实用程序包

    我们将使用名为 htpasswd 的实用程序(apache2-utils 包的一部分)来创建文件并管理访问受限内容所需的用户名和密码。

    1. sudo apt-get update
    2. sudo apt-get install apache2-utils

    第 2 步 — 创建密码文件

    我们现在可以访问 htpasswd 命令。我们可以用它来创建一个密码文件,Apache 可以用它来验证用户。为此,我们将在我们的 /etc/apache2 配置目录中创建一个名为 .htpasswd 的隐藏文件。

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

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

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

    对于您希望添加的任何其他用户,省略 -c 参数:

    1. sudo htpasswd /etc/apache2/.htpasswd another_user

    如果我们查看文件的内容,我们可以看到每条记录的用户名和加密后的密码:

    1. cat /etc/apache2/.htpasswd
    Output
    sammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/ another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

    第 3 步 — 配置 Apache 密码验证

    现在我们有了一个 Apache 可以读取格式的用户和密码文件,我们需要配置 Apache 在提供我们受保护的内容之前检查这个文件。我们可以通过以下两种方式之一执行此操作:直接在站点的虚拟主机文件中或将 .htaccess 文件放在需要限制的目录中。通常最好使用虚拟主机文件,但如果您需要允许非 root 用户管理他们自己的访问限制,请将限制检查到网站旁边的版本控制中,或者已经有一个使用 .htaccess 文件的 Web 应用程序用于其他目的,查看第二个选项。

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

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

    第一个选项是编辑 Apache 配置并为虚拟主机文件添加密码保护。这通常会提供更好的性能,因为它避免了读取分布式配置文件的开销。此选项需要访问配置,这并不总是可用,但当您有权访问时,建议这样做。

    首先打开您希望添加限制的虚拟主机文件。对于我们的示例,我们将使用 000-default.conf 文件,该文件包含通过 Ubuntu 的 apache 软件包安装的默认虚拟主机:

    1. sudo nano /etc/apache2/sites-enabled/000-default.conf

    在内部,删除注释后,文件应类似于以下内容:

    <VirtualHost *:80>
      ServerAdmin webmaster@localhost
      DocumentRoot /var/www/html
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    

    身份验证是在每个目录的基础上完成的。要设置身份验证,您需要使用 块定位您希望限制的目录。在我们的示例中,我们将限制整个文档根目录,但您可以修改此清单以仅针对网络空间中的特定目录:

    <VirtualHost *:80>
      ServerAdmin webmaster@localhost
      DocumentRoot /var/www/html
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
    
      <Directory "/var/www/html">
      </Directory>
    </VirtualHost>
    

    在此目录块中,指定我们希望设置 Basic 身份验证。对于 AuthName,选择将在提示输入凭据时向用户显示的域名。使用 AuthUserFile 指令将 Apache 指向我们创建的密码文件。最后,我们将要求 valid-user 访问此资源,这意味着任何可以使用密码验证其身份的人都将被允许进入:

    <VirtualHost *:80>
      ServerAdmin webmaster@localhost
      DocumentRoot /var/www/html
      ErrorLog ${APACHE_LOG_DIR}/error.log
      CustomLog ${APACHE_LOG_DIR}/access.log combined
    
      <Directory "/var/www/html">
          AuthType Basic
          AuthName "Restricted Content"
          AuthUserFile /etc/apache2/.htpasswd
          Require valid-user
      </Directory>
    </VirtualHost>
    

    完成后保存并关闭文件。

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

    1. sudo apache2ctl configtest

    如果一切正常并且您得到 Syntax OK,则重新启动服务器以实施您的密码策略。由于 systemctl 不显示所有服务管理命令的结果,我们将使用 status 来确保服务器正在运行:

    1. sudo systemctl restart apache2
    2. sudo systemctl status apache2

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

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

    Apache 可以使用 .htaccess 文件来允许在内容目录中设置某些配置项。由于 Apache 必须在涉及目录的每个请求上重新读取这些文件,这会对性能产生负面影响,因此首选选项 1,但如果您已经在使用 .htaccess 文件或需要允许非根用户管理限制,.htaccess 文件是有意义的。

    要使用 .htaccess 文件启用密码保护,请打开主 Apache 配置文件:

    1. sudo nano /etc/apache2/apache2.conf

    找到包含文档根目录的 /var/www 目录的 块。通过将该块中的 AllowOverride 指令从“None”更改为“All”来打开 .htaccess 处理:

    . . .
    
    <Directory /var/www/>
      Options Indexes FollowSymLinks
      AllowOverride All
      Require all granted
    </Directory>
    
    . . .
    

    完成后保存并关闭文件。

    接下来,我们需要将一个 .htaccess 文件添加到我们希望限制的目录中。在我们的演示中,我们将限制基于 /var/www/html 的整个文档根目录(整个网站),但您可以将此文件放在您希望限制访问的任何目录中:

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

    在此文件中,指定我们希望设置 Basic 身份验证。对于 AuthName,选择将在提示输入凭据时向用户显示的域名。使用 AuthUserFile 指令将 Apache 指向我们创建的密码文件。最后,我们将要求 valid-user 访问此资源,这意味着任何可以使用密码验证其身份的人都将被允许进入:

    AuthType Basic
    AuthName "Restricted Content"
    AuthUserFile /etc/apache2/.htpasswd
    Require valid-user
    

    保存并关闭文件。重启web服务器,使用.htaccess文件对目录下的所有内容进行密码保护,并使用systemctl status验证重启是否成功:

    1. sudo systemctl restart apache2
    2. sudo systemctl status apache2

    第 4 步 — 确认密码验证

    要确认您的内容受到保护,请尝试在 Web 浏览器中访问您的受限内容。您应该看到如下所示的用户名和密码提示:

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

    结论

    恭喜!如果您一直跟进,那么您现在已经为您的站点设置了基本身份验证。但是,Apache 配置和 .htaccess 可以做的远不止基本身份验证。要了解有关 Apache 配置中可用的灵活性和强大功能的更多信息,请尝试以下教程之一:

    • 为了更好地了解主配置文件,请参阅如何在 Ubuntu 或 Debian VPS 上配置 Apache Web 服务器
    • 在如何在 Ubuntu 16.04 上设置 Apache 虚拟主机中了解有关虚拟主机文件的更多信息
    • 在我们的指南如何使用 .htaccess 文件中了解重写 URL、自定义错误页面(如上面的“未经授权”消息)或使用服务器端包含在所有页面上包含通用元素。

©2015-2025 艾丽卡 support@alaica.com