我运行的是 Ubuntu 10.04 LTS 服务器。我使用的软件栈包括
- PHP fpm-fcgi 版本 5.3.6
- Web 服务器:nginx/0.8.54
为了使 wordpress 等工具正常工作。我已经完成了chown www 数据:www 数据在我的 public_html 文件夹中。所有文件都可以通过 nginx 轻松修改,并且自动更新 wordpress 等功能可以按预期工作。
当我通过 ftp 登录并尝试上传新文件或更改现有文件时,就会出现问题。由于我的用户名是 Gaurish,并且所有文件都归 www-data 所有,所以我的请求被拒绝。
Response: 220 (vsFTPd 2.2.2)
Command: USER gaurish
Response: 331 Please specify the password.
Command: PASS ************
Response: 230 Login successful.
Command: OPTS UTF8 ON
Response: 200 Always in UTF8 mode.
Status: Connected
Status: Starting upload of /tmp/cachegrind.out.5513
Command: CWD /home/gaurish
Response: 250 Directory successfully changed.
Command: PWD
Response: 257 "/home/gaurish"
Command: TYPE I
Response: 200 Switching to Binary mode.
Command: PORT 192,168,1,6,214,6
Response: 200 PORT command successful. Consider using PASV.
Command: STOR cachegrind.out.5513
Response: 553 Could not create file.
Error: Critical error
Status: Disconnected from server
我需要一种方法,让我 (gaurish) 和 nginx (www-data) 都能修改文件。有什么想法吗?
答案1
正如其他人之前回答的那样,共享组是一种方式。
更复杂的替代方案是使用源代码修订控制系统,如 CVS、Subversion、GIT 等。然后,作为 Web 服务器运行的单个管理 cgi 页面可以更新服务器上所有已修改的文件。这还可以确保在覆盖之前备份以前的文件,因为源代码控制是强制执行的。
无论你做什么,都要学习和使用 SSH 和 SCP,而不是 FTP。如果绝对需要,FTP 应该用于方便用户,而不是用于系统管理。
答案2
您需要做一些事情才能获得完整的解决方案:
- 将您的用户添加到
www-data
组(按照@fbh 的回答)。 - 配置FTP 服务器 umask以便
007
使用组写入权限上传文件。 - 设置 setgid 标志(
g+s
) 在您的目录上,以便新文件由目录的组拥有,而不是文件创建者的主要组。
答案3
将您的用户添加到 webservers 组
usermod -a -G www-data gaurish