一个经典的 Linux 服务器权限问题,将网站所有权交给Apache用户,ftp用户就无法上传下载。网站所有权交给ftp用户,通过浏览器上传文件,甚至浏览,又出现问题。
通常涉及到 FTP 用户、网站服务用户(Apache) 和 文件所有权/权限 之间的冲突。
我的网站,是使用Wordpress部署在阿里云服务器的Ubuntu系统上的,以此为例让我们来分析一下遇到的问题和对应的解决方案:
报错及原因分析
FTP 报错 553 Could not create file,意味着 wpftp 用户(我的ftp用户名)没有在目标目录下创建或修改文件的权限。
- 尝试过把网站权限交给
wpftp用户,结果导致浏览器无法访问:这是因为 Apache 服务是以其自己的用户(通常是www-data或apache)来运行的。如果文件的所有者是wpftp,并且权限设置不正确(例如,只有所有者有读写权限),Apache 用户就无法读取这些文件,导致网站内容无法正常显示。 - 如果权限交给 Apache 用户,FTP 又会失效:这是因为文件所有者是 Apache 用户,而FTP 客户端是以
wpftp用户身份登录的。同样,如果权限设置不正确,wpftp用户就没有足够的权限来修改或上传文件。
解决方案
要解决这个问题,需要让 Apache 用户和 FTP 用户都能在网站目录上拥有合适的权限。最好的方法是创建一个共享权限的组。
下面是分步操作,请通过 SSH 连接到你的 Ubuntu 服务器执行这些命令。
1. 创建一个共享组并添加用户
首先,创建一个新的用户组,例如 webmasters,然后将 Apache 用户和你的 FTP 用户都添加到这个组中。
- 使用Putty连接服务器
- 创建组
sudo groupadd webmasters
- 将 Apache 用户添加到组: 通常,Apache 用户的名称是
www-data。
sudo usermod -a -G webmasters www-data
- 将 FTP 用户添加到组: 我的 FTP 用户名是
wpftp。
sudo usermod -a -G webmasters wpftp
2. 修改网站目录的所有权和权限
接下来,修改整个 WordPress 网站目录的所有者和权限,使其归属于 www-data 用户和 webmasters 组。
- 修改所有权: 将网站根目录
/var/www/wordpress的所有者设置为www-data,所属组设置为webmasters。
sudo chown -R www-data:webmasters /var/www/wordpress
- 修改目录权限: 将所有目录的权限设置为
2775。这个权限设置非常重要:7(rwx):所有者www-data拥有读、写、执行权限。7(rwx):组成员webmasters拥有读、写、执行权限。5(r-x):其他用户只有读和执行权限。2(setgid):新创建的文件或子目录会自动继承父目录的组,确保未来 Apache 和 FTP 用户创建的文件都能继续保持相同的权限。
sudo find /var/www/wordpress -type d -exec chmod 2775 {} \;
- 修改文件权限: 将所有文件的权限设置为
664:6(rw-):所有者www-data拥有读、写权限。6(rw-):组成员webmasters拥有读、写权限。4(r–):其他用户只有读权限。
sudo find /var/www/wordpress -type f -exec chmod 664 {} \;

最终检查
执行完以上步骤后,权限配置应该就正确了。
- 浏览器访问:Apache 服务(以
www-data用户身份运行)现在是文件和目录的所有者,并且拥有完全的读写权限,因此可以正常访问网站。 - FTP 上传:
wpftp用户现在是webmasters组的成员,而所有网站文件和目录都属于这个组,并且该组拥有读写权限。这意味着wpftp用户可以通过 FTP 正常上传、修改和删除文件。
如果还有问题,需要确保 proftpd 或 vsftpd 服务配置没有特别的限制。不过,通常情况下,上述权限配置就能解决类似问题。
阅读量:
344