浏览文章

文章信息

Apache配置密码访问 Base Auth验证--前端密码访问--网站密码访问 13284

介绍

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

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

先决条件

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

安装Apache实用程序包

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

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

sudo apt-get updatesudo 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.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 ___>将要限制的目录作为目标在我们的示例中,我们将限制整个文档的根目录,但是您可以修改此列表,使其仅定位到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指向我们创建的密码文件。最后,我们将要求a 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指向我们创建的密码文件。最后,我们将要求a 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浏览器中访问受限制的内容。应该显示一个用户名和密码提示,


原创