SELinux零知识学习一、初识

本文内容参考:

SELinux介绍_内核工匠的博客-CSDN博客

SELinux入门 | 《Linux就该这么学》

Linux之SELinux的介绍以及用法_selinux的主要作用_听说唐僧不吃肉的博客-CSDN博客

第二阶段linux上第13章selinux.pdf-原创力文档

特此致谢!

一、何为SELinux

净听说SELinux、SELinux的,也知道它和安全相关,那么SELinux具体是怎么个意思?正好借此机会认识一下SELinux究竟、到底为何物。

SELinux是Security-Enhanced Linux的缩写(注意SE并不是指Security,而是Security-Enhanced),中文直译为安全增强型Linux系统。

回到Kernel 2.6时代,那时候引入了一个新的安全系统,该系统最初是作为一款通用访问软件,发布于2000年12 月(代码采用GPL许可发布),用以提供访问控制安全策略的机制,这个系统就是Security Enhanced Linux即 SELinux。SELinux由美国国家安全局(NSA)发起,Secure Computing Corporation(SCC)和MITRE直接参与开发,以及很多研究机构(如犹他大学)一起参与的强制性安全审查机制。在Linux Kernel 2.6版本后,直接整合进入SELinux,搭建在Linux Security Module(LSM)基础上,为Linux内核子系统引入了一个健壮的强制控制访问(Mandatory Access Control)架构,目前已经成为最受欢迎,使用最广泛的安全方案。

这里说一个题外话。SELinux主要是Red Hat(红帽) Linux及其衍生发行版上的一个工具。类似地,Ubuntu和SUSE(以及它们的衍生发行版)使用的是AppArmor。SELinux和AppArmor有显著的不同。你可以在SUSE、openSUSE、Ubuntu等发行版上安装SELinux,但这是一项难以置信的挑战,除非你十分精通Linux。

二、机制暨产生原因

  • DAC

Discretionary Access Control简称DAC,中文译为自主访问控制。DAC是Linux上传统的访问控制标准,也是标准的UNIX安全模型。在这种机制下,一个软件或守护进程以User ID(UID)或Set owner User ID(SUID)的身份运行,并且拥有该用户的目标(文件、套接字以及其它进程)权限。这使得恶意代码很容易运行在特定权限之下,从而取得访问关键的子系统的权限。这就是说,任何程序对其资源享有完全的控制权。假设某个程序把含有重要信息的文件扔到/tmp目录下(这显然是不合理、不安全的),那么在DAC机制下没人能够阻止它!

  • MAC

这里的MAC可不是指的网卡的那个MAC(Media Access Control Address),也不是指的苹果的那个Mac,而是Mandatory Access Control,简称MAC,中文译为强制访问控制。

MAC基于保密性和完整性强制信息的隔离以限制破坏。该限制单元独立于传统的Linux安全机制运作,并且没有超级用户的概念。这就是说,安全策略完全控制着对所有资源的访问,这是MAC和DAC的本质区别。前边提到过,SELinux就是属于MAC。

举一个例子以帮助理解:

假设我们将/var/www/html(http的配置文件)的权限设置成了0777,代表所有的程序都可以对该目录进行访问。这时候万一真的有启动的www服务器软件,那么该软件所触发的进程就可以写入某些内容(数据)到该目录里边。为什么?因为权限是0777,可读可写可执行。

不幸的是该进程是对整个Internet提供服务的,这就给了那些“有心人”可乘之机。他们可以接触到这个进程,而这个进程又已经对任何用户提供了写入的功能……后果你就可想而知了,系统会莫名其妙地被修改、被复制、甚至全部删除。

所以为了控制这方面的权限与进程的问题,SELinux应运而生了。SELinux说白了就是系统里的另外一个安全机制,但它是一个内核级的安全机制,不同于那些存在于内核之外的服务及软件,SELinux与内核绑定到一起了。

三、副作用

凡事有一利就有一弊。引入SELinux后,虽然安全性得以保证、大大提高了,但也带来了以下几个副作用:

  • 系统“对抗”

一般人不熟悉SELinux的运行机制,因此通常都是把SELinux关闭的,让其处于permissive状态。但是开启了SELinux之后,肃然系统的安全性得到了大幅提升,但是会在使用系统的时候发现想干什么都干不了,似乎系统在和我们“对抗”,这就是SELinux在“捣乱”。

  • 重启生效

由于SELinux是一个内核级的安全机制,因此针对其所做的修改都必须要重启才能生效。实际上不仅仅是SELinux,(几乎)所有对内核的更改都是需要重启的。

猜你喜欢

转载自blog.csdn.net/phmatthaus/article/details/129829922