我正在使用 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
这为我解决了问题。