Apache和本地用户的用户权限

我试图允许对user1www-data (apache)/ home / user1 / public_html /文件夹的文件的权限

我已经被指示运行这些命令:

 sudo chown -R www-data:user1 /home/user1/public_html/ sudo chmod g+s /home/user1/public_html/ 

现在,www-data可以编辑/删除/添加文件到/ home / user1 / public_html /,但是user1不能编辑任何东西。

我该如何解决这个问题?

谢谢,

实现这个最好的方法是使用posix ACL 。 标准的UNIX文件权限不真的把它剪掉。 你可以用一些简单的方法来实现,但它并不仅仅是一个杂凑,基本上它不是一个简单的解决scheme。

使用ACL可以毫不费力地解决这个问题。 要做到这一点,你可以使用下面的命令:

 setfacl -R -m www-user:rwx /home/user1/public_html setfacl -R -d -m www-user:rwx /home/user1/public_html setfacl -R -m user1:rwx /home/user1/public_html setfacl -R -d -m user1:rwx /home/user1/public_html 

-d标志会导致新文件inheritance您在目录中设置的ACL。

有一些注意事项要记住。

  1. 你的文件系统必须支持它(现在大部分都可以通过在大多数文件系统上使用ACL支持重新挂载文件系统来启用它们)。 像NFS的东西不会工作。
  2. 标准的Unix组ACL成为一个掩码。 IE如果一个文件说g + x文件可以用上面的命令执行。 如果其gx文件不可执行,则不pipe在ACL中是否设置了权限rwx 。 这可以确保您避免在必须标记acl中所有目录rwx和所有文件rw-的情况

这可以明智地解决问题,并允许各种scheme的组合:

  • 它强制执行最小权限,因为您不需要开始修改用户的组成员资格。
  • user1可以创build一个文件,这个文件以后可以通过www1-user进行修改(所以user1可以上传SFTP上传的内容,之后可以通过apache中的CMS删除和/或修改),反之亦然。
  • Apache仍然在一个系统帐户,避免必须使用SetUID替代方法来更改Apache主题(用户)。
  • 修改仅适用于特定的目录结构,并且不会无意中允许www-user或user1访问您不希望其访问的文件系统树的其他部分。
  • 更改或撤销权限是一个微不足道的变化。

这是解决这类问题的首选方法。 这是一个简单的,不中断的,微不足道的变化。

Apache不需要到处写,为此你可以指定tmp,upload等。 文件夹。 因此,您可以将public_dir的权限设置为apache用户可以读取和执行的权限:

 sudo chown user1:www-data /home/user1/public_html sudo chmod 0750 /home/user1/public_html 

public_html目录下的所有其他文件可以在user1权限下,只能被“其他”(apache在这里)读取。 从安全angular度来看,这也更好。 正如我写的,只有必要的文件/文件夹应该由apache用户写入。

最简单的解决scheme是确保www-data可以将所有目录导航到/ home / user1 / public_html目录,并使用来自public_html和down的755目录权限。 public_html目录中的文件需要是世界(其他)可读的。 这些命令应该启用访问:

 sudo chmod o+x /home sudo chmod 0+x /home/user1 find /home/user1/public_html -type d ! -perm -005 -print0 | xargs -0 sudo chmod o+rx find /home/user1/public_html -type f ! -perm -004 -print0 | xargs -0 sudo chmod o+r 

第一个命令可能不是必需的。 有些系统严格限制对主目录的访问,第二条命令解决了这个问题。 它确实允许在主目录中打开文件,但是不允许列出目录。

最后三个命令可以被sudo删除的用户运行。

如果你这样做:

 sudo chown -R www-data:user1 /home/user1/public_html/ 

您赋予了用户www-data和组user1的所有权。

附:

 sudo chmod g+s /home/user1/public_html/ 

你在这个文件夹上设置执行的组ID,我从来没有见过这样做,我不知道为什么会这样做…它通常用于二进制文件。 你正在搞这件事。 除非你find一个合理的理由,否则:

 sudo chmod gs /home/user1/public_html/ 

并设置user1(属于组user1)和www-data的读写权限。

 sudo chmod -R 770 /home/user1/public_html 

现在,您可以通过www-data和user1组中的所有用户(我假设只有user1是其中的一部分)对每个文件进行写入和读取。

这是很脏的,因为你可能想要一些文件只能由用户写入。 作为一名开发人员,在服务器上“上传”文件并不是很less,而不是仅仅编辑文件,通过将文件外包到一个安全的程序sftp / scp,解决了正确的pipe理问题。 你甚至可以尝试使用SCM。

你最有可能在问题中的命令错误的user1和万维网数据。

你不想给apache默认的写权限 – 并且让apache用户成为主人。

尝试这个:

 sudo chown -R user1:www-data /home/user1/public_html/ sudo find /home/user1/public_html/ -type d -exec chmod 0755 {} \; -or -type f -exec chmod 0644 {} \; 

这将使你的所有者,并使用相同的组作为apache,然后将权限重置为755的文件夹和644的文件。 7 5 5和6 4 4权限是适用于apache的权限 – 只允许apache写入权限到它绝对需要写入的文件夹。