如何赋予 FTP 创建的文件和目录正确的权限,以便 Apache 可以读取和写入它们?

如何赋予 FTP 创建的文件和目录正确的权限,以便 Apache 可以读取和写入它们?

我更喜欢使用 Windows,所以请原谅我对这个基本的 Linux 问题的无知。

我正在照看一个仅安装了 Apache2 和 vsftp 的 Linux(Debian)服务器。

现在发生的事情是,我一直在为谁拥有文件和文件夹而苦苦挣扎,但似乎无法找到正确的答案。

这是我目前的理解:

  • www-数据用户需要拥有文件夹和文件的所有权,因为 /var/www/html 下的所有文件都运行脚本,这些脚本要求用户写入文件夹。当然,它需要能够通过 http 提供页面。
  • 我的 ftp 用户(我们称之为FTP用户) 还需要写入 /var/www/html 文件夹(递归)的权限,因为我需要能够上传新文件。

考虑到这一点,我创建了一个名为FTP和www并将所有文件夹和文件的所有权移交给该组。这在一定程度上起到了作用……

我几乎是在正确的地方,除了使用我的 FTP 客户端创建的任何新文件夹都有错误的权限(我可以通过更改 FTP 客户端下的权限来纠正),但 www-data 无法写入它们,因为它们归FTP用户最后我不得不通过 SSH 登录并运行 chown 到 ftpandwww 组,以便他们都很高兴。

如何使我在 FTP 下创建的所有新文件夹都具有正确的权限 (774) 并自动归属于FTP和www我可以通过 Web 上传并提供该组(具有写权限),而不必每次都进入并更改所有新文件夹和文件?

答案1

使用设置GIDWeb 根目录的权限,并将其传播给子目录。

当您在目录上应用 SetGID 时,该目录中的所有新项目都将使用其父级所在的组来创建,而不管用户的默认组成员身份如何。

要将 SetGID 应用于文件系统对象,请chmod在权限代码前面使用 2。
(例如:740 => 2740)。

我在许多 Samba 共享上使用了 SetGID,这样文件始终具有所有者组Users,并且该组的任何成员都可以读取这些文件(我通常使用2750以便只有所有者用户可以写入文件)。

对于您来说,运行如下命令(将 XXX 替换为您想要的权限):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

然后,新的文件和文件夹将以类似的所有权出现ftpuser:ftpandwww

编辑:

根据您的使用情况,SetGID 可能足以解决您的问题,但如果您继续遇到问题,其中一个用户或另一个用户由于组权限不正确(但所有权正确)而被拒绝写入,那么最好的办法是设置一个为创建文件的用户自定义 UMASK

如果你在为用户设置 UMASK 时遇到困难(因为它是一个守护进程),请查看此线程中的选项设置守护进程用户的 UMASK

007如果您希望组成员能够写入和删除文件,并且非所有者没有任何特权,我建议您使用掩码。

相关内容