在/ var / www中处理Apache 2用户www-data权限的最佳方式是什么?

有没有人有一个很好的解决scheme来处理/var/www文件? 我们正在运行基于名称的虚拟主机,Apache 2用户是www-data

我们有两个普通用户和根。 所以当弄乱/var/www文件,而不是必须…

 chown -R www-data:www-data 

…一直以来,处理这个问题的好方法是什么?

补充问题:你如何核心权限?

这一直是协作开发环境中的一个问题。

试图扩大@ Zoredache的答案 ,因为我给了我一个自己去:

  • 创build一个新组(www-pub)并将用户添加到该组

    groupadd www-pub

    usermod -a -G www-pub usera ##必须使用-a来追加到现有的组

    usermod -a -G www-pub userb

    为用户 groups usera ##显示组

  • 将/ var / www下所有内容的所有权更改为root:www-pub

    chown -R root:www-pub /var/www ## -Rrecursion

  • 将所有文件夹的权限更改为2775

    chmod 2775 /var/www ## 2 =设置组ID,7 =所有者(root)的rwx,7 =组(www-pub)的rwx,5 =世界的rx(包括Apache www数据用户)

    设置组ID( SETGID )位(2)导致组(www-pub)被复制到在该文件夹中创build的所有新文件/文件夹。 其他选项是SETUID(4)复制用户ID和STICKY(1),我认为只让所有者删除文件。

    有一个-Rrecursion选项,但不会区分文件和文件夹,所以你必须使用find ,就像这样:

    find /var/www -type d -exec chmod 2775 {} +

  • 将所有文件更改为0664

    find /var/www -type f -exec chmod 0664 {} +

  • 将您的用户的umask更改为0002

    umask控制默认的文件创build权限,0002表示文件将有664和目录775.设置这个(通过在我的情况下编辑/etc/profile底部的umask行)意味着由一个用户创build的文件将被其他www组中的用户不需要chmod他们。

通过创build一个文件和目录并使用ls -lvalidation所有者,组和权限来testing所有这些。

注意:您需要注销/更改组才能生效!

我不完全确定你想如何configuration权限,但这可能会给你一个起点。 可能有更好的方法。 我假设你想让这两个用户能够改变/ var / www /

  • 创build一个新组(www-pub)并将用户添加到该组。
  • 将/ var / www下所有内容的所有权更改为root:www-pub。
  • 将所有文件夹的权限更改为2775
  • 将所有文件更改为0664。
  • 将您的用户的umask更改为0002

这意味着任何一个用户创build的任何新文件都应该是用户名:www-pub 0664,任何创build的目录都将是用户名:www-pub 2775.Apache将通过“其他用户”组件读取所有内容。 目录上的SETGID位将强制所有正在创build的文件由拥有该文件夹的组拥有。 需要调整umask来确保写入位已设置,以便组中的任何人都能够编辑这些文件。

至于如何铁杆我去权限。 它完全取决于网站/服务器。 如果只有1-2位编辑,我只需要让他们不要把事情弄得太糟糕,那么我就会变得轻松。 如果企业需要更复杂的东西,那么我会设置一些更复杂的东西。

我想你可能会发现POSIX ACL(访问控制列表)是有帮助的。 与用户:group:other模型相比,它们允许更细粒度的权限模型。 我发现它们更容易保持在我的脑海中,因为我可以更加明确,也可以设置文件系统分支的“默认”行为。

例如,您可以明确指定每个用户的权限:

 setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www 

或者你可以基于一些共享组来做到这一点:

 setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www 

也许你想保持你的Apache用户为只读

 setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www 

手册页:

  • setfacl的
  • getfacl的说明书

教程