使用AFS, Active Directory和SSSD搭建用于集成电路设计的分布式存储系统 【七】AFS的工作原理 5
AFS访问控制的基础知识
在之前的文章里我们已经介绍过 AFS 访问控制的工作原理。简要总结一下:
- AFS 通过定义在目录上的 ACL 控制目录的访问权限。ACL 随目录存储在 Volume 里。
- AFS 通过 Protection Database Server 存储用户和组的信息。
- Cache Manager 访问一个目录时,File Server 从token里提取用户的身份信息,从 Protection Database Server 里查询用户所属的组,然后和目录的 ACL 比较,确定用户的访问权限。
为了给予某个用户访问一个文件的权限,可以将这个文件放入一个该用户可以访问的目录里。为了取消用户访问一个文件的权限,或者将该文件从用户可以访问的目录里移除,或者修改该文件所在目录的 ACL.
用户可以使用命令 “fs la” 来查询一个目录的ACL
fs la path
其中 “la” 是 “listacl” 的缩写。比如
ximeng@eda001:~$ fs la /afs/company.com/u1/ximeng
Access list for /afs/company.com/u1/ximeng is
Normal rights:
system:administrators rlidwka
system:authuser l
ximeng rlidwka
上面这个例子里显示了目录 /afs/company.com/u1/ximeng 的 ACL。这个 ACL 里有三条记录。每一条记录由前后两部分做成,前部是记录适用的对象,比如 ximeng, 后部是记录的权限,比如 rlidwka.
AFS 用于标记权限的字母和 Linux/Unix mode bit 不太一样。ACL 里的权限更多。我们先用人类语言来解释一下上面三条记录的意义,然后再正式介绍权限编码的意义。
第一条记录
system:administrators rlidwka
给予了一个特殊组 AFS 定义的所有7种权限。这个组叫 system:adminstrators,它包含了 AFS 所有系统管理员的账号。这 7 种权限用字母编码形式记为 rlidwka.
第二条记录
system:authuser l
给予了另一个特殊组 “l” (查询)权限。这个组叫 system:authuser,它包含了AFS Cell 的所有注册用户。
第三条记录
ximeng rlidwka
给予了用户 ximeng 系统定义的所有 7 种权限。这个授权很好理解,ximeng 应该对自己的个人目录有所有权限。
“l” 权限是什么意思呢?它给予了一个用户 “cd” 进入该目录的权限。也就是说它类似于Linux里目录的 ”x” 权限。仅仅拥有 ”l” 权限不足以读取目录下文件的内容,但可以查看目录下的文件名。
AFS 的一个重要规则:为了给予一个用户或组访问一个目录的权限,必须保证这个用户或组对该目录的所有父目录都至少有 “l” 权限,一直到第一级目录 /afs 为止。
比如,如果你希望给予用户 alice 访问你的个人目录下某个子目录 ~/a/b 的权限,那么你需要保证 alice 对 ~/ 和 ~/a 都至少有 “l” 权限。
正是因为存在上面这个规则,所以在大部分 AFS Cell 的部署策略里,系统管理员在创建用户个人目录时都会在其 ACL 里添加一条记录,给予system:authuser这个组 ”l” 权限,以便用户可以将其子目录进一步开放给其他用户。
如果采取了上述策略,系统管理员应该给予普通用户足够的提示。用户不应该将敏感信息包含在其个人目录下的文件名里。如果非要这样做,用户需要自己取消个人目录 ACL 里给予 system:authuser 的 ”l” 权限,或者将这些文件放入一个子目录里,然后在子目录的ACL里取消 system:authuser 的 ”l” 权限。
除了给予用户进入目录列举文件的权限,”l” 还给予用户列举 ACL 的权限。即用户需要有 “l” 权限,才能对一个目录使用