大部分接触过Linux的人都应听说过SELinux(更准确的说,尝试关闭),甚至某些过往的经历让您对SELinux产生了偏见。不过随着日益增长的0-day安全漏洞,或许现在是时候去了解下这个在Linux内核中已经有8年多历史的强制性访问控制系统(MAC)了。
SELinux与强制访问控制系统
SELinux全称Security Enhanced Linux(安全强化Linux),是MAC(Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。
强制访问控制系统的用途在于增强系统抵御0-Day攻击(利用尚未公开的漏洞实现的攻击行为)的能力。所以它不是网络防火墙或ACL的替代品,在用途上也不重复。
要更了解SELlinux为何重要、及能够为你做什么,最简单的方法就是参考一些例子。
举例来说,系统上的Apache被发现存在一个漏洞,使得某远程用户可以访问系统上的敏感文件(比如/etc/passwd来获得系统已存在用户),而修复安全漏洞的Apache更新补丁尚未释出。此时SELinux可以起到弥补该漏洞的缓和方案。因为/etc/passwd不具有Apache的访问标签,所以Apache对于/etc/passwd的访问会被SELinux阻止。
相比其他强制性访问控制系统,SELinux有如下优势:
- 控制策略是可查询而非程序不可见的。
- 可以热更改策略而无需重启或停止服务。
- 可以从进程初始化、继承和程序执行三个方面通过策略进行控制。
- 控制范围覆盖文件系统、目录、文件、文件启动描述符、端口、消息接口和网络接口。
SELinux模式
SELinux拥有三个基本的操作模式,当中Enforcing是缺省的模式。此外,它还有一个targeted或mls的修饰语。这管制SELinux规则的应用有过广泛,当中targeted是较宽松的级别。
- Enforcing:这个缺省模式会在系统上启用并实施SELinux的安全性政策,拒绝访问及记录行动。
- Premissive:在Premissive模式下,SELinux会被启用但不会实施安全性政策,而只会发出警告及记录行动。Permissive模式在排除SELinux的问题是很有用。
- Disabled:SELinux停用。
1、查看当前模式:
使用sestatus
或使用getenforce
2、改变运行状态:
setenforce [ Enforcing | Permissive | 1 | 0 ]
该命令可以立刻改变SELinux运行状态(热更改策略),在Enforcing和Permissive之间切换,其结果保持至关机或重启。一个典型的用途看看到底是不是SELinux导致某个服务或者程序无法运行。若是在setenforce 0 (Permissive)以后服务或者程序依然无法运行,那么就可以肯定不是SELinux导致的。
若是想要永久变更SELinux运行状态,可以通过更改其配置文件/etc/sysconfig/selinux实现。注意当从Disabled切换到Permissive或者Enforcing模式后需要重启计算机并为整个文件系统重新创建安全标签:
# touch ./autorelabel
# reboot
http://linuxtoy.org/archives/selinux-introduction.html
开启semanage
# yum provides /usr/sbin/semanage 或者输入 # yum whatprovides /usr/sbin/semanage