You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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。

修复步骤

  1. 临时修复单个文件:为test.php设置正确的SELinux上下文
    sudo chcon -t httpd_sys_content_t /var/www/html/test.php
    
  2. 永久修复目录上下文:确保后续在/var/www/html下创建的文件自动继承正确的SELinux类型
    sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
    sudo restorecon -Rv /var/www/html
    
  3. 验证:访问test.php确认正常运行,再次检查/var/log/audit/audit.log是否有新的AVC拒绝记录

内容的提问来源于stack exchange,提问作者incubi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:17:25