我坦率地承认这是家庭作业:
想象一下,您和您的朋友在您以前的学校里接待了一名 IT 教师。与会者名单位于随附的文本文件中。您需要管理目录
documents
和tasks
的权限solutions
。编写一个脚本,为所有与会者创建帐户并设置权限,如下所示:
- 每个与会者都有权读取将在该目录中创建的文件
documents
,而您的朋友有权读取和修改该目录中的文件,但不能添加或删除任何内容;- 每个与会者都有权读取该目录中将出现的文件
tasks
,而您的朋友则拥有该目录的所有权限;- 每个与会者都有权将自己的解决方案放入目录中
solutions/<ID of attendee>-<ID of task>
;- 您的朋友拥有
solutions
目录树的所有权限,而与会者则看不到其他人的解决方案。
这是基本文件权限 ( chmod
, umask
) 和 ACL ( setfacl
)的作业
现在让我困惑的是:
我们必须为尚不存在但将来会创建的文件设置细粒度的权限?!?!
据我了解:
umask
允许我们为新创建的文件设置默认权限;但这些只是基本的所有者-组-其他权限,因此我无法真正区分我朋友的权限、与会者的权限和与会者同行的权限;setfacl
只允许我为已存在或我创建的文件设置权限,但不允许为将来创建的文件设置权限!
所以我不知道如何做这个作业。有人可以告诉我正确的道路吗?
答案1
一些引导您走向正确方向的提示:
前交叉韧带手册页部分介绍了默认 ACL:
文件对象的访问 ACL 在使用以下任一方式创建对象时被初始化:创建(),mkdir(),马克诺德(),mkfifo(), 或者打开()功能。如果默认 ACL 与目录关联,则模式创建文件对象的函数的参数和目录的默认 ACL 用于确定新对象的 ACL:
新对象继承包含目录的默认 ACL 作为其访问 ACL。
修改与文件权限位对应的访问 ACL 条目,以便它们不包含 mode 参数指定的权限中未包含的权限。
在目录上使用粘性位,您可以更改在目录中创建的新文件的所有者/组。在目录中创建的文件将具有粘性目录的所有者/组,而不是默认组。欲了解更多详情,请参阅问题:粘性位如何工作?