SELinux的机制要求系统中所有的主体和客体都关联安全上下文。系统中的主体和客体可以分为两类,一类是静态的,能跨越系统重新启动而保持一致,比如磁盘上的文件;另一类是动态的,每次启动后创建,比如进程。对于前者,SELinux将安全上下文存储在存储介质——文件的扩展属性中。对于后者,SELinux定义初始/缺省安全上下文作为主体或客体的安全上下文的初始值。
1.初始安全上下文
SELinux在策略语言中引入了sid。安全上下文是一个字符串,在内核SELinux代码中被存储在一个表里,为了提高代码执行效率,就用表中记录的序号来代表一个安全上下文。这个记录序号就是sid。
SELinux代码在那个存储安全上下文的表中预留了若干项,这些项就是某些主体和客体的初始/缺省安全上下文。目前SELinux预留了27项初始安全上下文。在代码中,它们的名字是:
回到策略语言,sid策略有两种格式:带安全上下文的和不带安全上下文的
语法:
举例:
sid为kernel的安全上下文,内容为“u:r:kernel:s0”。
不带安全上下文的sid定义,实际上又是在重复代码的逻辑,27个初始/缺省安全上下文,不能多也不能少。带context的sid定义有些意义,就是能给出这些预留sid对应的安全上下文也就是填充内核那个安全上下文表中预留记录的内容。
2.文件
这部分策略规定了一个文件系统上的文件的安全上下文来自哪里,共有四个来源:扩展属性、主体(进程)、主体和文件系统运算、策略规定值。
需要注意的是,这里的文件的范畴比一般意义要大,还包括管道和套接字。因为在内核的代码逻辑中,管道是在特殊的文件系统pipefs上的文件,而套接字也有一个特殊的文件系统sockfs与之关联。
(1)fs_use_xattr
语法:
这种策略有两个作用:一是规定文件系统上的文件使用扩展属性作为文件的安全上下文二是规定文件系统本身的安全上下文。
举例:
上述语句规定encfs、ext2、ext3文件系统的安全上下文是“system_u:object_r:fs_t”,其上的文件使用扩展属性security.selinux的值作为安全上下文。
(2)fs_use_task
语法:
这种策略有两个作用:一是规定文件系统 [10] 使用创建文件的进程的安全上下文作为其上的文件的安全上下文;二是规定了文件系统本身的安全上下文。
举例:
上述语句规定eventpollfs、pipefs、sockfs文件系统的安全上下文是“system_u:object_r:fs_t”其上的文件的安全上下文来自创建进程的安全上下文。
(3)fs_use_trans
fs_use_trans与fs_use_task类似,区别在于文件的安全上下文不单单来自创建文件的进程的安全上下文,还有一个影响因素是文件系统本身的安全上下文,最终结果是二者的运算结果。(www.xing528.com)
举例
上述语句规定devpts文件系统的安全上下文是system_u:object_r:devpts_t,其上文件的安全上下文来自创建进程的安全上下文和文件系统安全上下文的运算。
下面列出和运算相关的语句:
上述语句规定类型为rssh_t的进程在其上创建的字符设备文件的安全上下文的类型为rssh_devpts_t。
(4)genfscon
当上面这些策略都不能用时,还有最后这个genfscon。
文件系统和其上的所有文件都使用同样的安全上下文,这里有一个特例,如果fs_name是proc的话,partial_path起作用,其上部分文件可以有不同的安全上下文。
举例:
上述语句说明:msdos文件系统及其上所有文件的安全上下文是system_u:object_r:dosfs_t。iso9660文件系统及其上所有文件的安全上下文是system_u:object_r:iso9660_t。proc文件系统本身的安全上下文是system_u:object_r:proc_t;proc文件系统中的sysvipc目录和sysvipc目录之下的文件和目录的安全上下文是system_u:object_r:sysvipc_proc_t;proc文件系统中其余的文件和目录的安全上下文是system_u:object_r:proc_t。
3.网络
网络的基本构成是节点、端口和网卡。
(1)节点
nodecon用来标记一个IPv4或IPv6节点。
举例:
IPv4本地地址127.0.0.1被赋予安全上下文system_u:object_r:lo_node_t,IPv6广播地址ff00:: ff00::被赋予安全上下文system_u:object_r:multicast_node_t。
(2)端口
portcon用来标记一个端口。
举例:
tcp端口20被赋予安全上下文system_u:object_r:ftp_data_port_t。
(3)网卡
netifcon被用来标记网卡及通过网卡的网络包的安全上下文。
举例:
规定eth0的安全上下文是system_u:object_r:netif_t,通过eth0的网络包的安全上下文是system_u:object_r:packet_t。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。