分类: LINUX
2008-04-23 08:22:26
不同用户使用相同的/bin/register程序读/写没有这个程序他们就不能访问的不同文件,这就是类型增强的核心概念:用户经过认证的上下文和正在被执行的代码将一起决定进程的“权利域”或“TE域”。
图1展示了我们系统中的域和类型:
图1 |
但是是什么阻止Bob作为经理登陆或Mary作为出纳登陆的呢?更有趣的是,老板是如何以这两者进行登陆的呢?
第一点是通过新的PAM模块实现的,简单地说,PAM(可插拔的认证模块)允许小块代码在不同认证步骤中执行,并允许模块灵活地执行,我已经介绍过一个新的模块,pam_ctx.so,它的代码在/usr/src/pam_ctx下,它为正被认证的用户名在文件/usermap.conf中搜索,并为这个用户找出默认的上下问,对于Bob而言,默认的上下文是cashier_u:cashier_r:cashier_t,对于Mary而言,默认的上下文是mgr_u:mgr_r:mgr_t,对于老板来说,默认的上下文是full_u:mgr_r:mgr_t,注意所有的上下文都由冒号分隔的3部分组成:
◆最后一部分是域,它最终决定用户在系统上的权限
◆第二部分是角色,它限制了用户可以进入的域
◆第一部分是SELinux用户,与角色和域相似,它限制了进程可以进入的角色
PAM模块通过将上下文写入文件/proc/$$/attr/exec来设置上下文,然后再对新域执行一个有效登记类型的shell脚本,查看策略的代码,你会看到mgr_r或许是与域mgr_t,mgr_register_t, and rolechange_t联系在一起,角色cashier_r或许是与域cashier_t和cashier_register_t联系在一起,类似地,SELinux用户mgr_u或许是与角色mgr_r联系在一起,cashier_u与cashier_r联系在一起,用户full_u或许是与mgr_r或cashier_r联系在一起。
图2展示了所有这些是如何联系在一起的
图2 |