当你创建一个 PHP 站点,同时启用 FTP 时,一定碰到过以下类似的问题:
* PHP 可以写入文件,但是 FTP 无法上传文件
* FTP 可以上传文件 ,但是 PHP 无法写入文件
* PHP 和 FTP 都无法写入文件
这些都是由于网站目录所有者和权限配置有问题引起的。
由于目前 Nginx 中创建站点时并不会为您自动设置目录的所有者和权限,这些操作需要你自己手工进行(新版本网站管理将支持自动设置目录权限,请关注开发计划)。
由于设置方法过于复杂,如果 FTP 只是你自己用来文件管理,建议你直接使用面板内置的文件管理应用,或直接使用 SFTP(可下载 WinSCP 这类客户端),更加安全。
修复办法:
一、 设置网站目录权限为 0777(仍有瑕疵)
0777 指的是所有用户都可以在这个目录中写入文件,这种设置方法最为简单。
但是存在一个问题,新创建的文件和目录的权限不会保持 0777,仍然会产生 PHP 或 FTP 无法写入文件的问题。
比如:
* 由 FTP 上传一个目录后,使用 PHP 在这个目录中写入文件时,则会失败。
* 由 PHP 写入的文件,在 FTP 中无法删除。
二、统一目录所有者和 PHP 和 FTP 的运行用户(完美)
将这是最标准的解决方法,如果 PHP 和 FTP 的运行用户就是目录所有者,自然不会存在写入权限的问题。
请注意,我们在说“网站执行写入文件操作”时,这里的在写入文件的进程是 PHP,并不是 Nginx,因此不必理会 Nginx 的运行用户。
由于 PureFTPd 无法使用 ID 小于 500 的用户作为 FTP 用户关联的系统用户,我们需要新建一个系统用户专门用于该网站。
操作步骤示例:
1. 进入【系统用户管理】,添加系统用户 www
2. 进入【PHP】- 运行池管理,修改运行池用户和组为 www
注意,修改完运行池用户和组后,还要同时修改运行池引用到的相关文件和目录的权限,这些文件和目录可以在运行池配置的“源文模式”中找到,如:
进入【文件管理】将这些文件和目录的所有者改为 www。
3. 进入【PureFTPd服务器】,添加用户,设置所属用户和组为 www
4. 进入【文件管理】,将网站目录用户和组设置为 www