Apache设置文件访问密码保护

虽然大多数Web服务器内容创建为可供公众使用,但您可能希望将某些或所有网站限制为特定用户或组。 HTTP Auth允许您轻松创建这些限制。
本文介绍基于凭证和基于规则的Apache访问控制工具。

Apache访问控制



要为目录启用密码,请将以下行插入Apache配置文件的相应部分。 您还可以在.htaccess文件或虚拟主机配置部分中插入身份验证信息。 所需的指令是:
Apache配置文件:

  1. AuthType Basic
  2. AuthUserFile /var/www/example.com/.htpasswd
  3. AuthName "Sign In Here To Gain Access To the Site"
  4. Require valid-user

Apache在与客户端连接时用AuthType指令指定应使用的认证方法。 Basic类型要求密码作为明文在网络上发送。 因此,我们不建议使用此来保护敏感资源。
AuthUserFile指定存储密码的密码文件的路径(完整)。 在本例中,我们使用路径/var/www/example.com/.htpassword。 这是public_html文件夹之上的一个目录,防止意外暴露文件。 默认情况下,以.ht开头的所有文件在Apache的大多数默认配置中都不是Web可访问的,但不应假定。
AuthName指令包含用于浏览器通知用户服务器正在验证什么资源的提示。 该值是任意的。
Require valid-user告诉Apache任何有效的用户都可以进行身份验证。

生成HTTP AUTH密码



要生成密码,我们需要htpasswd工具。 对于许多发行版,此工具可能在您安装Apache本身时已安装。 Debian和Ubuntu用户必须使用以下命令安装apache2-utils软件包:

  1. sudo apt-get install apache2-utils

要指定用户创建文件,执行以下命令:

  1. htpasswd -c /var/www/example.com/.htpasswd username

在本例中,我们使用-c选项创建一个新的AuthUserFile。 该文件位于/var/www/example.com/.htpasswd,用户名为username。 htpasswd将提示您输入密码,然后确认密码。 如果文件存在,请用-c选项覆盖。
-b选项允许您把密码作为命令的最后一个参数,如下例所示:

  1. htpasswd -b /srv/auth/.htpasswd username 5t1ck6

AuthUserFile类似如下:
/var/www/example.com/.htpasswd

  1. hobby:isiA3Q4djD/.Q
  2. admin:{SHA}x9VvwHI6dmgk9VTE0A8o6hbCw2s=
  3. username:\$apr1\$vVzQJxvX\$6EyHww61nnZr6IdQv0pVx/

带组的访问控制列表



在Require指令中,我们指定了valid-user。 这告诉Apache,任何可以对AuthUserFile中指定的用户进行身份验证的用户都可以访问该网站。 虽然可以为不同的资源维护单独的密码文件,但对于具有复杂身份验证需求的部署,这是很难维护的。
为了满足这一需求,Apache允许您使用单个AuthUserFile,包含需要向服务器进行身份验证的所有用户。 要将有效凭据集限制到.htpasswd文件中列出的特定用户子集,我们必须在Require配置参数中指定用户。 只有在Require user指令后指定的用户才能被允许访问指定的资源。 例如:
Apache配置文件选项:

  1. Require user username admin

给定这个指令,用户username和admin将能够登录资源。 可以在Require行上指定任何用户子集。 Apache还提供了将用户组织成组的能力,然后允许基于组成员资格访问资源。 此设置的配置指令如下所示:
Apache配置文件:

  1. AuthType Basic
  2. AuthUserFile /srv/auth/.htpasswd
  3. AuthGroupFile /srv/auth/.htgroup
  4. Require group Authorized

在这个例子中,我们引用了相同的AuthUserFile,但是我们添加了一个指定用户组的AuthGroupFile。 组文件包含用户组列表和与每个组相关联的用户名。 htgroup文件(如htpasswd文件)可以位于文件系统上的任何位置。 为了清晰起见,我们建议htgroup与htpasswd文件在同一目录中。 这里是一个htgroup文件的例子:
/var/www/example.com/.htgroup:

  1. Authorized: username username2
  2. Team: admin hobby

给定此htgroup文件,只有用户username和username2将有权访问上面列出的资源。 组文件的语法遵循一个简单的[groupname]:[username 1] [username 2] […]。 您可以将您的AuthUserFile中的任何用户名作为特定资源所需的组条目。

标签:Apache 发布于:2019-11-21 16:26:09