SELinux全称为安全增强式 Security-Enhanced Linux(SELinux),是一个在内核中实践的强制存取控制(MAC)安全性机制。SELinux 首先在 CentOS 4 出现,并在其后的 CentOS 发行版本获得重大改善。这些改善代表用 SELinux 解决问题的方法亦随著时间而改变。

SELinux的原理与架构

SELinux的整体架构和原理都比较简单,使用也不复杂。其复杂的地方在于规则非常复杂,每个进程都要有规则策略。

SELinux有2个核心组件及一些配套的工具。这两个核心组件分别是内核逻辑和策略数据库。当然,策略数据库本身并非软件逻辑,而是一个静态的数据库,为内核逻辑提供判断的依据。SELinux 更能遵从最小权限的理念。在开启SELinux的情况下(enforcing模式),所有访问默认是被拒绝的,而有一系列例外的策略来允许系统的元素(服务、进程、用户)具备访问资源的权限。

整体架构与访问流程

SELinux的整个架构如图1所示,最左侧的为访问者,也就是服务,进程或者用户等内容。最右侧的是被访问者,也就是具体的资源,比如文件、目录或者套接字等。

当访问者访问被访问者(资源)时,需要调用内核的接口。以读取某个目录的文件为例,需要读取read接口。此时会经过SELinux内核的判断逻辑,该判断逻辑根据策略数据库的内容确定访问者是否有权访问被访问者,如果权利允许则放行,否则则拒绝并记录审计日志。

SELinux的管理与模式

可以通过/etc/selinux/config文件中的配置项实现对SELinux的管理,包括启动、停止和修改策略类型等。

如图所示,这里有2个配置项,也就是SELINUX和SELINUXTYPE。其中SELINUX表示SELinux的启用状态,可以有3种模式。

Enforcing: 此选项会在系统上启用并实施 SELinux 的安全性政策,拒绝存取及记录审计日志Permissive: 在 Permissive 模式下,SELinux 会被启用但不会实施安全性政策,而只会发出警告及记录审计日志Disabled: 该选项表示SELinux 处于非工作状态SELinux的类型

从上述配置文件还可以看出SELinux有2中类型,分别是targeted和mls。

实例代码解析

SELinux控制的内容很多,包括文件、套集字和信号量等等。当然,我们不可能介绍到所有的内容,今天我们主要看一下文件相关的内容。

Linux内核提供了一个安全模块框架层,这个公共框架类似于文件系统中的VFS。它为调用者提供统一的接口。之所以要提供统一接口是因为Linux内核不仅仅支持SELinux安全特性,还支持Apparmor等很多安全特性。

以打开文件为例,当我们调用内核中打开文件的接口是,在其内部会调用security_file_open函数。该函数就是Linux内核安全框架(LSM)的公共接口。然后该函数通过函数指针的方式调用所有注册到LSM的安全模块。以SELinux为例,最终会调用到selinux_file_open函数。

然后selinux_file_open函数会调用avc公共函数实现权限鉴定和审计日志的记录等内容。这里关键函数是avc_has_perm。可以看出该函数又调用了另外两个函数,其中avc_has_perm_noaudit函数实现权限的判断,而avc_audit函数则实现审计功能。

函数avc_audit实现审计功能,但并非每个操作都需要记录审计日志。在写策略文件的时候可以关闭某个策略的审计。也就是说,在关闭该策略的审计的情况下,即使访问拒绝也不会记录审计日志。

在函数avc_audit中,avc_audit_required函数用于判断是否需要记录审计日志,而slow_avc_audit函数则是进行审计日志的封装和记录工作。这部分代码比较清晰,简单,本文不再赘述。

查看SELinux状态:

1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态

SELinux status: enabled

2、getenforce ##也可以用这个命令检查

关闭SELinux:

1、临时关闭(不用重启机器):

setenforce 0 ##设置SELinux 成为permissive模式

                          ##setenforce 1 设置SELinux 成为enforcing模式

2、修改配置文件需要重启机器:

修改/etc/selinux/config 文件

将SELINUX=enforcing改为SELINUX=disabled

重启机器即可

linux下查看 SELinux状态及关闭SELinux的更多相关文章

  1. 查看SELinux状态并关闭SELinux

    SELinux(Security-Enhanced Linux)是Linux上最杰出的新安全子系统.在linux内核级别上提供了一个灵活的强制访问控制系统(MAC),这个强制访问控制系统是建立在自由访 ...

  2. 查看 SELinux状态及关闭SELinux

    查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:         ...

  3. 查看SELinux状态及关闭SELinux

    查看SELinux状态: 输入:/usr/sbin/sestatus -v SELinux status: enabled           ##开启状态 关闭SELinux 修改vi /etc/s ...

  4. [转] 查看 SELinux状态及关闭SELinux

    本文转载自: http://bguncle.blog.51cto.com/3184079/957315 查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SE ...

  5. 如何查看 SELinux状态及关闭SELinux

    查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:         ...

  6. Linux下查看Web服务器当前的并发连接数和TCP连接状态

    对于web服务器(Nginx.Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态. $ netstat -n | ...

  7. Linux下查看Nginx的并发连接数和连接状态-乾颐堂

    Linux下查看Nginx等的并发连接数和连接状态. 1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态: netstat -n | awk '/^tcp/ {++S[$N ...

  8. linux 6 查看防火墙状态及开启关闭命令

    linux 6 查看防火墙状态及开启关闭命令 https://blog.csdn.net/lv_shijun/article/details/52453882 存在以下两种方式: 一.service方 ...

  9. linux下查看进程的状态 /proc/[pid]/status

    查看进程的状态: 1.查看进程的pid,以java为例:ps -ef | grep java 2.查看进程状态:cat /proc/[pid]/status 关键字: linux [root@loca ...

随机推荐

  1. 【LeetCode】104. Maximum Depth of Binary Tree 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:BFS 方法二:DFS 参考资料 日期 题目 ...

  2. 【九度OJ】题目1195:最长&最短文本 解题报告

    [九度OJ]题目1195:最长&最短文本 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串, ...

  3. Auto-Encoding Variational Bayes

    目录 主要内容 Encoder (损失part1) Decoder (损失part2) 伯努利分布 高斯分布 代码 Kingma D P, Welling M. Auto-Encoding Varia ...

  4. 生成器执行函数co 源码解读

    本文所选内容均来自[co模块源码] /** * slice() reference. */ var slice = Array.prototype.slice; module.exports = co ...

  5. 【优雅代码】04-1行代码完成多线程,别再写runnable了

    [优雅代码]04-1行代码完成多线程,别再写runnable了 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮 ...

  6. 基于Spring MVC + Spring + MyBatis的【银行账户信息管理系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/45604661 练习点设计: 模糊查询.删除.新增.修改 一.语言和环境 实现语言:J ...

  7. Java基础寒假作业-个人所得税计算系统

    <个人所得税计算系统>设计 一.需求说明 设计一个简易的个人所得税计算系统,通过输入个人应发工资计算出各个地区的三险(医疗保险.养老保险)一金(公积金)和个人所得税.系统需要实现用户登录. ...

  8. JS事件冒泡与事件捕获怎么理解?

    在js中存在事件冒泡与事件捕获两种概念,这两个概念都是为了解决页面中事件流(事件发生顺序)的问题. 事件冒泡(dubbed bubbling) 事件冒泡我们从字面意思理解就是当用户行为触发我们页面的定 ...

  9. Java初学者作业——编写Java程序,输出1~100之间能够同时被3和4整除的最大的五个数字。

    返回本章节 返回作业目录 需求说明: 编写Java程序,输出1-100之间能够同时被3和4整除的最大的五个数字. 实现思路: 声明变量count,用于存储满足条件的数据个数,设置初始值为0. 在区间1 ...

  10. C#中ref关键字的用法总结

    ref表示引用的意思,C#中它有多种用法,这里简单总结一下: 1.按引用传递参数 具体可见:C#中的值传递与引用传递(in.out.ref) 2.引用局部变量 引用局部变量指的是在变量声明时使用ref ...