创建用户帐户

在我们的示例中,我们将创建一个可以访问我们网站的 /secret/ 目录的用户和密码。
首先让我们创建具有访问权限的用户,这可以使用 htpasswd 命令完成,如下所示。

[jack@onitroad ~]# htpasswd -c /etc/httpd/htpasswd test
New password:
Re-type new password:
Adding password for user test

在这里,我们使用 -c 创建 /etc/httpd/htpasswd 文件,该文件将包含名为“test”的用户的用户名和密码。
-c 标志应该只在我们第一次创建文件时使用,否则如果我们再次使用它,它将用新文件覆盖所有以前的内容。

为帐户输入两次密码后,文件将被创建,我们可以查看如下所示的内容。

[jack@onitroad ~]# cat /etc/httpd/htpasswd
test:$apr1$a55SSGwb$ZB2Of7y3wMzDO1NeLtfEX1

在这里我们可以看到用户“test”与加密密码一起存在。
默认情况下,所有用户都可以读取此文件,因此我们可能希望更改 Apache 需要能够读取它。

如何使用 Apache 配置私有目录

默认情况下,Apache 将向任何请求它的人提供内容,这实际上是公开的。
我们可以添加一些另外的简单配置来创建一个私有目录,该目录只能基于源 IP 地址,或者使用用户名和密码组合,甚至基于用户组成员身份才能访问。

这是默认通过 mod_authz_core 处理的,默认情况下随 Apache 一起安装,此模块用于配置授权,以便我们只能允许经过身份验证的用户访问网站的某些部分。

注意:在本示例中,我们使用 CentOS 7 中的 Apache 2.4,某些步骤可能会因 Apache 版本和特定 Linux 发行版而异。

测试

我们可以通过浏览到 Web 服务器(或者域,如果已配置)的 IP 地址并指定我们为用户名和密码身份验证配置的目录来测试配置。
在我的实例中,我的 CentOS 7 虚拟机位于 192.168.1.10.
浏览到 /secret 目录时,系统会提示我显示如下消息。

这确保需要用户名和密码才能查看 http://192.168.1.10/secret/,如果输入的用户名和密码组合不正确,访问将被拒绝。

还值得注意的是,在此示例中,我使用明文 HTTP 访问页面,因此在输入用户名和密码后,它们将以明文传输到服务器,并且可以通过网络读取。
这可以通过使用 Apache 配置 TLS 来进一步保护,这将加密传输中的用户名和密码,以及我们和 Web 服务器之间的其他请求。

限制主机名

我们还可以根据使用“Require”指令查看页面的客户端的主机名来接受或者拒绝访问,如下所示。

Require host host1.example.com

在这种情况下,只会接受机器 host1.example.com。
这也可以应用于带有“Require ip x.x.x.x”的 IP 地址或者范围。

阿帕奇配置

下面是一些示例配置,我们可以将其放入 /etc/httpd/conf/httpd.conf

<Directory /var/www/html/secret>
  AuthType Basic
  AuthName "Private Content!"
  AuthUserFile /etc/httpd/htpasswd
  Require valid-user
</Directory>

保存对文件的更改后,我们可以使用“apachectl configtest”测试语法是否正确。
应用这些修改后,必须重新加载 Apache 才能实际应用它们,如下所示。
如果我们需要有关使用 systemctl 管理服务的更多信息,我们还有一个教程。

systemctl reload httpd

让我们解释一下这里的每个配置行实际上在做什么。

  • Directory:用于指定以下配置适用的目录,这里我们说 /var/www/html/secret 是 Web 服务器上应该是私有的目录。
  • AuthType:选择要在指定目录上使用的身份验证类型。
  • AuthName:这基本上是登录时将显示的文本。
  • AuthUserFile:这定义了包含我们之前使用“htpasswd”命令创建的用户名和密码的文件的位置。
  • Require:这里我们需要一个有效的用户进行身份验证,这是我们创建的 /etc/httpd/htpasswd 文件中存在的任何用户。我们可以不要求任何有效用户,而是使用“要求用户测试”指定特定用户,这将只允许测试用户访问,而不管已创建的任何其他用户。我们只能通过使用“Require ip 1.2.3.4”来只允许来自特定 IP 地址的访问。

允许基于用户名的访问不是很可扩展,而是可以指定和允许组。
这可以通过将以下配置添加到 /etc/httpd/conf/httpd.conf 文件来完成。

AuthGroupFile /etc/httpd/htgroup
  Require group groupname
  • AuthGroupFile:这定义了包含组名和作为组成员的用户的文件的位置。该文件可以使用文本编辑器进行编辑,格式应为“groupname: user1 user2”,因此首先指定组,然后是 /etc/httpd/htpasswd 中定义的所有用户,这些用户应该属于该特定组。
  • Require:在这种情况下,require 指定了组名“groupname”,它替换了之前的 Require user 或者 Require valid-user 行。

在这里,我们使用一个简单的本地文件,其中包含具有访问权限的帐户的用户名和密码,这是非常基本的,我们可以通过 LDAP/Kerberos 使用 mod_authnz_ldap 或者 mod_auth_kerb 对外部服务(如 IPA 或者 Active Directory)进行身份验证,这两者都可以与'yum'一起安装。

日期:2020-07-07 20:56:13 来源:oir作者:oir