方法二:使用httpd.conf中的目录

在“/etc/httpd/conf/httpd.conf”的末尾添加以下内容。

注意:这里不需要强制 VirtualHosting,我刚刚添加了一个自定义错误日志和 DocumentRoot,它可以派上用场

Alias /web "/var/www/html/secret/"
<VirtualHost 192.168.1.6:80>
    ServerAdmin root@server.onitroad.com
    ServerName onitroad-server
    DocumentRoot /var/www/html/secret
    ErrorLog logs/error_log

 <Directory "/var/www/html/secret">
  AuthType Basic
  AuthName "Secret Files"
  AuthUserFile /etc/httpd/.htpasswd
  Require user jack
 </Directory> 
</VirtualHost>

AuthType 指令选择用于验证用户的方法。
最常用的方法是Basic。
但是,重要的是要注意,基本身份验证将密码从客户端发送到未加密的服务器。
因此这种方法不应用于高度敏感的数据,除非伴随着 mod_ssl。

保存并退出文件,然后重新启动服务

# systemctl restart httpd
# systemctl is-active httpd
active

现在我们可以尝试使用我们使用的别名 /web 访问页面,它必须提示输入用户名和密码。

如何为多个用户提供身份验证?

这些步骤是相似的,同样可以使用前面解释的两种方法来完成。
为了这个例子,我将使用 <Directory> 方法来举例

使用以下命令和之前使用的相同密码文件为所有其他用户分配密码

# htpasswd  /etc/httpd/.htpasswd ankit
New password:
Re-type new password:
Adding password for user ankit
# htpasswd  /etc/httpd/.htpasswd cherry
New password:
Re-type new password:
Adding password for user cherry

现在,如果我们检查我们有三个不同用户的三个条目

# cat /etc/httpd/.htpasswd
cherry:$apr1$//0qsYXA$b/YBtjYWNVnAq.ktus1yD.
jack:$apr1$eAmlseNr$F8TRQZvqoxGn5TDmdrT311
ankit:$apr1$bEXxG.Wh$Ejavy56OHpFVBHs8ETah41

接下来,我们需要创建一个组文件,将组名与该组中的用户列表相关联。
该文件的内容将如下所示:

注意:我们可以使用任何名称创建组,并且可以位于任何位置,对我而言,我使用的是以下路径。

# cat /etc/httpd/.groups
GroupName: jack cherry ankit

在这里,我向我的组中添加了三个用户,我将使用 httpd.conf 对其进行身份验证

接下来用以下内容更新 httpd.conf

Alias /web "/var/www/html/secret/"
<Directory "/var/www/html/secret">
        AuthType Basic
        AuthName "Secret Files"
        AuthUserFile "/etc/httpd/.htpasswd"
        AuthGroupFile "/etc/httpd/.groups"
        Require group GroupName
</Directory>

重要的提示:
如果我们希望使用本文中的方法 1,我们可以在“/var/www/html/secret/.htaccess”下使用相同的内容。

这里我们使用“Require group”而不是“Require user”并添加了一个新参数“AuthGroupFile”来指向我们创建的组文件

接下来保存并退出文件并重新启动 httpd 服务以激活我们的更改

# systemctl restart httpd
# systemctl is-active httpd
active

测试看看浏览器是否提示我们进行身份验证

如何在 RHEL/CentOS 7 上使用 htpasswd 和 .htaccess 在 apache (httpd) 中设置密码认证

在 apache 服务器中,我们可以创建受保护的目录,只有具有适当访问权限的尊重用户才能访问该目录。

假设我们安装了 http 包,如果没有,我们可以手动安装它们
安装 httpd 及其所有依赖包

# yum -y install httpd

我在“/var/www/html/secret/”下有一个目录,只能由用户“jack”访问
所以让我们先创建这个目录

# mkdir /var/www/html/secret/

我将在 /var/www/html/secret/中为 jack 创建一个虚拟的 index.html 文件

# cat /var/www/html/secret/index.html
###########
## This is a secret file for jack only
###########

在开始 httpd 配置之前,我们应该为用户“jack”创建 passwd 文件。

注意:这里 jack 不会使用系统的 passwd 文件,而是我们必须创建一个新的文件,Apache 将使用该文件进行身份验证,该文件将由 htpasswd 创建

  • htpasswd 用于创建和更新用于存储用户名和密码的平面文件,用于 HTTP 用户的基本身份验证。
  • 从 Apache HTTP 服务器可用的资源可以仅限于 htpasswd 创建的文件中列出的用户。
  • htpasswd 使用 bcrypt(为 Apache、SHA1 修改的 MD5 版本)或者系统的 crypt() 例程加密密码。
  • htpasswd 管理的文件可能包含不同编码类型的密码的混合;某些用户记录可能具有 bcrypt 或者 MD5 加密的密码,而同一文件中的其他用户记录可能具有使用 crypt() 加密的密码。

使用以下命令语法为用户“jack”创建密码

# htpasswd -c /etc/httpd/.htpasswd jack
New password:
Re-type new password:
Adding password for user jack

注意:我们可以为 .htpasswd 文件提供任何其他安全路径。
对我来说,我正在使用 /etc/httpd

如果你看到这个 .htpasswd 文件的内容

# cat /etc/httpd/.htpasswd
jack:$apr1D7PPz82$cSP2lNCNmzE80dXrXakAI/

其中

-c  创建passwdfile。如果passwdfile已经存在,它将被重写和截断。此选项不能与-n选项组合。

接下来,我们需要将服务器配置为请求密码并告诉服务器哪些用户可以访问。

我们可以通过编辑 httpd.conf 文件或者使用 .htaccess 文件来执行此操作。

例如,如果我们希望保护目录 /var/www/html/secret/,我们可以使用以下指令,放置在文件 /var/www/html/secret/.htaccess 中,或者放置在 httpd/conf/httpd.conf文件中的/etc/<Directory "/var/www/html/secret"> 部分中 。

方法 1:使用 .htaccess 文件

如果我们想使用 .htaccess 文件,我们需要有一个服务器配置,允许将身份验证指令放入这些文件中。
这是通过 AllowOverride 指令完成的,它指定哪些指令(如果有)可以放在每个目录的配置文件中。

由于我们在这里讨论的是身份验证,因此我们将需要一个 AllowOverride 指令,如下所示

AllowOverride AuthConfig

所以让我把它添加到我的 /etc/httpd/conf/httpd.conf
注意:将 httpd.conf 中指向 /var/www 或者 /var/www/html 或者类似路径的所有其他目录变量都注释掉。
或者我们必须将 AllowOverride AuthConfig 添加到所有这些目录变量中才能使 .htaccess 工作,因为我们的秘密目录位于 /var/www/html 下

Alias /web "/var/www/html/secret/"
<Directory "/var/www/html/secret">
AllowOverride AuthConfig
</Directory>

这里我使用了一个可选的别名。

接下来在 /var/www/html/secret/.htaccess 创建一个包含以下内容的 .htaccess 文件

AuthType Basic
AuthName "Secret Files"
AuthUserFile /etc/httpd/.htpasswd
Require user jack

准备好后,重新启动 httpd 服务器

# systemctl restart httpd
# systemctl is-active httpd
active

现在我们可以尝试使用别名 /web 访问页面,它提示必须输入用户名和密码

日期:2020-06-02 22:18:34 来源:oir作者:oir