当前位置:嗨网首页>书籍在线阅读

03-ACL权限检查算法

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

17.2 ACL权限检查算法

与传统的文件权限模型(15.4.3节)相比,对具有ACL的文件进行权限检查时,环境并没有什么不同。检查将按以下顺序执行,直至某一标准得到匹配。

1. 若进程具有特权,则拥有所有访问权限。与15.4.3节所述的传统文件权限模型相类似,这里也有一个例外。执行某文件时,仅当将可执行权限通过至少一条ACL记录授予该文件时,系统才会向特权级进程授予该权限。

2. 若某一进程的有效用户 ID 匹配文件的属主(用户 ID),则授予该进程标记类型为ACL_USER_OBJ的ACE所指定的权限。严谨的说法是在Linux系统中,本节所介绍的ACL权限检测使用的是进程的文件系统ID(请参阅本书9.5节),而非其有效用户ID。

3. 若进程的有效用户ID与某一ACL_USER类型记录的标记限定符相匹配,则授予该进程此记录所指定权限与ACL_MASK型记录值相与(&)的结果。

4. 若进程的组ID(亦即,有效组ID或任一辅助组ID)之一匹配于文件组(对应于标记类型为ACL_GROUP_OBJ的ACE),或者任一ACL_GROUP型记录的标记限定符,则会依次进行如下检查,直至发现匹配项。

a)若进程的组ID之一匹配于文件组,且标记类型为ACL_GROUP_OBJ的ACE授予了所请求的权限,则会依据此记录来判定对文件的访问权限。如果ACL中还包含了标记类型为ACL_MASK的ACE,那么对该文件的访问权限将是两记录权限相与(&)后的结果。

b)若进程的组ID之一匹配于该文件所辖ACL_GROUP型ACE的标记限定符,且该ACE授予了所请求的权限,那么会依据此记录来判定对文件的访问权限。如果ACL中包含了ACL_MASK型ACE,那么对该文件的访问权限应为两记录权限相与(&)的结果。

c)否则,拒绝对该文件的访问。

5. 否则,将以ACL_OTHER型ACE所记录的权限授予进程。

下面举例说明这些与组ID相关的文件授权规则。假定某文件的组ID为100,并受图17-1所列ACL的保护。若组ID为100的某一进程发起系统调用access(file,R_OK),本次调用将会成功(亦即,返回0)。(15.4.4节介绍了access()。)而另一方面,即便标记类型为ACL_GROUP_OBJ的ACE授予了所有权限,系统调用access(file,R_OK | W_OK | X_OK)仍将失败(亦即,返回-1,且将errno置为EACCES),这是由于访问权限是该类型权限与ACL_MASK型记录权限相与(&)的结果,而这一结果禁用了对文件的执行权限。

再拿图17-1举个例子,假定某进程的组ID为102,其附属组ID之一为103。对该进程来说,调用access(file,R_OK)和access(file,W_OK)都会成功,因为这两次调用所请求的文件权限分别匹配标记类型为ACL_GROUP,且标记限定符为102和103的ACE所记录的权限。另外,该进程调用access(file,R_OK | W_OK) 将会失败,因为并无标记类型为ACL_GROUP的匹配记录同时包含读、写权限。