介绍
设置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
在里面,删除注释,文件应该看起来像这样:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
认证是在每个目录基础上完成的。 要设置身份验证,则需要针对您希望与限制的目录<Directory ___>
块。 在我们的示例中,我们将限制整个文档根目录,但您可以修改此列表以仅定位网络空间中的特定目录:
<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>
保存并在完成后关闭文件。 重新启动Apache以实现密码策略:
sudo service apache2 restart
您指定的目录现在应该受密码保护。
使用.htaccess文件配置访问控制
如果你想使用设置密码保护.htaccess
文件,而不是,你应该开始通过编辑Apache主配置文件允许.htaccess
文件:
sudo nano /etc/apache2/apache2.conf
找到<Directory>
为块/var/www
保存的文档根目录。 打开.htaccess
通过改变加工AllowOverride
从“无”到“全部”该块内指令:
. . .
<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
来访问这个资源,这意味着任何人谁可以使用密码来验证他们的身份将被允许在:
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
保存并关闭文件。 重新启动Web服务器密码保护所有的内容或与该目录下.htaccess
文件中:
sudo service apache2 restart
确认密码验证
要确认您的内容受到保护,请尝试在网络浏览器中访问受限制的内容。 您应该看到一个用户名和密码提示,如下所示:
如果输入正确的凭据,您将被允许访问内容。 如果输入错误的凭据或点击“取消”,您将看到“未授权”错误页面:
结论
您现在应该拥有为网站设置基本身份验证所需的一切。 请记住,密码保护应与SSL加密结合使用,以便您的凭据不会以纯文本发送到服务器。 要了解如何创建与Apache使用自签名的SSL证书,请按照本指南 。 要了解如何安装商业证书,请按照本指南 。