如何设置密码验证与Apache在Ubuntu 14.04

介绍

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

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

先决条件

要开始,您需要访问Ubuntu 14.04服务器环境。 您将需要一个非root用户sudo权限,以执行管理任务。 要了解如何创建这样的用户,按照我们的Ubuntu 14.04服务器初始设置指南

安装Apache Utilities包

为了创建一个将存储访问我们的受限制的内容需要密码的文件,我们将使用一个名为工具htpasswd 这是在发现apache2-utils Ubuntu的软件库中的包。

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

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

创建密码文件

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

我们使用这个工具的第一次,我们需要添加-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的.htaccess file. Apache uses file. Apache uses .htaccess`文件,以允许某些配置项在内容目录中的文件内进行设定。 缺点是Apache必须在涉及目录的每个请求上重新读取这些文件,这可能会影响性能。

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

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

首先打开您要添加限制的虚拟主机文件。 在我们的例子中,我们将使用000-default.conf持有通过Ubuntu的软件包的Apache安装默认的虚拟主机文件:

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 ___>块。 在我们的示例中,我们将限制整个文档根目录,但您可以修改此列表以仅定位网络空间中的特定目录:

/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

找到<Directory>为块/var/www保存的文档根目录。 打开.htaccess通过改变加工AllowOverride从“无”到“全部”该块内指令:

/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

确认密码验证

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

Apache2密码提示

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

Apache2未授权的错误

结论

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

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏