Share

在Ubuntu设置密码访问

介绍

当运行网站时,通常有部分网站需要限制访问者。 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
sammy:$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

在里面,删除注释,文件应该看起来像这样:

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

/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将我们创建的密码文件。 最后,我们将需要一个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>

保存并在完成后关闭文件。

在重新启动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从“无”到“全部”该块内指令:

/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将我们创建的密码文件。 最后,我们将需要一个valid-user来访问这个资源,这意味着任何人谁可以使用密码来验证他们的身份将被允许在:

/var/www/html/.htaccess
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步 – 确认密码验证

要确认您的内容受到保护,请尝试在网络浏览器中访问受限制的内容。 您应该看到一个用户名和密码提示,如下所示:

Apache2密码提示

如果输入正确的凭据,您将被允许访问内容。 如果输入错误的凭据或点击“取消”,您将看到“未授权”错误页面:

Apache2未授权的错误