文档大纲

解决网站ftp用户与apache用户权限问题

一个经典的 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