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

介绍

网页应用程序通常提供自己的身份验证和授权方法,但如果这些方法不足或不可用,则可以使用网页服务器本身来限制访问。

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

前提条件

要开始,您需要访问Ubuntu 14.04服务器环境,您需要具有sudo特权的非根用户才能执行管理任务。 要了解如何创建这样的用户,请遵循我们的Ubuntu 14.04初始服务器设置指南(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-14-04)。

安装 Apache 实用程序包

为了创建将存储访问我们受限制的内容所需密码的文件,我们将使用一个名为htpasswd的实用程序。

更新本地包缓存并通过键入这个命令来安装包,我们将利用这个机会,如果它尚未安装在服务器上,我们也将抓住Apache2服务器:

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

创建密码文件

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

第一次使用这个实用程序时,我们需要添加-c选项来创建指定的文件,我们在命令的末尾指定一个用户名(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$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
3another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

配置 Apache 密码验证

现在,我们有一个文件,我们的用户和密码在一个格式,Apache可以读取,我们需要配置Apache检查这个文件,在服务我们的受保护的内容之前。

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

如果你没有修改虚拟主机文件的能力(或者你已经使用.htaccess 文件用于其他目的),你可以使用.htaccess 文件来限制访问。

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

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

為我們的例子,我們將使用「000-default.conf」檔案,其中包含透過 Ubuntu 的 apache 包安裝的默認虛擬主機:

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

内部,随着评论被删除,文件应该看起来像这样:

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

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

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

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

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

完成后保存并关闭文件. 重新启动 Apache 以执行您的密码策略:

1sudo service apache2 restart

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

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

如果您希望使用「.htaccess」文件设置密码保护,则应开始编辑主Apache配置文件以允许「.htaccess」文件:

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/>
 5    Options Indexes FollowSymLinks
 6    AllowOverride All
 7    Require all granted
 8</Directory>
 9
10. . .

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

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

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

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

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

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

1sudo service apache2 restart

确认密码身份验证

要确认您的内容是受保护的,请尝试在 Web 浏览器中访问受限制的内容. 您应该看到一个用户名和密码提示,它看起来像这样:

Apache2 password prompt

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

Apache2 unauthorized error

结论

您现在应该拥有为您的网站设置基本身份验证所需的一切。请记住,密码保护应与SSL加密结合,以便您的身份验证不会以简单的文本发送到服务器。 若要了解如何创建一个自签名的SSL证书以与Apache一起使用,请遵循 此指南

Published At
Categories with 技术
comments powered by Disqus