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

Ubuntu下Apache与PHP/PHP-CLI访问权限异常问题求助

问题分析:Apache下PHP无法访问NFS挂载目录,但CLI正常

环境与问题概述

  • 系统环境:Ubuntu,运行搭载PHP7.4的Apache服务器,Apache默认运行用户为www-data
  • 权限配置:
    • 网站目录/var/www/html/contract-request:递归权限drwxrwxr--,所有者及组均为www-data,个人用户属于www-data组
    • 文件存储目录/var/www/data/contract-request及其子目录:权限完整,所有者/组为www-data,该目录为谷歌云环境下NFS挂载的外部存储
  • 异常现象:PHP应用抛出错误:

    Exception information: Message: FritIdentifierDocumentStructure: the path /var/www/data/contract-request/application_file doesn't exist.

  • 测试验证:
    编写PHP测试脚本:
    if(!is_dir('/var/www/data/contract-request/application_file')) {
            echo 'Nope. Nothing!'.PHP_EOL;
    } else {
            echo 'Found it!'.PHP_EOL;
    }
    
    • 通过PHP-CLI执行:输出Found it!,可正常识别目录
    • 通过浏览器访问(Apache运行该脚本):输出Nope. Nothing!,提示路径不存在

fstab挂载配置

$ cat /etc/fstab
LABEL=cloudimg-rootfs   /    ext4   discard,errors=remount-ro   0 1
LABEL=UEFI  /boot/efi   vfat    umask=0077  0 1
10.xx.xx.xx:/vol-d-shared-host-201/zzz-d-iadm-intra/gl-d-xxx-xxintra7/opt          /opt          nfs        rw,hard,rsize=65536,wsize=65536,vers=3,tcp   0   0
10.xx.xx.xx:/vol-d-shared-host-201/zzz-d-iadm-intra/gl-d-xxx-xxintra7/var-www/data  /var/www/data  nfs       rw,hard,rsize=65536,wsize=65536,vers=3,tcp   0   0
//nas002.zzz-mobile.de/projects          /home/System/web-prj cifs   vers=1.0,dir_mode=0777,file_mode=0777,uid=www-data,gid=www-data,noserverino,nounix,rw,mfsymlinks,x-systemd.requires=/opt/zzz/cifs,credentials=/opt/zzz/cifs/cifs-credentials.nas002   0   0

可能的原因及排查方向

1. AppArmor访问限制

Ubuntu默认启用AppArmor,可能阻止Apache进程访问NFS挂载目录:

  • 查看AppArmor状态:sudo aa-status,确认Apache的profile处于enforce模式
  • 检查Apache的AppArmor配置文件/etc/apparmor.d/usr.sbin.apache2,确认是否包含允许访问/var/www/data/**的规则;若缺失,添加规则后重新加载AppArmor:sudo systemctl reload apparmor

2. NFS服务器端权限或挂载参数问题

  • NFS服务器端权限:即使客户端显示权限正确,NFS服务器可能限制了对应UID/GID的访问。检查服务器端/vol-d-shared-host-201/zzz-d-iadm-intra/gl-d-xxx-xxintra7/var-www/data/contract-request/application_file的权限,以及/etc/exports中的导出规则,确保允许客户端的www-data用户(对应UID)访问
  • 挂载参数缺失:当前NFS挂载项未指定uid=www-data,gid=www-data,可能导致Apache的www-data用户被映射为NFS端的匿名用户,无访问权限。修改fstab中的NFS挂载行,添加该参数后重新挂载:sudo mount -o remount /var/www/data

3. Apache chroot限制

若Apache配置了chroot环境,进程会被限制在指定目录内,无法访问/var/www/data(不在chroot根目录下)。检查Apache配置文件(如apache2.conf或站点配置)中是否存在ChrootDir相关设置。

4. 模拟Apache用户访问验证

通过sudo -u www-data ls -ld /var/www/data/contract-request/application_file模拟Apache运行用户的访问,查看是否能正常列出目录。如果该命令报错,说明www-data用户实际无访问权限,需排查权限或挂载问题;如果能正常列出,则重点排查AppArmor或Apache配置限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:10:35