浏览文章
文章信息
介绍
设置Web服务器时,通常您希望限制访问网站的某些部分。Web应用程序通常提供自己的身份验证和授权方法,但是如果Web服务器本身不足或不可用,则可以使用Web服务器本身来限制访问。
在本指南中,我们将演示如何用密码保护在Ubuntu 14.04上运行的Apache Web服务器上的资产。
先决条件
首先,您需要访问Ubuntu 14.04服务器环境。您将需要具有
sudo
特权的非root用户才能执行管理任务。要了解如何创建这样的用户,请遵循我们的Ubuntu 14.04初始服务器设置指南。安装Apache实用程序包
为了创建用于存储访问受限制内容所需密码的文件,我们将使用名为的实用程序
htpasswd
。apache2-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/.htpasswdOutputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz. another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.配置Apache密码认证
现在我们有了一个文件,其中包含用户和密码,并且可以读取Apache的格式,我们需要配置Apache在提供受保护的内容之前检查该文件。我们可以通过两种不同的方式来做到这一点。
第一个选项是编辑Apache配置,并将我们的密码保护添加到虚拟主机文件。这通常会提供更好的性能,因为它避免了读取分布式配置文件的开销。如果有此选项,则建议使用此方法。
如果您没有能力修改虚拟主机文件(或者您已经在使用
.htaccess files for other purposes), you can restrict access using an
.htaccessfile. 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指向我们创建的密码文件。最后,我们将要求avalid-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指向我们创建的密码文件。最后,我们将要求avalid-user
来访问此资源,这意味着任何可以使用密码验证身份的人都可以进入:/var/www/html/.htaccessAuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user保存并关闭文件。重新启动Web服务器,以使用该
.htaccess
文件对目录中或目录下的所有内容进行密码保护:sudo service apache2 restart确认密码验证
要确认您的内容受到保护,请尝试在Web浏览器中访问受限制的内容。应该显示一个用户名和密码提示,