SELinux MAC安全机制
SELinux MAC
- Security Enhanced Linux(SELinux),使用Mandatory Access Control(MAC)方式对权限进行管控。
- MAC强制访问控制,针对特定的程序与特定的文件资源进行权限管理。
- MAC采用政策(Policy)\规则(Rule)、安全上下文,主体对目标的访问,需要满足政策、安全上下文,才可以访问。
SElinux运行机制
- 主体(Subject):等同于进程。
- 目标/对象(Object):被主体访问的资源,如文件、设备、端口等等。
- 政策和规则(Policy & Rule):SElinux定制的基本的安全管制政策,Ubuntu16.04中有三套政策
# SELINUXTYPE字段
/etc/selinux/config
# 等同于targeted,对大部分网络服务进程进行管制。常用。
default
# 多级安全保护,对所有进程进行管制,不常用。
mls
# 自定义
src
- 工作模式:/etc/selinux/config SELINUX字段
# 强制模式, SELinux security policy is enforced.
enforcing
# 宽容模式,SELinux prints warnings instead of enforcing.
permissive
# 关闭SElinux。
disable
- 安全上下文(security context): 主体对客体的访问,除了政策/规则外,相互之间的安全上下文必须相符。
安全上下文(Security Context)
- 安全上下文存在于主体和目标中,可以通过 ls -Z查看客体安全上下文,通过ps -Z查看主体安全上下文。
ls -Z
# 安全上下文为 system_u:object_r:file_t:s0
system_u:object_r:file_t:s0 file.txt
ps -Z
LABEL PID TTY TIME CMD
system_u:system_r:kernel_t:s0 4185 pts/0 00:00:00 bash
system_u:system_r:kernel_t:s0 5357 pts/0 00:00:00 ps
安全上下文由4个部分组成:
-
身份标识(user):角色(role):类型(type) : 级别(level)
-
身份标识(User):
system_u 系统服务进程/系统服务创建的文件
unconfined_u 不受管制进程/文件 -
角色(Role):
object_r文件资源
system_r系统服务进程 -
类型(Type):
默认targeted中,主要对安全上下文的类型进行匹配。
对于主体,它的类型称为domain,域。
对于客体,它的类型称为Type,类型。
只有domain和Type搭配,主体才可以对客体进行访问。 -
级别(Level):
仅在MLS策略下生效,默认为S0。由于MLS晦涩难懂,这里不介绍。
主客体访问实例
- MAC targeted策略下,主客体间是否可以进行读写,主要在于Type的类型是否匹配。
- 下面以apache为例,具体说明一下Type间的验证。
ll -Zd /usr/sbin/apache2 /var/www/html
system_u:object_r:file_t:s0 /usr/sbin/apache2
system_u:object_r:file_t:s0 /var/www/html/
- file_t域可读取的客体,已经MAC targeted政策下被默认定义。我们可以通过sesearch命令查询。
sesearch -A -s file_t
Found 6 semantic av rules:
allow file_type tmpfs_t : filesystem associate ;
allow file_type fs_t : filesystem associate ;
allow file_type noxattrfs : filesystem associate ;
allow file_type tmp_t : filesystem associate ;
allow file_type ramfs_t : filesystem associate ;
allow file_t file_t : filesystem associate ; 该政策声明file_t domain可对 file_t类型的文件资源进行访问
- 至于apache2是否可以读写/var/www/html还需要看其DAC权限设置,也就常见的读、写、执行权限。