SELinux 入门 pt.2

哈喽大家好,我是咸鱼

在《SELinux 入门 pt.1》中,咸鱼向各位小伙伴介绍了 SELinux 所使用的 MAC 模型、以及几个重要的概念(主体、目标、策略、安全上下文)

我们还讲到:

  • 对于受 SELinux 管制的进程,会先检查 SELinux 策略规则,然后再检查 DAC 规则
  • 对于不受 SELinux 管制的进程,仍然会执行 DAC 规则

也就是说对于受 SELinux 管制的进程而言,想要对文件资源进行操作,需要先经过 SELinux 策略规则的三个关卡(SELinux 模式查看——>策略规则比对——>安全上下文比对),然后再经过 DAC 规则中的 rwx 权限比对

过程如下图所示
在这里插入图片描述
需要注意的是,并不是所有的程序都会被 SELinux 所管制,被 SELinux 管制的进程主体被称为【受限程序主体】

举个例子,我们看一下 crond 进程和 bash 进程

# 通过 ps 命令查看
[root@localhost ~]# ps -eZ | grep -E 'cron|bash'
system_u:system_r:crond_t:s0-s0:c0.c1023 1340 ? 00:00:00 atd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 28094 pts/0 00:00:00 bash
system_u:system_r:crond_t:s0-s0:c0.c1023 28174 ? 00:00:00 crond

可以看到,crond 是受限的主体进程(crond_t),而 bash 因为是本机进程,因此就是不受限 unconfined_t 的类型,即 bash 可以直接进行 rwx 权限比对,而不需要进行 SELinux 策略规则比对

接下来我们来分别看一下 SELinux 策略规则比对中的三个关卡

SELinux 运行模式

受限程序主体首先来到第一关:SELinux 运行模式比对

SELinux 有三种运行模式,用于控制系统中进程和文件资源访问的安全性

这三种模式分别是:

  • Enforcing(强制)

这个是默认的模式,在这个模式下 SELinux 正常运行,会强制执行访问控制规则,限制进程和用户对系统资源的访问

如果一个进程试图执行未经授权的操作,如读取或修改受限文件,强制模式会阻止这些操作并记录相关的安全事件

  • permissive(宽松)

在宽松模式下,SELinux 会记录违反访问规则的操作,但不会阻止它们

这允许用户查看哪些操作会受到限制,但不会影响应用程序的正常运行

宽容模式通常用于识别需要修改的规则,以确保应用程序在强制模式下可以正常运行

  • disabled(禁用)

在禁用模式下,SELinux 完全被关闭,不再对进程和文件访问进行任何安全限制

如何查看当前 SELinux 的运行模式?

[root@localhost ~]# getenforce 
Enforcing

如果返回结果是 Enforcing,表示当前运行在强制模式;如果是 Permissive,表示运行在宽容模式;如果是 Disabled,表示 SELinux 被禁用

如何切换 SELinux 运行模式?

  • 临时切换
# 更改为 enforcing 模式
[root@localhost ~]# setenforce 1# 更改为 permissive 模式
[root@localhost ~]# setenforce 0

PS:临时切换系统重启后会恢复为默认模式

如果 SELinux 为 disabled 运行模式,表示 SELinux 已经关闭,是无法切换成 Enforcing 模式或 Permissive 模式的

  • 永久切换

如果要永久更改,需要修改配置文件

以 CentOS 7.x 为例

[root@localhost ~]# vim /etc/selinux/config

SELINUX 的值更改为 enforcingpermissivedisabled,保存文件然后重启系统

策略与规则

受限主体程序通过第一关之后来到第二关——策略(policy)和规则(rule)比对

可以使用 sestatus 来查看当前 SELinux 使用那些策略

sestatus
-v:检查位于 /etc/sestatus.conf 中的文件与进程的安全上下文
-b:显示当前策略的规则(以布尔值列出)
[root@localhost ~]# sestatus
SELinux status:                 enabled # selinux 是否启动
SELinuxfs mount:                /sys/fs/selinux # selinux 相关文件挂载点
SELinux root directory:         /etc/selinux # 根目录
Loaded policy name:             targeted # 当前策略
Current mode:                   permissive # 当前模式
Mode from config file:          enforcing # 当前在配置文件内的模式
Policy MLS status:              enabled # 是否包含 MLS 模式
Policy deny_unknown status:     allowed # 是否预设抵挡未知的主体进程
Max kernel policy version:      31

如果想要查看当前策略下的规则,可以使用setatus -b 或者 getsebool 命令

[root@localhost ~]# sestatus -a
[root@localhost ~]# getsebool
[root@localhost ~]# getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
antivirus_can_scan_system --> off
antivirus_use_jit --> off
auditadm_exec_content --> on
authlogin_nsswitch_use_ldap --> off
authlogin_radius --> off
authlogin_yubikey --> off
awstats_purge_apache_log_files --> off
boinc_execmem --> on
cdrecord_read_content --> off
cluster_can_network_connect --> off
cluster_manage_all_files --> off
cluster_use_execmem --> off
cobbler_anon_write --> off
...

我们可以看到上面的输出中有特别多的 SELinux 规则,但是每个规则中具体是怎么限制的我们却还不知道

我们可以通过 seinfo 等工具进行查看

# 需要先下载
[root@localhost ~]# yum install -y setools-console
# 可以看到策略是 targeted,这个策略的安全上下文类型有 4793 个,而规则(Booleans)则有 316 条
[root@localhost ~]# seinfo Statistics for policy file: /sys/fs/selinux/policy
Policy Version & Type: v.31 (binary, mls)Classes:           130    Permissions:       272Sensitivities:       1    Categories:       1024Types:            4793    Attributes:        253Users:               8    Roles:              14Booleans:          316    Cond. Expr.:       362Allow:          107834    Neverallow:          0Auditallow:        158    Dontaudit:       10022Type_trans:      18153    Type_change:        74Type_member:        35    Role allow:         37Role_trans:        414    Range_trans:      5899Constraints:       143    Validatetrans:       0Initial SIDs:       27    Fs_use:             32Genfscon:          103    Portcon:           614Netifcon:            0    Nodecon:             0Permissives:         0    Polcap:              5
# 查看用户
[root@localhost ~]# seinfo -uUsers: 8sysadm_usystem_uxguest_urootguest_ustaff_uuser_uunconfined_u# 查看角色
[root@localhost ~]# seinfo -rRoles: 14auditadm_rdbadm_rguest_rstaff_ruser_rlogadm_robject_rsecadm_rsysadm_rsystem_rwebadm_rxguest_rnx_server_runconfined_r

前面我们知道 crond 进程的类型是 crond_t,那我想知道 crond_t 这个 domain 能够读取那些 type 的文件资源

# 查询 crond_d 主体
[root@localhost ~]# sesearch -A -s crond_t
...allow crond_t user_cron_spool_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;allow crond_t user_cron_spool_t : dir { ioctl read write getattr lock add_name remove_name search open } ; allow crond_t unconfined_cronjob_t : process transition ; allow crond_t openshift_domain : process transition ; allow crond_t security_t : lnk_file { read getattr } ; 
...

allow 后面接主体进程以及文件的 SELinux 类型,比如说 crond_t 可以读取 user_cron_spool_t 类型的文件和目录

那如果想要关闭或打开某个 SELinux 规则,该怎么办

# 查询到下面的规则是 off 状态,我们想打开它
[root@localhost ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off# 启动
# 一定要加上 -P ,这样才会写入配置文件
[root@localhost ~]# setsebool -P httpd_enable_homedirs 1

安全上下文

第一关考虑 SELinux 三种运行模式,第二关考虑了 SELinux 的策略规则

现在我们来到了第三关——安全上下文比对

关于安全上下的知识我在《SELinux 入门 pt.1》中已经介绍过了,今天我们着重讲下安全上下文的修改

  • chcon 手动修改

chcon 命令的基本语法如下:

chcon [options] context file...

其中,context表示要设置的安全上下文,file...表示要修改的文件或目录路径。下面是一些常用的选项和示例:

  1. -R, --recursive: 递归修改指定目录下所有文件的安全上下文
  2. -t, --type: 指定要设置的新类型标签
  3. -u, --user: 指定要设置的新用户
  4. -r, --role: 指定要设置的新角色

举几个例子

# 修改文件的安全上下文类型:
chcon -t httpd_sys_content_t /var/www/html/index.html# 递归修改目录及其子目录中的文件安全上下文类型:
chcon -R -t httpd_sys_content_t /var/www/html/# 修改文件的安全上下文用户和角色:
chcon -u system_u -r object_r /path/to/file
  • restorecon 恢复为默认值

使用 chcon 命令修改安全上下文可能会导致某些文件和目录的访问权限问题

如果对 SELinux 的运作机制和相应的安全策略不熟悉的,可以使用 restorecon 命令恢复默认的 SELinux 上下文

基本语法如下:

restorecon [-R] [-v] [file...]
-R :表示递归地操作目录及其子目录
-v :表示显示详细信息
file... :是要进行恢复的文件或目录路径

举个例子

# 恢复单个文件的安全上下文:
restorecon /var/www/html/index.html# 递归地恢复目录及其子目录的安全上下文:
restorecon -R /var/www/html/# 显示详细信息:
restorecon -v /var/www/html/index.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/110558.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React绑定antd输入框,点击清空或者确定按钮实现清空输入框内容

其实实现原理和vue的双向绑定是一样的,就是监听输入框的onChange事件,绑定value值,当输入框内容发生变化后,就重新设置这个value值。 示例代码:我这里是统一在handleCancel这个函数里面处理清空逻辑了,你们…

手机云控设计思路

本系统为任务分发系统,上游发布任务或者接受其他平台系统分发的任务,对任务进行规则引擎处理后分类,由核心分发系统部分进行对存活的空闲终端进行分发任务,终端做完任务后进行反馈给任务系统. 核心要处理的点是终端存活与空闲的统计、任务平均分布下发给终端的算法,保证分布的…

idea 创建mybatis xml文件时找不到

1、File >Settings 如图 &#xff1a; 2、添加模板&#xff1a;如下图 3、添加xml模板 如下图&#xff1a; 模板内容&#xff1a; <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//E…

13.搬砖

目录 题目 Description Input Output 思路&#xff08;归并排序&#xff09; 具体步骤如下 C整体代码&#xff08;含详细注释&#xff09; 归并排序总结 核心步骤 代码模板 题目 Description 小张在暑假时间来到工地搬砖挣钱。包工头交给他一项艰巨的任务&#xff0…

【进阶篇】MySQL 存储引擎详解

文章目录 0.前言1.基础介绍2.1. InnoDB存储引擎底层原理InnoDB记录存储结构和索引页结构InnoDB记录存储结构&#xff1a;InnoDB索引页结构&#xff1a; 3. MVCC 详解3.1. 版本号分配&#xff1a;3.2. 数据读取&#xff1a;3.3. 数据写入&#xff1a;3.4. 事务隔离级别&#xff…

OpenHarmony设备截屏的5种方式

本文转载自《OpenHarmony设备截屏的5种方式 》&#xff0c;作者westinyang 目录 方式1&#xff1a;系统控制中心方式2&#xff1a;OHScrcpy投屏工具方式3&#xff1a;DevEcoStudio截屏功能方式4&#xff1a;hdc shell snapshot_display方式5&#xff1a;hdc shell wukong持续关…

alpha shapes提取二维点云边界(附python代码)

alpha shapes算法是一种简单、有效的快速提取边界点算法。其克服了点云边界点形状影响的缺点,可快速准确提取边界点,其原理如下: 如下图所示,对于任意形状的平面点云,若一个半径为a的圆,绕其进行滚动。若滚动圆半径a足够小时,则点云中每一点均为边界点;若适当增大到一…

linux内网yum源服务器搭建

1.nginx: location / {root /usr/local/Kylin-Server-V10-SP3-General-Release-2303-X86_64;autoindex on;autoindex_localtime on;autoindex_exact_size off; } 注:指定到镜像的包名 2.修改yum源地址 cd /etc/yum.repos.d/vim kylin_x86_64.repo 注: --enabled设置为1 3.重…

java内存分区

按照垃圾收集&#xff0c;将 Java 堆划分为**新生代 &#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;**两个区域&#xff0c; 新生代存放存活时间短的对象&#xff0c;而每次回收后存活的少量对象&#xff0c;将会逐步晋升到老年代中…

Qt:界面实时响应鼠标拖动绘制

采用双缓冲实现界面实时响应鼠标的拖动绘制。 思想如下&#xff1a;首先需要两张画布pix和tempPix&#xff0c;他们都是QPixmap实例&#xff1b;pix用来保存初始界面或上一阶段以完成的绘制&#xff1b;tempPix用来作为鼠标拖动时的实时界面绘制&#xff1b;当鼠标左键按下后拖…

Ubuntu 22.04.3 LTS 维护更新发布

近日消息&#xff0c;Canonical 今天发布了代号为 Jammy Jellyfish、长期支持的 Ubuntu 22.04 第 3 个维护版本更新&#xff0c;距离上个版本相隔 6 周时间。 Ubuntu 22.04.3 LTS 最大的亮点在于内核升级到 Linux Kernel 6.2&#xff0c;此外 Mesa 图形堆栈也升级到 23.0.4 版…

记一种不错的缓存设计思路

之前与同事讨论接口性能问题时听他介绍了一种缓存设计思路&#xff0c;觉得不错&#xff0c;做个记录供以后参考。 场景 假设有个以下格式的接口&#xff1a; GET /api?keys{key1,key2,key3,...}&types{1,2,3,...} 其中 keys 是业务主键列表&#xff0c;types 是想要取到的…

呈现数据的精妙之道:选择合适的可视化方法

在当今数据时代&#xff0c;数据可视化已成为理解和传达信息的重要手段。然而&#xff0c;选择适合的数据可视化方法对于有效地呈现数据至关重要。不同的数据和目标需要不同的可视化方法&#xff0c;下面我们将探讨如何选择最佳的数据可视化方法来呈现数据。 1. 理解数据类型&a…

构建安全可信、稳定可靠的RISC-V安全体系

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

OpenCV 没有xfeatures2d解决方法

运行程序出现错误——无法打开包括文件: “opencv2/xfeatures2d.hpp”: No such file or directory 参考&#xff1a;博主1,博主2 从该链接下载与opencv版本一致的opencv_contrib&#xff0c;我安装的opencv是3.4.15&#xff0c;下载了opencv_contrib-3.4。 下面代码可以查看…

NetMarvel机器学习促广告收益最大化,加速获客

游戏出海的竞争日益激烈&#xff0c;这并非空穴来风。 从2021年第一季度至2022年第四季度&#xff0c;iOS平台的CPI增长了88%&#xff0c;意味着厂商需要花费近两倍的钱才能获取一个新用户。与此同时数据隐私政策持续收紧&#xff0c;更加提高了营销成本。 在成本高涨的当下&…

替代LT8711龙讯替代RTD2172 CS5265中文规格书4K60HZ转接线 设计Type-C转HDMI2.0高清投屏方案

龙迅LT8711是一款Type-C/DP1.2 to HDMI2.0方案芯片&#xff0c;北京集睿致远&#xff08;ASL&#xff09;推出的CS5265可以完全代替LT8711UX&#xff0c;封装尺寸比LT8711UX小的同时&#xff0c;CS5265的芯片集成度高&#xff0c;内置MCU&#xff0c;内置lLDO等&#xff0c;CS5…

无涯教程-Android - 系统架构

Android操作系统是一堆软件组件&#xff0c;大致分为五个部分和四个主要层&#xff0c;如体系结构图中所示。 Linux内核 底层是Linux-Linux 3.6&#xff0c;带有大约115个补丁&#xff0c;这在设备硬件之间提供了一定程度的抽象&#xff0c;并且包含所有必需的硬件驱动程序&am…

【PLSQL】PLSQL基础

文章目录 一&#xff1a;记录类型1.语法2.代码实例 二&#xff1a;字符转换三&#xff1a;%TYPE和%ROWTYPE1.%TYPE2.%ROWTYPE 四&#xff1a;循环1.LOOP2.WHILE&#xff08;推荐&#xff09;3.数字式循环 五&#xff1a;游标1.游标定义及读取2.游标属性3.NO_DATA_FOUND和%NOTFO…

Rancher2.5.9版本证书更新

一、环境 主机名IP地址操作系统rancher版本K8s-Master192.168.10.236Centos 72.5.9 二、更新证书 1、查看当前证书到期时间 2、进行证书轮换 [rootK8s-Master ~]# docker ps |grep rancher/rancher d581da2b7c4e rancher/rancher:v2.5.9 &q…