首页 理论教育 Linux内核安全模块-访问控制列表详解

Linux内核安全模块-访问控制列表详解

时间:2023-11-22 理论教育 版权反馈
【摘要】:访问控制列表被实现为一个变长的数组:tag有很多值:ACL_USER为某一个用户规定操作许可。上述两种tag可以在ACL中出现多次,也可以根本不出现。ACL_USER_OBJ规定文件属主的操作许可。ACL_MASK的引入是为了给规定的部分操作许可设置一个上限。相关代码在fs/posix_acl.c的posix_acl_ permission函数中。ACL_USER和ACL_GROUP项被称为长格式,这两项的id必须是有效值。其余四项被称为短格式,因为它们的id值无所谓,在文件系统具体实现中,为了节约存储空间,这些项的id可能被省略。ACL_USER_OBJ、ACL_GROUP_OBJ、ACL_OTHER必须出现一次。

Linux内核安全模块-访问控制列表详解

访问控制列表被实现为一个变长的数组

tag有很多值:

(1)ACL_USER为某一个用户规定操作许可。

id存储的是用户id,当进程fsuid与该项id相同时,进程对文件的操作许可由此项ACL entry中的permission-bits规定(后面会讲述操作许可还会受到ACL_MASK项影响)。

(2)ACL_GROUP为某一个组规定操作许可。

id存储的是组id,当进程fsgid与该项id相同时,进程对文件的操作许可由此项ACL entry中的permission-bits规定(后面会讲述操作许可还会受到ACL_MASK项影响)。

上述两种tag可以在ACL中出现多次,也可以根本不出现。有了这两种tag,ACL就可以具体记录一个用户或一个组的操作许可。也就实现了所谓的细粒度访问控制。

(3)ACL_USER_OBJ规定文件属主的操作许可。(www.xing528.com)

(4)ACL_GROUP_OBJ规定文件属组的操作许可。

(5)ACL_OTHER。

当一个进程的fsuid和任何一项ACL_USER中规定的id都不匹配,fsgid和任何一个ACL_GROUP中规定的id都不匹配,fsuid不等于文件的属主,且fsgid不等于文件的属组,此时进程对文件的操作许可由此项中的permission-bits规定。

(6)ACL_MASK。

从设计的角度,前面五种ACL entry已经可以完成细粒度访问控制的目的了。ACL_MASK的引入是为了给规定的部分操作许可设置一个上限。进程从ACL_USER、ACL_GROUP、ACL_ GROUP_OBJ项获得的操作许可如果不出现在ACL_MASK项的permission-bits中,该操作许可会被清除。ACL_GROUP_OBJ和ACL_USER_OBJ逻辑上应该是联系在一起的,这里只限制ACL_GROUP_OBJ而不限制ACL_USER_OBJ,有些怪。相关代码在fs/posix_acl.c的posix_acl_ permission函数中。

ACL_USER和ACL_GROUP项被称为长格式,这两项的id必须是有效值。长格式项可以出现0次或多次。其余四项被称为短格式,因为它们的id值无所谓,在文件系统具体实现中,为了节约存储空间,这些项的id可能被省略。ACL_USER_OBJ、ACL_GROUP_OBJ、ACL_OTHER必须出现一次。当ACL中含有ACL_USER项和ACL_GROUP项时,ACL_MASK必须出现一次;当ACL中没有ACL_USER项和ACL_GROUP项时,ACL_MASK可以不出现

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈