群晖WordPress为何总要FTP密码?

11 人参与

在 Synology NAS 上部署 WordPress 时,系统常常弹出“请输入 FTP 账户和密码”的对话框,这背后并非偶然,而是文件系统权限与执行用户不匹配的直接表现。NAS 的 Web Station 通常以 http(或 www-data)用户运行 PHP,而 WordPress 在执行升级、插件安装等写操作时,会尝试以 nobody 身份写入核心目录。两者权限差距导致写入失败,WordPress 便退回到最保守的 FTP 方式以获取写权限。

权限错位的根源

Synology 的文件共享服务(DSM)默认把共享文件夹的所有者设为 admin,而访问 Web 服务的进程则使用 http 用户。若未手动修改文件夹 ACL,http 只能读取,无法创建或覆盖文件。WordPress 在调用 wp-admin/upgrade.php 或插件安装脚本时,检测到写入受阻,便自动切换到 ftpssh2ssh 方式,要求提供外部传输凭证。

实用的两步纠正方案

  • wp-config.php 中加入 define('FS_METHOD', 'direct');,强制所有文件操作走 PHP 本身的读写权限。
  • 为 WordPress 根目录及 wp-content 子目录设置适当的 POSIX 权限:
    目录 755rwxr-xr-x),文件 644rw-r--r--),wp-config.php 进一步收紧至 600
  • 在 DSM 的“共享文件夹”‑>“权限”‑>“高级权限”里,将 http(或对应的 www-data)用户加入“读写”组,确保 PHP 进程拥有实际的写入权。
  • 若使用 zip 解压插件,务必在 Web Station‑>PHP 设置中勾选 zip 扩展,否则 WordPress 会回退到 FTP。

常见误区与排查技巧

很多用户误以为只要把文件夹所有者改为 http 就能解决问题,实际上 DSM 的 ACL 仍可能限制写入。检查时,可在终端执行 ls -l /volume1/web/wordpress,确认属于 http 并且组权限为 rw。如果发现 nobody 仍是执行用户,说明 PHP-FPM 池的 user 配置未同步,需要在 /etc/php-fpm.d/www.conf 中手动指定为 http,随后重启服务。

“FTP 只是一种后备手段,真正的解决之道在于让 Web 进程本身拥有写权限。”

把权限纠正到位后,WordPress 的自动升级、插件安装便不再弹出密码框,整个站点的维护流程也随之顺畅。只要记得在每次 DSM 系统更新后重新核对 http 的 ACL,问题基本可以被彻底根除。

参与讨论

11 条评论
  • 无畏战车

    我试过把文件夹属主改成http,结果DSM ACL还拦着,折腾半天才发现要改php-fpm池。

  • 耐心的沙漏

    这个方法靠谱吗?把wp-config改成direct会有安全风险吗,谁解释下。

  • 云逸

    前几天刚搞完这个,确实折腾了好久,最后在DSM里把http加进读写组才行。

  • 熬夜秃头协会

    权限这事儿真坑,照着改了FS_METHOD就不问了,省心多了。

  • 孤独的牧星人

    感觉说明清楚了,照着改权限和php配置基本能稳定运行。

  • 幽冥之子

    为什么zip扩展不勾选就回退FTP?这细节之前真没注意,学习了。

  • 奶泡

    要是有人怕出错,先在测试目录练手,别一上来就改生产站权限,风险太大。

  • 一路向西

    我之前也踩过这坑,php-fpm的user没对上导致nobody写不进去,改完重启就正常了。

  • 磨叽牛

    又是权限问题,Synology这类NAS就爱搞一套自己的ACL,折腾人的节奏。

  • 猫咪的呼噜

    能不能写个一步步的脚本自动修复这些权限,手动改太繁琐了,谁来做个工具?

  • 灯笼金

    按作者说法改了应该不会再弹FTP,但每次DSM更新后记得复查ACL,别懈怠了。