![Linux 中的 ACL 与组权限](https://linux22.com/image/1349808/Linux%20%E4%B8%AD%E7%9A%84%20ACL%20%E4%B8%8E%E7%BB%84%E6%9D%83%E9%99%90.png)
我想允许一组学生访问共享的 Web 服务器。学生以小组形式工作,每个小组的主目录都包含一个www
文件夹,该文件夹应该可供 apache2 的共享实例访问。例如,如果 Bob 和 John 属于 MyPetShop 组,则您将john
在john students mypetshop
组中拥有用户。我不想授予www-data
学生会员资格,以避免他们直接弄乱其他人的页面*。
并且他们的主目录将位于/home/students/mypetshop
,并且/home/students/mypetshop/www
用户 可以读取/写入www-data
。我可以使用以下方法实现此目的
- 为这些文件夹设置一个粘性组
www-data
(这样它们的权限就会是drwxrwsrwx john www-data
)。这样就会出现这样的问题:john 对其文件使用了错误的权限,因此 bob 或 www-data 无法访问这些文件;或者 www-data 创建了一些文件,john 和 bob 只有在他们花了一些时间调整权限后才能接触到这些文件。 - 标准组所有权( ),以及允许访问这些文件夹的
mypetshop
ACL (通过)。www-data
setfacl -m d:g:www-data:rwx www
ACL 会按预期在这里工作吗?默认 ACL 是否会在子文件夹中自动继承,或者是否有一些我所不知道的更简单的设置方法?
(*)是的,这不是万无一失的,因为他们可以编写 www-data-executed phps 来为他们完成这件事......
答案1
我已经实现了 ACL 版本,它运行良好。学生无法使用标准 SSH/SFTP 客户端(不支持 ACL)来弄乱他们的组权限。对于共享主机、安全性不是很高的设置,绝对推荐使用。
顺序如下:
- 添加 ACL 工具
setfacl
和getfacl
(debian/ubuntu 包acl
) - 将该
acl
选项添加到您的相关文件系统/etc/fstab
(没有此挂载选项的文件系统会默默忽略任何 ACL;这充其量是令人困惑的)。 - 用于
setfacl
允许用户www-data
目录遍历访问所有/home/stucents/*/www
文件夹 - 用于
setfacl
允许每个www
文件夹内相关组成员和用户具有默认(=粘性)读写执行访问权限www-data
在具有默认 ACL 的文件夹中创建的任何文件或文件夹都将继承该 ACL。