SELinux

2023-09-17 04:41:57

简介

SELinux:Security Enhanced Linux,安全强化Linux

自主访问控制 DAC

这是传统文件权限与账号关系,依据进程的拥有者与文件资源的rwx权限来决定有无存取的能力。

缺点:

  • root具有最高权限

如果不小心某个进程被有心人取得,且该进程属于root权限,那么这支进程就可以在系统上进行任何资源的存取。

  • 使用者可以取得进程来更改文件资源的访问权限

如果不小心将某个目录设定为777,由于对任何人的权限都是rwx,因此该目录就会被任何人随意存取。

委任式访问控制 MAC

可针对特定的进程与特定的文件资源来进行资源管控;即使你是root,在使用不同进程时,你所能取得的权限并不一定是root,需要看当时该进程设定。

MAC控制主体为进程,目标是该进程能否读取的文件资源

左图:

没有SELinux的DAC情况,root主导的Apache进程,可在三个目录中任意新建文件与修改

右图:

有SELinux的DAC情况,SELinux仅会针对Apache此进程放行部分目录

SELinux运作模式

概念说明

主体(Subject)

进程

目标(Object)

文件系统

政策(Policy)

centos7中仅有提供三个主要政策

  • targeted(定向):针对网络限制较多,针对本机限制较少;预设的政策,建议用
  • minimum(最小):由targeted修订而来,仅针对选择的进程来保护
  • mls:完整的SELinux限制,较为严格

安全性文本(Security Context)

在政策允许后,主体与目标的安全性文本必须一致才能正常读写。先匹配政策,再对比安全性文本。

安全性文本是存储在inode内的;当某进程向读取目标文件资源时,同样需要读取inode。

#查看root家目录下文件的SELinux信息

[root@wenzi ~]#ll -Zd /root
dr-xr-x---. 2 root root system_u:object_r:admin_home_t:s0 173 M、

ay 19 16:19 /root
[root@wenzi ~]#ll -Z
total 8
-rw-------. 1 root root system_u:object_r:admin_home_t:s0     1279 May 15 02:35 anaconda-ks.cfg
-rwxr-xr-x. 1 root root unconfined_u:object_r:admin_home_t:s0 2431 May 19 16:16 centos8init.sh

安全性文本主要用冒号:分隔为三个字段:

Identity:role:type     身份:角色:类型

  • 身份

unconfined_u:不受限的用户,即该文件来自不受限制的进程产生的。通常使用可登入账号取得bash后,预设的bash环境不受SELinux控制,所以此bash进程产生的文件其身份大多是unconfined_u

system_u:系统用户,大部分是系统自己产生的文件

  • 角色

object_r:代表的是文件或目录等文件资源

system_r:代表的是进程,但一般的使用者也会被指定为system_r

  • 类型

在预设的targeted政策中,identity和role基本是不重要的,关键在于type。

在文件资源上称为类型type

在主体进程上称为领域domain

domain和type相搭配,决定主体与目标之间是否具有可以读写的权限

进程与文件SELinux type字段相关性

targeted政策下大致对应如图

身份识别角色在targeted意义
unconfined_uunconfined_r一般可登入使用者的进程,受限较少的进程,如bash,X windows相关软件
system_usystem_r大多数的系统进程均是这种类型

最重要的字段是类型字段type,主体与目标之间是否具有可读写的权限,与进程的domain及文件的type有关

SELinux三种模式的启动、关闭与观察

enforcing:强制模式

表示SELinux运行中,且已经正确的开始限制 domain/type

permissive:宽容模式

表示SELinux运行中,会有警告讯息,但并不会实际限制 domain/type 的存取;此模式可用作SELinux的Debug之用

disabled:关闭

SELinux并没有实际运作

流程

主体进程需要经过政策规则、安全文本对比、rwx权限规范,都通过才能顺利读取文件

并非所有的进程都被SELinux管制,所以左侧是 受限的进程主体。

查看进程是否受限

当前SELinux模式为 Enforcing 政策规则为 target

[root@wenzi ~]# ps -eZ | egrep "crond|bash"
system_u:system_r:crond_t:s0-s0:c0.c1023 557 ?  00:00:00 crond
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1055 pts/0 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1060 ? 00:00:00 bash

可见 crond 是受限的主体进程,需要经过流程图;bash 是不受限的类型,进判断 rwx 即可

查看当前SELinux模式

查看当前SELinux政策(Policy)

命令:sestatus [-vb]

-v:检查列于 /etc/sestatus.conf 内的文件与进程的安全性文本内容

-b:将目前政策规则布尔值列出,即哪些规则是否要启动(0/1)

修改SELinux模式

配置文件 /etc/selinux/conf ,默认如下

开启SELinux

SELINUX=enforcing   修改完必须重启

关闭SELinux

SELINUX=disabled   修改完必须重启

Enforcing模式下可在Enforcing和Permissive间切换

切换为Permissive

setenforce 0

切换为Enforcing

setenforce 1

注意:无法再disabled模式下切换

某些特殊情况下,从 disabled 切换为 Enforcing 后,部分服务无法启动,提示 /lib/xxx 里面的数据没有权限读取,所以启动失败.这大多是由于在重新写入SELinux type(Relabel)出错之故,使用 Permissive 就没有这个错误。那如何处理呢?最简单的方法就是在 Permissive的状态下,使用restorecon -Rv /  重新还原所有SELinux的类型。

SELinux政策内的规则管理

SELinux各个规则的布尔值查询

getsebool [-a] [规则名]

-a:列出目前系统上所有的SELinux规则的布尔值为开启或关闭

sestatus -b 查看

SELinux各个规则规范的主体进程能够读取的文件 SELinux type 查询

使用 seinfo 命令安装工具  yum -y install setools-console.x86_64

在 查看进程是否受限 时,知道 crond 进程的 type 是 crond_t,查询 crond_t 能读取的文件 SELinux type 有哪些?使用 sesearch 命令

修改SELinux规则的布尔值

使用 setsebool 命令

SELinux安全文本的修改

使用 restorcon 让文件恢复正确的 SELinux type

命令:restorecon [-Rv] 文件或目录

选项:

-R:连同次目录一起修改

-v:将过程显示到屏幕上

默认的安全性文本查询与修改

使用 semanage 命令

当提示没有 semanage 命令时,先查询 semanage 命令来自哪个软件包,再安装对应包

[root@wenzi ~]# yum provides semanage
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
policycoreutils-python-2.5-34.el7.x86_64 : SELinux policy core python utilities
Repo        : base
Matched from:
Filename    : /usr/sbin/semanage

[root@wenzi ~]# yum -y install policycoreutils-python-2.5-34.el7.x86_64

范例可见 红帽认证—RHCSA_www.example.com_笔落_惊风雨的博客-CSDN博客 中 调试SELinux 题目

帮助文档:man semanage fcontext

更多推荐

Windows【工具 04】WinSW官网使用说明及实例分享(将exe和jar注册成服务)实现服务器重启后的服务自动重启

官方Github;官方下载地址。没有Git加速的话很难下载,分享一下发布日期为2023.01.29的当前最新稳定版v2.12.0网盘连接。包含文件:WinSW-x64.exesample-minimal.xmlsample-allOptions.xml链接:https://pan.baidu.com/s/1sN3hL5

GaussDB OLTP 云数据库配套工具DAS

目录一、前言二、DAS的定义1、DAS的定义2、DAS功能特点三、DAS应用场景1、标准版2、企业版四、操作示例(标准版)1、登录华为控制台登录,输入账号密码2、新增数据库实例链接3、新建对象4、SQL操作5、导入导出五、小结一、前言传统的数据库管理软件,不仅需要下载安装、功能还比较单一,而且已经滞后于云服务的发展模式

让项目顺利上线:做好转测试与上线准备

转测试转测试是项目上线前最后一道坎,需求全部做完并自测后,项目就进入了转测试阶段。很多没想到的问题都会在这个阶段涌现出来,这个阶段大家都会很辛苦,通常都会加班加点。为了缓解这个阶段的压力,我们需要做以下几个改进:一、提前做测试把一些可提前做的事情放到转测试之前做。比如:UI设计师正常是在转测试后来验收视觉效果。但项目周

一文读懂SQL的增删改查(基础教程)

前言一、一些最重要的SQL命令二、查询(SELECT)1、查询所有列2、查询指定列3、查询并去重(DISTINCT)4、按条件查询where5、SQLAND&OR运算符6、SQLORDERBY关键字7、SQLLIMIT关键字8、SQLLIKE操作符9、SQLIN操作符9、SQLBETWEEN操作符三、插入(INSERT

黑马JVM总结(十七)

(1)G1_简介下面介绍一种Grabageone的垃圾回收器,在jdk9的时候称为默认的回收器,废除了之前的CMS垃圾回收器,它的内部也是并发的垃圾回收器我们可以想到堆内存过大,肯定会导致回收速度变慢,因为要涉及到对象的复制、标记,内存过大,对速度会产生影响,划分为小的区域进行管理,可以进行一些优化,标记和复制的速度在

GaussDB之应用无损透明(ALT)

1.背景GaussDB作为一款企业级分布式数据库,提供了“同城跨AZ双活、两地三中心、双集群强一致”等极致的高可用容灾能力。当某个数据库节点由于故障无法对外提供服务时,为了继续保证数据库服务的可用性,JDBC驱动会将业务后续的数据库连接请求发送到其它可用节点上。但故障发生后,已经与故障节点建立会话的连接无法自动切换到可

手撕排序之堆排序

一、概念:什么是逻辑结构、物理结构?逻辑结构:是我们自己想象出来的,就像内存中不存在一个真正的树物理结构(存储结构):实际上在内存中存储的形式。堆的逻辑结构是一颗完全二叉树堆的物理结构是一个数组之前讲过二叉树可以用两种结构进行表示。第一种就是链式结构,将一个一个结点进行链接。第二种就是用数组表示。数组表示意味着我们就是

Godot配置C#语言编写脚本(使用VSCode作为外部编辑器)

文章目录Godot部分查看VSCode的所在位置配置外部编辑器配置VSCode编写脚本中文注释其他文章字符编码Godot部分打开编辑器-编辑器设置;查看VSCode的所在位置右键单击你的VScode快捷方式,选择属性。这里的目标就是你的VSCode所在的位置。配置外部编辑器在编辑器设置里找到.NET-编辑器-Exter

全国职业技能大赛云计算--高职组赛题卷②(容器云)

全国职业技能大赛云计算--高职组赛题卷②(容器云)第二场次题目:容器云平台部署与运维任务1DockerCE及私有仓库安装任务(5分)任务2基于容器的web应用系统部署任务(15分)任务3基于容器的持续集成部署任务(15分)任务4Kubernetes容器云平台部署与运维(15分,本任务只公布考试范围,不公布赛题)需要环境

全国职业技能大赛云计算--高职组赛题卷⑤(私有云)

全国职业技能大赛云计算--高职组赛题卷⑤(私有云)第一场次题目:OpenStack平台部署与运维任务1基础运维任务(5分)任务2OpenStack搭建任务(15分)任务3OpenStack云平台运维(15分)任务4OpenStack云平台运维开发(15分,本任务只公布考试范围,不公布赛题)需要环境私信博主!!!第一场次

人工智能是否有风险

批判性思考人工智能这一挑战经常由人工智能的支持者提出:如果一个机器人足够聪明,与自然人完全没有区别,那么它拥有公民权利难道不是道德和正确的吗?“杀死”这样的生物岂不是有错?我的回答是,这样的生物不能被赋予公民权利,并且消除它本身并没有错。回答通常是这样的:“这难道不是人类自我在说话吗?这就是基于基质的歧视,不是吗?”不

热文推荐