介绍
当运行网站时,通常有部分网站需要限制访问者。 Web应用程序可以提供他们自己的认证和授权方法,但是如果Web服务器本身不足或不可用,它们也可以用于限制访问。
在本指南中,我们将演示如何对运行在Ubuntu 16.04上的Apache Web服务器上的资产进行密码保护。
先决条件
为了完成本教程,您将需要访问Ubuntu 16.04服务器。
此外,在开始之前,您需要具备以下条件:
一个
sudo
服务器上的用户 :您可以创建一个用户sudo
按照权限的Ubuntu 16.04服务器初始设置指南 。一个Apache2的Web服务器 :如果您尚未设置一个,深入文章的Apache的部分, 如何在Ubuntu 16.04安装Linux,Apache,MySQL和PHP(LAMP)
,可以指导你。与SSL保护的站点 :您如何设置,多达取决于你是否有一个域名为您的网站。
- 如果你有一个域名......,以确保您的网站的最简单的方法是让我们的加密,它提供免费的,受信任的证书。 按照咱们的加密指南为Apache设置此。
- 如果你没有一个域...你只是使用测试或个人使用此配置,您可以使用自签名证书来代替。 这提供了相同类型的加密,但没有域验证。 按照自签名的SSL指南Apache才能完成设置。
当所有这些都到位,登录到您的服务器作为sudo
用户,并在下面继续。
第1步 - 安装Apache实用程序包
我们将使用了一个叫htpasswd
,该部分apache2-utils
包,创建文件和管理用户名和访问受限内容所需的密码。
sudo apt-get update
sudo apt-get install apache2-utils
第2步 - 创建密码文件
我们现在可以访问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$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1
第3步 - 配置Apache密码验证
现在我们有一个文件包含用户和密码的格式,Apache可以读取,我们需要配置Apache检查此文件,然后再提供我们的受保护的内容。 我们可以通过以下两种方式之一做到:直接在站点的虚拟主机文件中,或通过将.htaccess文件放在需要限制的目录中。 通常最好使用虚拟主机文件,但如果您需要允许非root用户管理自己的访问限制,请检查网站旁边的版本控制限制,或使用.htaccess文件的Web应用程序已经用于其他目的,检查第二个选项。
选择最适合您需要的选项。
选项1:在虚拟主机定义(首选)中配置访问控制
第一个选项是编辑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>
保存并在完成后关闭文件。
在重新启动Web服务器之前,可以使用以下命令检查配置:
sudo apache2ctl configtest
如果一切正常,你会得到Syntax OK
,然后重新启动来实现你的密码策略的服务器。 由于systemctl
不显示所有服务管理命令的结果,我们将使用的status
,以确保服务器正在运行:
sudo systemctl restart apache2
sudo systemctl status apache2
现在,您指定的目录现在应该受密码保护。
选项2:使用.htaccess文件配置访问控制
Apache可以使用.htaccess
文件,以允许某些配置项目内容目录中进行设置。 因为Apache必须重新读取每个涉及的目录,它可以表现产生负面影响的要求这些文件,选项1是首选,但如果你已经在使用.htaccess文件或需要允许非root用户管理限制.htaccess
文件是有意义的。
要使用启用密码保护.htaccess
文件,打开主Apache配置文件:
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
文件,并使用systemctl status
验证重启的成功:
sudo systemctl restart apache2
sudo systemctl status apache2
第4步 - 确认密码验证
要确认您的内容受到保护,请尝试在网络浏览器中访问受限制的内容。 您应该看到一个用户名和密码提示,如下所示:
如果输入正确的凭据,您将被允许访问内容。 如果输入错误的凭据或点击“取消”,您将看到“未授权”错误页面:
结论
恭喜! 如果您已遵循相关规定,则现在已为您的网站设置了基本身份验证。 Apache配置和.htaccess可以做的远不止基本的身份验证。 要了解有关Apache配置中的灵活性和功能的更多信息,请尝试下列教程之一:
为了更好地理解的与主配置文件,请参阅如何在Ubuntu的或Debian的VPS配置Apache Web服务器
了解更多关于在虚拟主机的文件如何设置的Ubuntu 16.04截至Apache的虚拟主机
了解与服务器端的所有网页的URL重写,自定义错误页面,如“未授权”消息上方,或包括常见的元素,包括我们的指南中如何使用.htaccess文件 。