当前位置: 首页 > news >正文

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

相关文章:

SELinux 入门 pt.2

哈喽大家好,我是咸鱼 在《SELinux 入门 pt.1》中,咸鱼向各位小伙伴介绍了 SELinux 所使用的 MAC 模型、以及几个重要的概念(主体、目标、策略、安全上下文) 我们还讲到: 对于受 SELinux 管制的进程,会先…...

函数(个人学习笔记黑马学习)

1、函数定义 #include <iostream> using namespace std;int add(int num1, int num2) {int sum num1 num2;return sum; }int main() {system("pause");return 0; } 2、函数的调用 #include <iostream> using namespace std;int add(int num1, int num2…...

《Flink学习笔记》——第五章 DataStream API

一个Flink程序&#xff0c;其实就是对DataStream的各种转换&#xff0c;代码基本可以由以下几部分构成&#xff1a; 获取执行环境读取数据源定义对DataStream的转换操作输出触发程序执行 获取执行环境和触发程序执行都属于对执行环境的操作&#xff0c;那么其构成可以用下图表示…...

Vue3.0 新特性以及使用变更总结

Vue3.0 在2020年9月正式发布了&#xff0c;也有许多小伙伴都热情的拥抱Vue3.0。去年年底我们新项目使用Vue3.0来开发&#xff0c;这篇文章就是在使用后的一个总结&#xff0c; 包含Vue3新特性的使用以及一些用法上的变更。 图片.png 为什么要升级Vue3 使用Vue2.x的小伙伴都熟悉…...

ToBeWritten之VSOC安全运营

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 转移发布平台通知&#xff1a;将不再在CSDN博客发布新文章&#xff0c;敬…...

2023爱分析·一站式通信解决方案市场厂商评估报告:牛信云

[图片] 01 中国企业出海发展背景及阶段 出海背景&#xff1a;出海&#xff0c;对中国企业而言&#xff0c;并不陌生。从最初的贸易型出海&#xff0c;到制造业崛起&#xff0c;再到互联网、移动互联网产业腾飞&#xff0c;中国企业在出海道路上走的越发稳健。行业也从最初的家电…...

微信小程序消防知识每天学平台设计与实现

摘 要 消防是当下一个人都需要在日常生活中所高度重视的事项。消防安全关系到居民的日常生活的安全&#xff0c;通过学习消防知识能够提升人们在日常生活中对于灾难的防范。通过对当下的大学生进行调查研究后发现&#xff0c;现在的年轻人在消防意识上比较的单薄&#xff0c;对…...

Oracle跨库访问DBLINK

1. DBLINK的介绍 Oracle在进行跨库访问时&#xff0c;可以创建DBLINK实现&#xff0c;比如要将UAT的表数据灌入开发环境&#xff0c;则可以使用UAT库为数据源&#xff0c;通过DBLINK实现将查出的数据灌入开发库。 简而言之就是在当前数据库中访问另一个数据库中的表中的数据 2…...

【vue3.0 组合式API与选项式API是什么,有什么区别】

vue3.0 组合式API与选项式API是什么 Vue3.0中引入了组合式API&#xff08;Composition API&#xff09;&#xff0c;同时保留了选项式API&#xff08;Options API&#xff09;。两种 API 风格都能够覆盖大部分的应用场景。它们只是同一个底层系统所提供的两套不同的接口。实际…...

React配置代理的5种方法

React配置代理的五种方法的介绍 使用create-react-app的代理配置&#xff1a; 使用场景&#xff1a;适用于使用create-react-app创建的React项目&#xff0c;特别是小型项目或快速原型开发。优点&#xff1a;配置简单&#xff0c;无需额外安装依赖&#xff0c;适合快速开发和简…...

皮卡丘靶场搭建遇到的问题大全

该博客记录我在安装皮卡丘靶场中遇到的一些问题。 1、 phpstudy_pro启动Mysql失败 自己电脑开启了mysql服务&#xff0c;使用winr&#xff0c;services.msc&#xff0c;找到自己的mysql服务&#xff0c;关闭。再次尝试使用phpstudy_pro启动mysql&#xff0c;成功解决。 2、皮…...

【C++】C++11的新特性(上)

引入 C11作为C标准的一个重要版本&#xff0c;引入了许多令人振奋的新特性&#xff0c;极大地丰富了这门编程语言的功能和表达能力。本章将为您介绍C11的一些主要变化和改进&#xff0c;为接下来的章节铺垫。 文章目录 引入 一、列表初始化 1、1 {} 初始化 1、2 std::initiali…...

ubuntu学习(四)----文件写入操作编程

1、write函数的详解 ssize_t write(int fd,const void*buf,size_t count); 参数说明&#xff1a; fd:是文件描述符&#xff08;write所对应的是写&#xff0c;即就是1&#xff09; buf:通常是一个字符串&#xff0c;需要写入的字符串 count&#xff1a;是每次写入的字节数…...

如何解决MySQL中的套接字错误

MySQL通过使用** socket文件**来管理到数据库服务器的连接&#xff0c;socket文件是一种特殊的文件&#xff0c;可以促进不同进程之间的通信。MySQL服务器的套接字文件名为mysqld.sock&#xff0c;在Ubuntu系统中&#xff0c;它通常存储在/var/run/mysqld/目录中。该文件由MySQ…...

socket

Socket是一种用于网络通信的编程接口&#xff0c;它提供了在计算机网络中进行数据传输的方法。通过Socket&#xff0c;可以在不同主机之间建立网络连接&#xff0c;并通过发送和接收数据来进行通信。在C语言中&#xff0c;可以使用Socket函数库&#xff08;如BSD Socket或Winso…...

Python数据分析实战-判断一组序列(列表)的变化趋势(附源码和实现效果)

实现功能 判断一组序列&#xff08;列表&#xff09;的变化趋势 实现代码 from sklearn.linear_model import LinearRegression import numpy as np # 计算相邻两个数之间的差值的均值&#xff0c;并判断变化趋势。 def trend(lst):diff [lst[i1] - lst[i] for i in range(…...

Spring与MyBatis集成 AOP整合PageHelper插件

目录 1.什么是集成&#xff1f; 2.Spring与MyBatis集成 3.Spring与MyBatis集成的基本配置 4.AOP整合PageHelper插件 1.什么是集成&#xff1f; 集成是指将不同的组件、框架或系统整合到一起&#xff0c;使它们可以协同工作、相互调用、共享资源等。通过集成&#xff0c;可以…...

[Android 四大组件] --- BroadcastReceiver

1 BroadcastReceiver是什么 BroadcastReceiver&#xff08;广播接收器&#xff09;即广播&#xff0c;是一个全局的监听器。 Android 广播分为两个角色&#xff1a;广播发送者、广播接受者。 2 广播类型 广播按照类型分为两种&#xff0c;一种是全局广播&#xff0c;另一种…...

<C++> STL_容器适配器

1.容器适配器 适配器是一种设计模式&#xff0c;该种模式是将一个类的接口转换成客户希望的另外一个接口。 容器适配器是STL中的一种重要组件&#xff0c;用于提供不同的数据结构接口&#xff0c;以满足特定的需求和限制。容器适配器是基于其他STL容器构建的&#xff0c;通过…...

【25考研】- 整体规划及高数一起步

【25考研】- 整体规划及高数一起步 一、整体规划二、专业课870计算机应用基础参考网上考研学长学姐&#xff1a; 三、高数一典型题目、易错点及常用结论&#xff08;一&#xff09;典型题目&#xff08;二&#xff09;易错点&#xff08;三&#xff09;常用结论1.令tarctanx, 则…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...