如何为FTP创建的文件和目录赋予Apache读写权限的正确权限?


8

我更是Windows使用者,所以请原谅这个基本的Linux问题。

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

发生的事情是,我一直在与谁拥有文件和文件夹并且似乎无法正确解决这一问题进行着不断的斗争。

到目前为止,这是我的理解:

  • www-data用户需要文件夹和文件的所有权,因为/ var / www / html运行脚本下的所有文件都需要它们写入其文件夹。当然,它需要能够通过http服务网页。
  • 我的ftp用户(我们称其为ftpuser)也需要写入/ var / www / html文件夹(递归)的权限,因为我需要能够上传新文件。

考虑到这一点,我创建了一个名为ftpandwww的组,并将所有文件夹和文件都更改为该组。这在一定程度上起作用了...

除了使用FTP客户端创建的任何新文件夹具有错误的权限(我可以通过在FTP客户端下更改它们的权限来纠正)的事实,我几乎在正确的位置,但是www-data无法写入它们因为它们由ftpuser拥有,我最终不得不使用SSH并运行一个对ftpandwww组的chown,以便他们都感到高兴。

如何使我在FTP下创建的所有新文件夹都具有正确的权限(774),并由ftpandwww组自动拥有,因此我可以通过web上载和提供服务(具有写权限),而无需进入和整理所有每次都有新的文件夹和文件?


Answers:


10

在Web根目录上使用SetGID权限,并将其传播给子级。

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

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

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

在您的情况下,请运行以下命令(将XXX替换为所需的权限):

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

然后,新文件和文件夹将具有所有权,例如ftpuser:ftpandwww

编辑:

根据您的用例,SetGID可能足以解决您的问题,但是如果您遇到持续的问题,由于组权限不正确(但所有权是正确的),一个或另一个用户被拒绝写入,那么最好的选择是设置一个自定义的umask,创建文件的用户

如果您在为用户设置UMASK时遇到困难(因为它是守护程序),请在用于设置守护程序用户的UMASK的选项上选中此线程。

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


谢谢,我会尝试一下,当您提到所有文件和文件夹都将拥有此所有权ftpuser:ftpandwww时,www-data是否仍将为它们提供服务并具有(通过脚本)写回文件夹的权限?再次感谢。
omega1

实际的所有者用户很可能是运行该过程的用户,除非它使用本地身份验证(但这完全取决于应用程序)。无论哪种方式,问题的答案都取决于您选择使用的XXX。由于wwwdata和ftpdata都在同一组中,因此如果您输入770,则可以,两个帐户都可以写入对象。如果给它740,则只有所有者用户才能写,但ftpandwww的任何成员都可以读。关键是要对这些操作使用组权限而不是用户权限。
Frank Thomas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.