权限被拒绝:无法打开密码文件。

权限被拒绝:无法打开密码文件。

我正在使用 Apache Red hat 。

我的 /var/www/html 中有 .htaccess,其权限如下

-rwxr-xr-x. 1 apache apache 127 Dec 18 14:17 .htaccess

.htaccess 中包含以下数据集

AuthType Basic
AuthName "Restricted Access"
AuthUserFile /var/www/html/server-auth/.htpasswd
Require user manu

var/www/html/server-auth/.htpasswd 的权限

-rwxr-xr-x. 1 apache apache 40 Dec 16 19:11 .htpasswd

当我在浏览器上打开网页并输入用户名和密码后,登录提示会再次出现。即使用户名和密码正确。

错误日志:

(13)权限被拒绝:无法打开密码文件:/var/www/html/server-auth/.htpasswd

访问/失败,原因:未配置用户 ID“manu”验证

有什么帮助吗!

答案1

您遇到此问题是因为 SELinux 安全上下文。

为了解决这个问题,您需要更改相关目录/文件的 selinux 标签。

您可以使用 找出 apache 进程安全上下文ps axZ | grep httpd

并检查ls -Z /var/www/html/server-auth/.htpasswd

要调整目录标签,请尝试:chcon命令(类似于chown)。要使其永久生效,您可以使用:semanage命令。

详细说明和必读内容在此处:https://wiki.centos.org/HowTos/SELinux

答案2

启用 SELinux 后,Apache 将无法读取文件,除非它们与正在运行的进程属于同一类型域。

首先检查httpd进程的类型域。

ps axZ|grep httpd

其次,检查.htpasswd文件的类型域。

ls -Z /var/www/html/server-auth/.htpasswd

使用命令chcon更改文件的域以匹配 httpd 进程的域。

例子:

chcon -Rv --type=httpd_sys_content_t /var/www/html/server-auth/.htpasswd

这将永久改变它,但如果文件系统要“重新标记”,则将重新应用默认的 SELinux 上下文。如果用户启动重新标记过程,SELinux 将从 /etc/selinux/*/contexts/files 读取规则并将规则应用于文件系统。为了避免更改使用 修改的文件,chcon您必须使用命令 创建新规则semanage

例子:

semanage fcontext -a -t httpd_sys_content_t /var/www/html/server-auth/.htpasswd

首先使用chcon,通过查看 中的审计日志进行测试/var/log/audit/audit.log。当您确定应用了正确的 SELinux 规则时,使用 保存更改semanage

restorecon如果您需要回滚更改, 请使用该命令。restorecon从 /etc/selinux/*/contexts/files 读取规则并将其应用于文件系统。

例子:

restorecon -v /var/www/html/server-auth/.htpasswd

在这里阅读有关 CentOS 上的 SELinux 的更多信息https://wiki.centos.org/HowTos/SELinux

答案3

尝试将你的 AuthUserFile 包装在

AuthType Basic
AuthName "Restricted Access"
AuthUserFile "/var/www/html/server-auth/.htpasswd"
Require user manu

这为我解决了问题。

相关内容