如何在Ubuntu 16.04上使用Apache设置密码身份验证

介绍

在运行网站时,网站的某些部分通常会限制访问者。Web应用程序可以提供自己的身份验证和授权方法,但如果Web服务器不足或不可用,也可以使用Web服务器本身来限制访问。

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

先决条件

要完成本教程,您需要访问Ubuntu 16.04服务器。

此外,在开始之前,您将需要以下内容:

  • 一个服务器上的sudo用户:您可以创建一个具有sudo权限用户按照的Ubuntu 16.04服务器初始设置指南进行设置,没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • Apache2 Web服务器
  • 使用SSL保护的网站:如何设置该网站取决于您是否拥有网站的域名。

当所有这些都到位后,以sudo用户身份登录您的服务器并继续下面。

第1步 - 安装Apache Utilities包

我们将使用名为apache2-utils包的一部分的实用程序htpasswd来创建文件并管理访问受限内容所需的用户名和密码。

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

第2步 - 创建密码文件

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

我们第一次使用此实用程序时,需要添加-c选项以创建指定的文件。我们在命令末尾指定用户名(在此示例中为sammy)以在文件中创建新条目:

sudo htpasswd -c /etc/apache2/.htpasswd sammy

系统将要求您提供并确认用户的密码。

省略您要添加的任何其他用户的-c参数:

sudo htpasswd /etc/apache2/.htpasswd another_user

如果我们查看文件的内容,我们可以看到每条记录的用户名和加密密码:

cat /etc/apache2/.htpasswd
sammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/
another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

第3步 - 配置Apache密码身份验证

现在我们有一个文件,其中包含Apache可以读取的格式的用户和密码,我们需要配置Apache以在提供受保护内容之前检查此文件。我们可以通过以下两种方式之一完成此操作:直接在站点的虚拟主机文件中,或者将.htaccess文件放在需要限制的目录中。通常最好使用虚拟主机文件,但如果您需要允许非root用户管理自己的访问限制,请检查网站旁边的版本控制限制,或者使用.htaccess文件的Web应用程序已用于其他目的,看看第二个选项。

选择最适合您需求的选项。

选项1:在虚拟主机定义中配置访问控制(首选)

第一个选项是编辑Apache配置并将密码保护添加到虚拟主机文件。这通常会提供更好的性能,因为它避免了读取分布式配置文件的费用。此选项需要访问配置,该配置并非始终可用,但是当您确实有访问权限时,建议您访问。

首先打开要添加限制的虚拟主机文件。对于我们的示例,我们将使用包含通过Ubuntu的apache包安装的默认虚拟主机的000-default.conf文件:

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

<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

找到包含/var/www文档根目录的<Directory>块。.htaccess通过将该块中的AllowOverride指令从“None”更改为“All”来打开处理:

. . .
​
<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可以做的远不止基本身份验证。其他相关教程请参考腾讯云+社区中的更多文章。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Set Up Password Authentication with Apache on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 16.04上安装和保护phpMyAdmin

虽然许多用户需要像MySQL这样的数据库管理系统的功能,但他们可能不会仅仅通过MySQL提示与系统进行交互。

2560
来自专栏惨绿少年

SSH服务详解

第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Wo...

4150
来自专栏赵俊的Java专栏

搭建一个自己的私有云 + 离线下载站

3.8K4
来自专栏王清培的专栏

聊下 git 使用前的一些注意事项

连接方式https、ssh 在使用git的时候,不管你的服务器是开源平台github还是私服gitlab,你都需要clone仓库到本地,这个clone的时候就需...

2038
来自专栏信安之路

审计SEMCMSv2.7之捡来的两个洞加漏洞复现

在 SEMCMS php v2.7 审计之前,我会去看看要审计的CMS官网是否存在手册说明什么的,然后去会各个漏洞公布平台找找它以前的老漏洞,复现下是否修复及修...

1140
来自专栏云计算教程系列

如何在CentOS 7上安装和配置ownCloud

ownCloud是一个文件共享服务器,允许您将个人内容(如文档和图片)集中存储在此位置,就像Dropbox一样。与ownCloud的不同之处在于它是免费的开源软...

9130
来自专栏云计算教程系列

如何在Ubuntu 16.04上为用户目录设置vsftpd

FTP是文件传输协议的缩写,是一种曾经广泛用于在客户端和服务器之间移动文件的网络协议。它已被更快,更安全,更方便的文件传输方式所取代。许多休闲网民希望直接用ht...

2540
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Webmin

Webmin是适用于任何Linux机器的基于Web的控制面板,可让您通过基于Web的现代界面管理服务器。使用Webmin,您可以动态更改常用软件包的设置,包括W...

2341
来自专栏云计算教程系列

如何在Ubuntu 14.04上保护Nginx

即使使用默认设置,Nginx也是一个非常安全可靠的Web服务器。但是,有很多方法可以进一步保护Nginx。

1702
来自专栏云计算教程系列

如何在CentOS上使用双重身份验证

在本教程中,您将学习如何在CentOS 7上使用一次性密码进行SSH上的双重身份验证。

2343

扫码关注云+社区

领取腾讯云代金券