通过ls -Z命令查看文件的安全上下文。ps -Z查看进程的上下文。
安全上下文的格式:
USER: ROLE: TYPE[LEVEL]
USER:指定用户。
1.user_u:代表普通用户,权限受限
2.system_u:系统级别进程
3.root:root用户
ROLE:指定角色。像文件、目录、socket等客体角色通常是object_r,主体进程的角色是r。一个用户可以有多个角色,但同一时间内只能使用一个。
TYPE:定义主体和客体所属的类型。对于进程,它的类型也称domain。
LEVEL:定义安全级别。s0-s15
无论主题还是客体的类型定义都需要通过type语句完成。
type 类型名称 属性
eg:type init, domain;//主体
type cgroup, fs_type, mlstrustedobject;//客体
allow init unlabeled:filesystem mount;
其语法:
allow source_type targe_type: class permission
(源类型)source_type:代表主体
(目标类型)targe_type:允许访问客体的类型。可以同时多个
(客体类别)class:目标类型可能涵盖比较广,客体类别可以对客体类型进行限制。比如:前面init例子中 目标类型unlabeled可以代表文件、目录、文件系统。通过filesystem进行了限制,只能代表文件系统了。
(许可)permission:指定主体可以对客体进行操作的种类。
SElinux如何让普通用户执行特权呢?可以通过域转移。其实就是把主体(进程)从一个域切换到另一个域。
domain_auto_trans(shell, su_exec, su)
domain_auto_trans是一个宏
当shell域的进程启动一个类型为su_exec的可执行文件时,把新的进程域切换到su域。
1.角色定义文件roles
用来定义SElinux的系统角色
role r;
role r types domain;
2.用户定义文件users
3.属性定义文件attributes
attribute dev_type;
attribute domain;
4.class定义文件security_classes
定义了所有的class
class filesystem;
class file;
5.操作定义文件access_vectors
common_file
{
ioctl
read
write
......
}
class filesystem
{
mount
remount
......
}
6.前十中规则文件
目录中以te结尾的文件。
7.TE的宏定义文件te_macros
8.file_contexts文件
保存系统中所有文件的安全上下文定义
9.property_contexts文件
保存系统所有android属性的安全上下文定义