使用 Ubuntu 16.04.2 LTS 作为 LAMP 堆栈。
我已经设置了一个 Web 项目(Magento),该项目在其整个代码库中具有预定义的工厂八进制权限。我需要向其他开发人员提供访问权限。该项目的位置是 /var/www/webproject,由 Apache 所有者/组 www-data 所有。
因此,我为属于 www-data 组的开发人员创建了一个用户(即 devuser),并授予他们 SSH 访问权限。目前,如果不使用 sudo,用户将无法创建或编辑 /var/www/webproject 中包含的文件,因为八进制权限不允许这样做。
概括:
/var/www/webproject permissions = 750
Files & directories within /var/www/webproject vary but...
user:group assignment for everything = www-data:www-data
问题:为了我的用户开发用户为了能够正确修改 /var/www/webproject 中包含的文件和目录,是否只需递归地将正确的组权限应用于其中包含的所有文件和目录?或者是否有更好的方法可以保留 Web 平台(Magento)的工厂权限,但仍然允许 www-data 组中的任何用户修改文件和目录?
答案1
没有办法允许一个组无条件地编辑他们无权写入的文件。
用户和名为的组www-data
并不相同(每个用户都有一个组,其用户名只包含自己,这就是为什么有一个名为 的组www-data
。如果你将其他人添加到该组中,他们将拥有该组的权限,而不是用户的权限)。
您必须应用于chmod g+w
该组www-data
应具有写入权限的文件。将文件放在 Web 目录 770 中通常是安全的。
答案2
如果您想保留文件夹的相同有效权限,可以使用 POSIX 访问控制列表来完成:
sudo su -
chown -R :web_developers /var/www/webproject
chmod -R 2770 /var/www/webproject
setfacl -R -m u:www-data:rwx /var/www/webproject
setfacl -R -m d:u:www-data:rwx /var/www/webproject
setfacl -R -m g:www-data:r-x /var/www/webproject
setfacl -R -m d:g:www-data:r-x /var/www/webproject
setfacl -R -m o:0 /var/www/webproject
setfacl -R -m d:o:0 /var/www/webproject
从 中删除您的 Web 开发人员www-data
,他不是网络服务器。人们应该始终属于与他们所做的工作相对应的组,然后为这些组授予适当的权限。因此,他是你的一员web_developers
。
最终结果:
- www-data对于现有文件和将来创建的文件始终具有用户权限
rwx
和组权限,模仿原始文件r-x
750
- 该组的任何成员
web_developers
都可以完全rwx
访问所有当前文件以及将来创建的文件 - 其他人没有任何权限(除了
root
- 和分机组sudo
)
另一双鞋:
- 文件已创建组中的用户
web_developers
将归他们所有(尽管www-data
仍具有用户rwx
和组r-x
权限)