Arch系统Nginx部署PrestaShop时PHP有权限仍无法写入问题求助
故障原因
- 基础目录权限缺失:你当前站点根目录
/usr/share/nginx/presta的权限为drwxr-xr-x,属主http仅有读、执行权限,无写入权限,是触发报错的直接诱因。 - AppArmor访问控制拦截:Arch系统默认启用AppArmor强制访问控制,默认的php-fpm策略禁止向
/usr/share/nginx目录写入数据,即便权限设为777也会被拦截。 - php-fpm systemd沙箱限制:Arch官方源提供的php-fpm包默认启用systemd沙箱保护,仅放开了白名单目录的写入权限,站点目录不在白名单内时会被禁止写入。
解决方案
步骤1:配置正确的基础权限
执行以下命令设置目录文件权限,避免使用777这类不安全的全局权限:
chown -R http:http /usr/share/nginx/presta find /usr/share/nginx/presta -type d -exec chmod 755 {} \; find /usr/share/nginx/presta -type f -exec chmod 644 {} \;
步骤2:放行AppArmor写入规则
执行命令检查是否有AppArmor拦截日志:
dmesg | grep -i apparmor | grep php-fpm
如果输出包含DENIED和/usr/share/nginx/presta相关内容,编辑AppArmor的php-fpm配置文件/etc/apparmor.d/php-fpm,在权限规则段添加以下内容:
/usr/share/nginx/presta/** rw,
保存后重载AppArmor规则:
systemctl reload apparmor
步骤3:添加php-fpm systemd写入白名单
编辑php-fpm服务的覆盖配置:
systemctl edit php-fpm.service
在打开的编辑器中添加如下配置:
[Service] ReadWritePaths=/usr/share/nginx/presta
保存退出后重载systemd配置并重启php-fpm服务:
systemctl daemon-reload systemctl restart php-fpm
步骤4:验证权限
重新运行你的fwrite测试脚本,确认写入正常后即可启动PrestaShop安装流程。
内容的提问来源于stack exchange,提问作者Carl Johnson
相关产品推荐
相关产品推荐

