7.2.1节介绍了安全上下文,7.2.2节介绍了客体类别和客体上的操作。有了安全上下文,有了操作,再加上7.3节要介绍的SELinux策略,系统管理员就可以规定安全上下文为A的进程可以对安全上下文为B的文件进行C操作。这样就完成了SELinux的强制访问控制。
但是,主体和客体的安全上下文的值是怎么设置的?主体和客体的安全上下文能不能改变?如果能,可以改变成什么值?
1.安全上下文的初始值
进程的安全上下文的初始值有两个来源:
(1)创建进程时,子进程的安全上下文是父进程的安全上下文的副本。
2)Linux系统中第一个进程的安全上下文是SECINITSID_KERNEL所对应的安全上下文。
SELinux代码将所有的安全上下文存储在一个数组中,为了提高效率,SELinux代码用数组项的序号来代表安全上下文。这个序号被称作sid。上面代码中的SECINITSID_KERNEL就是一个sid。
cred_init_security函数被SELinux的初始化函数调用,它所设置的进程正是系统的第一个进程:
2.安全上下文的改变
不是所有的主体和客体都需要改变安全上下文,进程间通信类客体就没有必要改变安全上下文。下面列出改变进程和文件的安全上下文的逻辑。(www.xing528.com)
(1)进程
SELinux提供了两种方式改变进程的安全上下文。第一种方式是进程调用execve系统调用,第二种方式是通过写/proc/self/attr/current文件。这两种方式在前面已经列举。
(2)文件
文件的安全上下文记录在文件的扩展属性security.selinux中,修改扩展属性security.selinux的值就是修改文件的安全上下文。
上述代码判断的操作许可较多,主要的有三个:
1)文件的安全上下文不再是现在的值(RELABELFROM)。
2)文件的安全上下文可以是新的值(RELABELTO)。
3)文件所在的文件系统允许文件新的安全上下文(ASSOCIATE)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。