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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:57:03