有没有人有一个很好的解决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),我认为只让所有者删除文件。
有一个-R
recursion选项,但不会区分文件和文件夹,所以你必须使用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 -l
validation所有者,组和权限来testing所有这些。
注意:您需要注销/更改组才能生效!
我不完全确定你想如何configuration权限,但这可能会给你一个起点。 可能有更好的方法。 我假设你想让这两个用户能够改变/ var / www /
这意味着任何一个用户创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
手册页:
教程