方法二:使用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
测试看看浏览器是否提示我们进行身份验证
在 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 访问页面,它提示必须输入用户名和密码