如何在Ubuntu14.04上使用Apache设置密码验证

来自菜鸟教程
跳转至:导航、​搜索

介绍

设置 Web 服务器时,您通常希望限制访问网站的某些部分。 Web 应用程序通常提供自己的身份验证和授权方法,但如果这些方法不充分或不可用,则可以使用 Web 服务器本身来限制访问。

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

先决条件

要开始使用,您需要访问 Ubuntu 14.04 服务器环境。 您需要具有 sudo 权限的非 root 用户才能执行管理任务。 要了解如何创建这样的用户,请遵循我们的 Ubuntu 14.04 初始服务器设置指南 。

安装 Apache 实用程序包

为了创建存储访问受限内容所需密码的文件,我们将使用一个名为 htpasswd 的实用程序。 这可以在 Ubuntu 存储库中的 apache2-utils 包中找到。

通过键入此命令更新本地包缓存并安装包。 我们将借此机会获取 Apache2 服务器,以防服务器上尚未安装它:

sudo apt-get update
sudo apt-get install apache2 apache2-utils

创建密码文件

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

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

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

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

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

sudo htpasswd /etc/apache2/.htpasswd another_user

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

cat /etc/apache2/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

配置 Apache 密码验证

现在我们有了一个包含 Apache 可以读取格式的用户和密码的文件,我们需要配置 Apache 以在提供受保护的内容之前检查该文件。 我们可以通过两种不同的方式做到这一点。

第一个选项是编辑 Apache 配置并将我们的密码保护添加到虚拟主机文件中。 这通常会提供更好的性能,因为它避免了读取分布式配置文件的开销。 如果您有此选项,建议使用此方法。

如果您无法修改虚拟主机文件(或者如果您已经在使用 .htaccess files for other purposes), you can restrict access using an .htaccessfile. Apache uses.htaccess` 文件以允许在内容目录中的文件。 缺点是 Apache 必须在每个涉及目录的请求上重新读取这些文件,这会影响性能。

在下面选择最适合您需求的选项。

在虚拟主机定义中配置访问控制

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

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

在内部,去掉注释后,该文件应类似于以下内容:

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

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

/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

    <Directory "/var/www/html">
    </Directory>
</VirtualHost>

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

/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

    <Directory "/var/www/html">
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
    </Directory>
</VirtualHost>

完成后保存并关闭文件。 重新启动 Apache 以实施您的密码策略:

sudo service apache2 restart

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

使用 .htaccess 文件配置访问控制

如果您希望使用 .htaccess 文件来设置密码保护,您应该首先编辑主 Apache 配置文件以允许 .htaccess 文件:

sudo nano /etc/apache2/apache2.conf

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

/etc/apache2/apache2.conf

. . .

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

. . .

完成后保存并关闭文件。

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

sudo nano /var/www/html/.htaccess

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

/var/www/html/.htaccess

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

保存并关闭文件。 重新启动 Web 服务器以使用 .htaccess 文件对目录中或目录下的所有内容进行密码保护:

sudo service apache2 restart

确认密码认证

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

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

结论

您现在应该拥有为您的站点设置基本身份验证所需的一切。 请记住,密码保护应该与 SSL 加密相结合,这样您的凭据就不会以纯文本形式发送到服务器。 要了解如何创建用于 Apache 的自签名 SSL 证书,请遵循 本指南 。 要了解如何安装商业证书,请按照 本指南 。