笔者:国际认证信息系统审计师、软考系统分析师
SELinux 前言
搞网络安全也有一段时间,期间参考过的资料无数,发现国内普遍有个问题:重视各种基线设置的同时,却轻视甚至完全无视SELINUX,不要求服务器开启SELINUX。
在我的观点中,网络安全需要“偏执狂”。而SELINUX作为一种让人偶尔为之抓狂的安全手段,正是偏执狂所需要的。
什么是SELinux
SELinux,全称Security Enhanced Linux,即“安全增强的Linux“。顾名思义,它是已经内置在大多数流行的Linux发行版中的高级访问控制机制。
它最初是由美国NSA国家安全局开发的,以保护计算机系统免受恶意入侵和篡改。
随后,SELinux的源代码被发布到公共领域(Public Domain),可以随意使用、修改。现在的各种Linux发行版均已经将其合并到自己的代码中。
但是,由于SELinux是以“后来者”的形式加入到发行版,这对于很多系统管理员来说,一直都是陌生的领域。而可选关闭SELinux的选项则极大地助长了规避心态:“反正允许关掉,那就关掉吧”。
但是,配置正确的SELinux系统可以大大降低安全风险。而只要学习一下,就可以帮助系统管理员排除与各种资源访问相关的错误消息。
一言以蔽之:这东西,不难。
本文一律以CentOS 7为例去说明,并默认使用root用户进行操作。
SELinux能起到什么作用
SELinux 实现的是被称为 MAC (Mandatory Access Control,强制访问控制)的控制手段,是基于Linux发行版本来就有的DAC(Discretionary Access Control,自有裁量访问控制)之上实现的。
传统方式下Linux的文件安全,考虑的是三种实体:用户、用户组和其它用户,也就是常说的UGO,然后合并上读、写和执行,即RWX,最后应用到文件或目录上形成访问限制。
比如用户在自己的个人目录下创建文件,文件就会自动带上该用户、用户组等读写权限,其它用户一般是无权访问此文件。
但对于系统管理员来说,可能会随意(有意或无意)修改文件的访问权限,或者更改文件的所有者,导致关键的系统文件不恰当地暴露在不应该访问到这个文件的用户权限下。
而且,由于安全限制是用户自由裁量的,没有其它人或手段可以限制这种情况。
另一方面,如果一个Linux进程需要用root用户或者其它超级用户的身份运行,则意味着如果黑客通过比如0-DAY漏洞控制了这个程序进程,黑客就可以利用这个程序去访问系统的任意资源。
尤其是root用户的进程,实际就是系统管理员本身。
再有一种常见的限制用户操作的想法:比如开发人员在使用系统进行开发工作,这需要允许其查看各种日志文件,但不希望他们能使用su或者sudo命令,更不希望开发人员可以随意运行任何脚本、修改任何系统配置。
要知道,大量网络安全问题都发生在开发环境而不是生产环境。
以上这些情况,SELinux是唯一一种能精细化控制访问需求的方法。
使用SELinux,管理员可以定义用户(包括自己)或进程可以做什么。它能将每个进程限制在它自己的领域内,进程只能与特定类型的文件、允许的领域中的其他进程进行交互。
这就防止了黑客通过劫持root用户运行的进程,进而获得全系统访问权限的可能性。
如何开启SELinux
启用SELinux最简单的方法,就是在安装时选择启用SELinux。随着各个发行版的安装程序的不断改进,后期很多Linux发行版干脆取消了让用户选择是否开启SELinux的选项,一律默认设置为Permissive模式。
另外,也可以在安装好的系统中,通过添加SELinux包并进行适当配置的方式,为系统补充开启SELinux。比如CentOS 7系统,一般需要安装如下包:
policycoreutils (提供了管理 SELinux 的工具)
policycoreutils-python (以python语言方式提供了管理 SELinux 的工具)
selinux-policy (提供了SELinux的参考策略)
selinux-policy-targeted (提供了SELinux的目标策略)
libselinux-utils (提供了管理SELinux的另一些工具)
setroubleshoot-server (提供了解密审计日志信息的工具)
setools (提供了审计日志监控、策略查询以及文件的安全上下文(context)属性管理的工具)
setools-console (同上功能的命令行工具)
mcstrans (提供了翻译不同的等级为容易理解的格式的工具)
需要注意的是,即使安装期间就启用了SELinux,这里的一些包也并不会一起安装到系统,还是需要手工添加的。要检查包有没有安装,可以运行:
rpm -qa | grep selinux
也可以简单地一条yum命令解决问题:
yum install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans
SELinux模式
SELinux有三种模式,除了禁用模式外,另外两种都是工作模式:
Enforcing
Permissive
Disabled
Enforcing 模式下,SELinux会对整个系统强制应用安全策略,任何未经许可的访问,无论来自用户或进程,都被拒绝,并且记录到安全审计日志。
Permissive模式是“半允许”模式。SELinux在该模式下不会强制应用安全策略,因此不会拦截任何未经许可的访问。但是,这些访问情况仍会被记录到安全审计日志。在需要先测试后全面启用SELinux时,就需要使用这个模式。
注:我不建议设置“禁用模式”。要么干脆删了,要么就设置为Permissive模式。因为在禁用模式下产生的新文件都会缺失文件的安全上下文属性,导致在以后要重启SELinux模式时,需要做大量的还原操作,非常麻烦还容易出错,因为有些安全策略与具体环境有潜在冲突。
检查SELinux模式和状态
可以运行 getenforce 命令来检查当前的SELinux模式,或者通过 sestatus 命令去输出状态。
本站微信订阅号:
本页网址二维码: