Oracle Linux 8下部分PHP文件权限正常却无法运行求助
问题:部分PHP脚本权限拒绝(仅特定文件名可运行)
环境与现象
- 已部署Oracle Linux 8 + PHP + Apache,整体运行正常
/var/www/html目录下,phpinfo.php可正常执行;但同目录下创建的test.php(内容phpinfo();,权限与phpinfo.php一致)提示权限拒绝,即使设为777也无效- 修改
phpinfo.php内容(如添加查询语句)仍可正常运行,仅特定文件名的PHP脚本能被执行
排查信息
已检查相关配置文件、搜索资料但未找到原因,怀疑与php-fpm相关,无相关使用经验。
审计日志输出
执行命令:
sudo grep -i denied /var/log/audit/audit.log
返回结果:
type=AVC msg=audit(1689293825.039:334): avc: denied { read } for pid=5111 comm="php-fpm" name="test.php" dev="dm-0" ino=18674742 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
Apache错误日志
[proxy_fcgi:error] [pid 5153:tid 140323287488256] [client 10.x.x.x:53042] AH01071: Got error 'Unable to open primary script: /var/www/html/test.php (Permission denied)'
PHP-FPM错误日志(www-error.log)
UTC] PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
解决思路
核心原因
审计日志的AVC拒绝信息明确指向SELinux上下文不匹配:test.php的SELinux类型是user_home_t(用户家目录文件类型),而php-fpm运行在httpd_t域下,SELinux默认阻止该域读取user_home_t类型的文件。这也是为什么phpinfo.php能运行——它的SELinux上下文是正确的httpd_sys_content_t。
修复步骤
- 临时修复单个文件:为
test.php设置正确的SELinux上下文sudo chcon -t httpd_sys_content_t /var/www/html/test.php - 永久修复目录上下文:确保后续在
/var/www/html下创建的文件自动继承正确的SELinux类型sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" sudo restorecon -Rv /var/www/html - 验证:访问
test.php确认正常运行,再次检查/var/log/audit/audit.log是否有新的AVC拒绝记录
内容的提问来源于stack exchange,提问作者incubi
相关产品推荐
相关产品推荐

