故对于"静态"的档案来说,此中的权限属性即确定了“哪些身份的人拥有什么样的权限可以去操纵档案”,如上图所示。
而对于"动态"的进程来说,操纵系统又为进程分配了它们的用户身份,即有效用户身份euid、有效群组身份egid、群组身份groups、还有继承uid、继承gid。【注:不管进程是否有SUID/SGID加持,进程都将拥有这5个身份,只不过无差异时 id 命令默认不表现euid/egid而已,默认euid=uid、egid=gid】
(1)权限匹配流程
于是,当一个进程想要操纵某个档案文件时,操纵系统便会根据进程拥有的身份和档案拥有的权限标志去做判定。判定流程如下(示例以读权限 r 举例):
如果进程的 euid 即是档案的 owner-id,则继承开始判定档案拥有者对应的权限位中是否包罗 r 权限,若包罗则文件被进程顺遂读取,若不包罗则提示进程无权限,此时不管 r 权限包罗与否判定流程都将不再继承;如果进程的 euid 不即是档案的 owner-id,则开始步调 2 的判定。
如果进程的 groups 包罗档案的 group-id,则继承开始判定档案所属群组对应的权限位中是否包罗 r 权限,若包罗则文件被进程顺遂读取,若不包罗则提示进程无权限,此时不管 r 权限包罗与否判定流程都将不再继承;如果进程的 groups 不包罗档案的 group-id,则开始步调 3 的判定。
此时直接开始判定档案其它人对应的权限位中是否包罗 r 权限,若包罗则文件被进程顺遂读取,若不包罗则提示进程无权限。至此,流程不再递归判定,直接竣事。