本文共 1764 字,大约阅读时间需要 5 分钟。
Security Enhanced Linux (SELinux)是一个访问控制服务,基于安全策略加强对系统资源的访问控制。在系统安全的基础上,解决“May <subject> do <action> to <object>”的访问控制问题。
SELinux是一个Linux内核的扩展模块,通过LSM(Linux Security Module)框架在链接时被加入到Linux内核中。
1. SELinux的组成及工作模型
SELinux是由subjects, objects, security context, object manager和security server组成的。
subjects就是系统中运行的进程,往往会发出访问系统资源的请求。每个subjects都有自己的安全属性,通过security context表示。
objects就是系统中的各种资源,如文件、网络等。每个objects都有自己的安全属性,通过security context表示。
object manager是系统资源的组成部分,知道对资源能够进行什么访问,能够实施对资源的访问。
security server是SELinux的核心,运行在Linux系统的内核中。根据SELinux的策略,检查subjects的安全属性与objects的安全属性是否匹配,从而决定subjects是否能够访问objects。
2. SELinux与DAC的关系
Linux的标准访问控制模型DAC (Discretionary Access Control)通过检查user/group和permissions进行访问控制,但user/group可以改变permissions。而SELinux遵循最小授权原则,基于MAC (Mandatory Access Control)架构实现,通过独立的Linux内核中的安全服务器检查访问请求的SELinux context和被访问资源的SELinux context,从而实现对系统资源的访问控制。
当然,对一个系统资源的访问请求,只有在满足DAC访问条件之后,才会到达SELinux,SELinux的安全策略才会生效。如果访问请求已经因违反了DAC条件而被DAC拒绝,则访问请求根本不会到达SELinux。
此外,SELinux为Linux的文件访问控制策略提供了更细的控制粒度。如,只允许某个应用进程读取某个文件(而不允许写),而同时允许另一个应用进程写该文件。
3. SELinux对MAC的实现
SELinux实现了多种形式的MAC:
通用MAC实现,往往与RBAC结合使用。
默认没有使用
扩展了security context,对访问控制的分级实现
对MLS的进一步扩展,通过扩展security context支持1024种categories(如s0, c0, ...),实现精细的访问控制。
为了直观方便,可以在/etc/selinux/<SELINUXTYPE>/setrans.conf配置文件中为一组categories定义唯一的名称。
4. 高效的AVC服务
为了提高执行效率,对于Linux内核中的安全服务器已经做出的判断,SELinux会将其缓存到Access Vector Cache (AVC)中。
通常的AVC是由SELinux的核心类库libselinux提供的,某些资源也可以提供自己的AVC。
SELinux最早出现在CentOS 4。在RHEL/CentOS 7中,默认开启SELinux访问控制。对于一些常见的服务,默认情况下禁止任何访问,除非在SELinux策略中有明确的授权规则。
参考链接:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index
转载地址:http://shlai.baihongyu.com/