SELinux零知识学习一、初识
本文内容参考:
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,(几乎)所有对内核的更改都是需要重启的。
相关文章
- Python学习笔记(一)PyCharm社区版安装教程
- 产品能力|云原生能力知识体系构建-Docker学习笔记Part4
- Shiro框架学习
- Vue学习笔记之Vue判断字符串(或数组)中是否包含某个元素
- 一周技术学习笔记(第93期)-请用代码的优雅取悦你的领导
- 13. Groovy 语言结构-包名,imports导入知识学习
- 1.HTML基础必备知识学习笔记
- 机器学习嵌入物理知识成为「时尚」,MIT讲师解读Nature子刊综述论文
- 吴恩达近3万人学习的MLOps讲座,官方上线机器之心知识站
- 学习小组笔记Day7-秦瑶 测序知识
- Hive学习之路 (九)Hive的内置函数详解大数据
- python学习 文件操作详解编程语言
- 使用LibSVM在Linux下实现机器学习(libsvmlinux)
- 微淼财商教育:致力于成为终身学习财商知识的教育平台
- 观视角:学习Linux C语言的重要性Linux C语言:掌握知识的重要性(linuxc宏)
- Linux知识百宝箱:新手学习Linux必看的书籍(linux书籍知乎)
- 北京:Oracle培训——学习前沿知识及技术(oracle培训北京)
- 教程学习PHPMySQL,轻松获得免费课程!(免费phpmysql)
- 学习 Linux 命令 diff 相关知识,提高文件比较能力(linux命令diff)
- 从日常 Linux 命令学习知识(linux日常命令)
- 学习学习MySQL知识,刘道成视频指引(mysql刘道成)
- 知识学习sqlserver,让你成为知识达人(获取sqlserver)
- Linux兄弟连PPT:打造全方位综合学习资料,提高Linux技能水平。(linux兄弟连ppt)
- Linux学习之路:知识攻关必备秘笈(linux知识点总结)
- 学习Redis掌握有效的知识学习策略(怎样学会redis)
- 学习Redis从PDF指南入门(学习redis pdf)
- 学习Oracle提升专业英语能力(oracle专业英语)
- 学习Oracle DCL语言掌握安全管理基础(oracle dcl语言)
- Oracle存储过程入门学习基本语法
- JS写的数字拼图小游戏代码[学习参考]