问题出现得很突然,日志倒是留得挺全。CentOS 7 上把上传目录单独分了一块盘,权限设成 666 属主 www,PHP 写文件仍报 Permission denied,script 也无法执行,日志里只说失败不说明原因。

刚开始盯着「上层目录缺少执行位,路径中间的某一级没有 x 权限同样进不去」,折腾了半个多小时,排掉了。

真正麻烦的地方在于,几个原因的现象几乎一样。分区挂载带了 noexec,脚本和二进制无法执行,报错常被应用笼统写成权限问题。另一种情况是SELinux 上下文不对,即使权限位放开写入也被策略拦下。

还有一种情况,挂载时用了 ro 或者目录被保护挂载覆盖,写请求直接被拒。

先看挂载选项里有没有 noexec 和 ro

findmnt -T /data/upload -o TARGET,OPTIONS

再往下确认拒绝来自内核策略还是权限位

ausearch -m avc -ts recent 2>/dev/null | tail -10

剩下的就是逐级检查路径上的执行位

namei -l /data/upload/2026/11/

别只看报错消失,验证要多做一步。findmnt 的 OPTIONS 里不再有 noexec,namei -l 显示每一级都有 x 位,PHP 进程写入测试文件成功且脚本能正常跑通。

noexec 是运维为了防木马加上去的,业务需要执行时最好单独留一个小分区,而不是整盘放开,放开后记得重新收口。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189