SELinux 是安全增强了的Linux,是Security-enhanced Linux 的简写,SELinux 使用了分级的强制访问控制,是Linux 内核的重要安全措施;SELinux 改进了对内核对象和服务的访问控制,改进了对进程初始化、继承和程序执行的访问控制,改进了对文件系统、目录、文件和打开文件描述的访问控制,还改进了对端口、信息和网络接口的访问控制。
1. SELinux 的强制访问控制机制(MAC)
SELinux 在内核中使用强制访问控制机制(MAC)检查允许的操作。SELinux MAC 访问控制框架中定义,所有的主体(进程)对系统的客体或目标对象(如:文件、设备、socket、端口等)进行操作,需要权限或许可。
2. SELinux 安全上下文
在SELinux 中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。这里的类型标识符被用于强制访问控制规则的设置。
主客体的安全上下文的定义
在SELinux 中,需要对主客体的安全上下文进行定义,不同类型的主客体定义的方式也不同。对于有唯一且永久的节点号的传统文件系统,SELinux 用永久的标识映射,通过fs_use_psid 命令来指定文件系统内的节点的安全上下文和文件系统本身的安全上下文。
#fs_use_psid ext2
#fs_use_psid ext3
#fs_use_psid reiserfs
对于不支持永久标识映射的文件系统,用genfscon 命令来指定文件系统或文件路径或文件的安全上下文。
#genfscon proc / system_u:object_r:proc_t
#genfscon proc /kmsg system_u:object_r;proc_kmsg-t
#genfscon /kcore system_u:object-r:proc_kcore_t
对于代表管道和socket 对象的伪文件系统,SE Linux 常指定创建进程的上下文给代表对象的节点。
这个行为用fs_use_task 来声明。
#fs_use_task pipefs system_u:object_r:fs_t
#fs_use_task sockfs system:object_r:fs_t
查看安全上下文
SELinux 系统中通过添加一个-Z 选项显示主体和客体的安全上下文:
ps -Z 显示进程(主体)的安全上下文
ls -Z 显示文件(客体)的安全上下文
3 SELinux 中的类型强制(TE:Type Enforcement)
在SELinux 中,不管用户UID 或者GID 是什么,所有访问都必须明确授权,SELinux 默认不允许任何访问。这就意味着在SELinux 中,没有默认的超级用户了,任何访问需要通过指定主体类型和客体类型,使用allow 规则来授予访问权限,allow 规则由四部分组成:
源类型(Source type(s) ) 通常是尝试访问的进程的域类型
目标类型(Target type(s) ) 被进程访问的客体的类型
客体类别(Object class(es)) 指定允许访问的客体的类型
许可(Permission(s)) 象征目标类型允许源类型访问客体类型的访问种类
语法格式如下:
allow Source type Target type :Object class { Permission }
强制访问控制配置示例
假设我们允许进程(主体)passwd 命令可以读和执行/etc/shadow 文件,那么首先,需要知道主体和客体的类型。
查看主体的类型
# ps -aZ
joe:user_r:passwd_t 16532 pts/0 00:00:00 passwd
//从安全上下文的类型标识符中可以看到主体类型是passwd_t
查看客体文件的类型
#ls -Z /etc/shadow
-r---- root root system_u:object_r:shadow_t shadow
//从安全上下文的类型标识符中可以看到客体类型是shadow_t
根据主客体的类型配置访问规则
#allow passwd_t shadow_t : file {read execute getattr}
//拥有域类型passwd_t 的进程(主体)可以读/执行具有shadow_t 类型的文件(客体),可以获取具有shadow_t 类型的客体文件的属性
4. SELinux 中的多层安全MLS
类型强制(TE)无疑是SELinux 引入的最重要的强制访问控制(MAC)机制,然而,在某些情况下,对于保密控制应用程序的一个子集,传统的多层安全(MLS)MAC 与类型强制(TE)一起使用显得更有价值,在这些情况下,SELinux 中MLS 特性是可选的,作为SELinux 的两个MAC 机制中的一个,它通常不是最重要的那个,对大多数安全应用程序而言,包括许多非保密数据应用程序,类型强制是最适合的安全增强的机制,对于一些涉密的数据,MLS 相比于TE 对应用程序还是增强了更多的安全性。
---------------------------------
kingsql分享
hongzhuohui@kingsql.com
转载请注明出处
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28389881/viewspace-1266656/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28389881/viewspace-1266656/