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

Linux之SELinux

目录

概述

定义

作用

SELinux与传统的权限区别

SELinux工作原理

名词解释

主体(Subject)

目标(Object)

策略(Policy)

安全上下文(Security Context)

文件安全上下文查看

命令

分析

类型(type)

SELinux的启动、关闭与查看

三种配置模式

原理图

模式管理

查看当前模式

临时开启/关闭

永久关闭

selinux的状态

命令

分析

selinux配置文件

修改安全上下文

chron命令

作用

格式

示例

restorecon命令

作用

格式

例1 --- 接上例,将~/test 恢复默认类型

semanage命令

作用

格式

常用命令组

实验


概述

定义

        SELinux(Security-Enhanced Linux)是美国国家安全局在 Linux 开源社区的帮助下开发的一个强制访问控制(MAC,Mandatory Access Control)的安全子系统,用于各个服务进程都受到约束,使其仅获取到本应获取的资源

        例如 --- 电脑上下载了一个美图软件,当您全神贯注地使用它给照片进行美颜的时候,它却在后台默默监听着浏览器中输入的密码信息,而这显然不应该是它应做的事情

作用

        SELinux 域限制 --- 对服务程序的功能进行限制,以确保服务程序做不了出格的事情

        SELinux 安全上下文 --- 对文件资源的访问限制,确保文件资源只能被其所属的服务程序访问

SELinux与传统的权限区别

        传统的文件权限与账号的关系 --- 属于自主访问控制DAC(Discretionary Access Control),当某个进程想要对文件进行访问时,系统就会根据该进程的所有者/用户组,比较文件的权限,若通过权限检查,就可以访问该文件,注意:各种权限设置对root用户是无效的

        SELinux以策略规则制定特定程序读取特定文件 --- 属于强制访问控制MAC(Mandatory Access Control),可以针对特定的进程与特定的文件资源来进行权限的控制,即使你是root在使用不同的进程时,你所能取得的权限并不一定是root,而得要看当时该进程的设置而定,则就可以针对进程来进行访问控制

SELinux工作原理

名词解释

主体(Subject)

       主体就是想要访问文件或目录资源的进程。

                自主访问控制系统中(Linux 默认权限中),靠权限控制的主体是用户

                强制访问控制系统中(SELinux 中),靠策略规则控制的主体则是进程

目标(Object)

        需要访问的文件目录资源

策略(Policy)

        Linux 系统中进程与文件的数量庞大,限制进程是否可以访问文件的 SELinux 规则数量就更加烦琐,如果每个规则都需要管理员手工设定,那么 SELinux 的可用性就会极低,所以SELinux 默认定义了两个策略来制订规则

        argeted --- 默认策略,用于限制网络服务(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd),对本机系统的限制极少

        mls --- 多级安全保护策略,该策略限制更为严格

安全上下文(Security Context)

        SELinux 管理过程中,进程是否可以正确地访问文件资源,取决于它们的安全上下文。进程和文件都有自己的安全上下文,SELinux 会为进程和文件添加安全信息标签,比如 SELinux 用户、角色、类型、类别等,当运行 SELinux 后,所有这些信息都将作为访问控制的依据。

        进程是否能够访问文件或目录,就要其安全上下文是否匹配

        例 --- 找对象时,男人看作主体,女人就是目标,男人是否可以追到女人(主体是否可以访问目标),主要看两人的性格是否合适(主体和目标的安全上下文是否匹配),但两个人的性格是否合适,是需要靠生活习惯、为人处世、家庭环境等具体的条件来进行判断的(安全上下文是否匹配是需要通过策略中的规则来确定的)

解析:

        当主体(进程)访问目标(文件)时,首先和 SELinux 中定义好的策略进行匹配

        若符合定义的规则,且主体的安全上下文目标的安全上下文匹配则允许访问文件

        若安全上下文比较失败,则拒绝访问,并通过 AVC(Access Vector Cache,访问向量缓存,主要用于记录所有和 SELinux 相关的访问统计信息)生成拒绝访问信息

注意:

        最终是否可以访问到目标文件,还要匹配产生进程(主体)的用户是否对目标文件拥有合理的rwx权限

文件安全上下文查看

命令

[root@localhost redhat]# ll -Z[root@localhost redhat]# ls -Z

分析

        重点为 --- system_u:object_r:admin_home_t:s0

安全上下文用冒号分为四个字段

身份标识(Identify)--- 相当于账号方面的身份标识,有三种类型:

        root --- 安全上下文的身份是 root,默认会映射为unconfined_u ,可以通过以下命令查看映射关系:

[root@localhost redhat]# semanage login -l

        system_u --- 系统用户身份,其中“_u”代表 user

注意

        user 字段只用于标识数据或进程被哪个身份所拥有,系统数据的 user 字段是 system_u,用户数据 user 字段是 user_u

   seinfo 命令

        作用:查询身份、角色等信息,需要安装才可使用

[root@localhost /]# yum install setools-console -y

        格式:seinfo -参数

        参数:

                -u --- 列出SELinux中所有的身份(user)
                -r --- 列出SELinux中所有的角色(role)
                -t --- 列出SELinux中所有的类型(type)
                -b --- 列出所有的布尔值(也就是策略中的具体规则名称)
                -x --- 显示更多的信息

角色(role)--- 表示此数据是进程还是文件或目录包含

        object_r --- 代表该数据是文件或目录,r代表 role(角色的意思)

        system_r --- 代表进程r代表 role

类型(type)

[root@localhost /]# seinfo -t | more 

        最重要,进程是否可以访问文件,主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配

        在默认的targeted策略中

        类型字段在主体(进程)的安全上下文中被称作(domain)

        类型字段在目标(文件或目录)的安全上下文中被称作类型(type)

        进程的域与文件的类型是否匹配需要查询策略规则

灵敏度 --- 用 s0、s1、s2 来命名,数字为灵敏度分级,数值越大,灵敏度越高

例:查看之前http的默认网页文件信息

[root@localhost /]# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

SELinux的启动、关闭与查看

三种配置模式

        enforcing --- 强制模式,启用SELinux,将拦截服务的不合法请求

        permissive --- 宽容模式,启用SELinux,遇到服务越权访问时,只发出警告而不强制拦截

        disabled --- 关闭模式,SELinux没有运行

原理图

模式管理

查看当前模式

[root@localhost /]# getenforce 

临时开启/关闭

[root@localhost /]# getenforce 
Enforcing
[root@localhost /]# setenforce 0     # 临时关闭,转为宽容模式[root@localhost /]# setenforce 1     # 临时开启,转为强制模式

永久关闭

[root@localhost /]# vim /etc/selinux/config SELINUX=disabled	#将enforcing改为disabled[root@localhost /]# reboot

注意:        

        enforcing与permissive之间切换,需要不重启系统

        enforcing、permissive、与disabled之间切换必须重启系统才会生效

selinux的状态

命令

[root@localhost ~]# sestatus

分析

SELinux status:                 enabled           # 是否启用  
SELinuxfs mount:                /sys/fs/selinux   # selinux临时文件系统的挂载点
SELinux root directory:         /etc/selinux      # 启动目录,配置文件位置
Loaded policy name:             targeted          # 当前加载的策略类型# 策略类型#  targeted:只保护目标进行,默认#  minimum:少数选定进程进行保护#  mls:多级安全保护,最高级
Current mode:                   enforcing         # 执行的模式,重要
Mode from config file:          enforcing         # 配置文件的模式
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

selinux配置文件

[root@localhost ~]# vim /etc/selinux/config SELINUX=enforcing         # 设置模式SELINUXTYPE=targeted      # 设置策略类型# 注意:/etc/sysconfig/selinux文件与上述配置问价内容相同,选择一个配置即可

修改安全上下文

chron命令

作用

        手动修改目标的上下文策略

格式

        chcon  [-R] [-t  type]  [-u  user]  [-r  role]  文件名

-R:递归修改,当前目录及目录下的所有文件都同时设置
-t:后面接安全上下文件的类型字段(重要)
-u:后面接身份标识
-r:后面接角色
-v:显示变动结果

        chcon  -R  --reference=范例文件  文件名

示例

        例1 --- 单独修改

[root@localhost ~]# touch test
[root@localhost ~]# ls -Z test
unconfined_u:object_r:admin_home_t:s0 test
[root@localhost ~]# ls -Z /etc/hosts
system_u:object_r:net_conf_t:s0 /etc/hosts
[root@localhost ~]# chcon -v -t net_conf_t ~/test
changing security context of '/root/test'
[root@localhost ~]# ls -Z test
unconfined_u:object_r:net_conf_t:s0 test

 

        例2 --- 按照范例文件修改

[root@localhost ~]# touch temp
[root@localhost ~]# ls -Z temp
unconfined_u:object_r:admin_home_t:s0 temp
[root@localhost ~]# ls -Z /etc/passwd
system_u:object_r:passwd_file_t:s0 /etc/passwd
[root@localhost ~]# chcon -v --reference=/etc/passwd ~/temp 
changing security context of '/root/temp'
[root@localhost ~]# ls -Z temp 
system_u:object_r:passwd_file_t:s0 temp

restorecon命令

作用

        让文件的SELinux类型恢复为默认的SELinux类型

        默认的SELinux类型与semanage命令有关,其参考semanage命令所查询的默认SELinux类型

格式

        restorecon  [-Rv]  文件或目录

-R:连同子目录一起修改;
-v:将过程显示到屏幕上

例1 --- 接上例,将~/test 恢复默认类型

[root@localhost ~]# ls -Z /root/
[root@localhost ~]# ls -Z ~/test
[root@localhost ~]# restorecon -Rv ~/test
[root@localhost ~]# ls -Z ~/test

semanage命令

作用

        用于管理 SELinux 的策略,查询/修改/增加/删除文件的默认SELinux安全上下文,管理网络端口、消息接口等

格式

        semanage   选项    参数   文件

        选项

                login|user|port|interface|==fcontext==|translation|boolean 

                注意 --- fcontext查询默认安全上下文(重要)

        参数

                 -l :查询
                 -a :添加
                 -m :修改
                 -d :删除
                 -D :全部删除
                 -t :类型
                 -r :角色
                 -s :用户
                 -f :文件

        文件

               设置对象文件或目录

常用命令组

        查询文件默认的安全上下文

[root@localhost ~]# semanage fcontext -l | grep  文件名[root@localhost ~]# semanage fcontext -l |grep /etc/passwd

        查看允许访问的端口号

[root@localhost ~]# semanage port -l | grep ssh[root@localhost ~]# semanage port -l | grep http

实验

        使用httpd服务演示安全上下文值的设定

[root@localhost ~]# systemctl restart firewalld.service 
[root@localhost ~]# firewall-cmd --permanent --add-service=http
[root@localhost ~]# firewall-cmd --reload 
[root@localhost ~]# setenforce 1
[root@localhost ~]# getenforce 
[root@localhost ~]# vim /etc/httpd/conf.d/hosts.conf<Directory "/www/ip">AllowOverride NoneRequire all granted</Directory><VirtualHost 192.168.149.128:80>DocumentRoot "/www/ip/80"ServerName 192.168.149.128</VirtualHost>[root@localhost ~]# mkdir -pv /www/80
[root@localhost ~]# echo this is 80 > /www/80/index.html
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# ls -Zd /var/www/html
system_u:object_r:httpd_sys_content_t:s0 /var/www/html
[root@localhost ~]# chcon -t httpd_sys_content_t /www/ -R
[root@localhost ~]# ls -Zd /www/80
unconfined_u:object_r:httpd_sys_content_t:s0 /www/80
[root@localhost ~]# 

        使用ssh修改默认端口号演示安全上下文

[root@localhost ~]# vim /etc/ssh/sshd_config 
Port 2222
[root@localhost ~]# systemctl restart sshd     # 此时重启会报错
Job for sshd.service failed because the control process exited with error code.
See "systemctl status sshd.service" and "journalctl -xe" for details.

[root@localhost ~]# semanage port -l | grep ssh    # 查看ssh的策略类型及放行的端口号
ssh_port_t                     tcp      22
[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 2222    # 添加
[root@localhost ~]# semanage port -l | grep ssh    
ssh_port_t                     tcp      2222, 22
[root@localhost ~]# systemctl restart sshd

相关文章:

Linux之SELinux

目录 概述 定义 作用 SELinux与传统的权限区别 SELinux工作原理 名词解释 主体&#xff08;Subject&#xff09; 目标&#xff08;Object&#xff09; 策略&#xff08;Policy&#xff09; 安全上下文&#xff08;Security Context&#xff09; 文件安全上下文查看 …...

Acwing算法心得——街灯(差分)

大家好&#xff0c;我是晴天学长&#xff0c;差分广泛用于一段范围的加减运算&#xff0c;可以优化时间复杂度&#xff0c;需要的小伙伴请自取哦&#xff01;如果觉得写的不错的话&#xff0c;可以点个关注哦&#xff0c;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1…...

streamlit执行报错WARNING,重新安装碰到问题如何解决

streamlit执行报错WARNING&#xff0c;重新安装碰到问题如何解决 如何解决1、卸载已经安装的程序2、再次安装程序3、出现如下yinstaller 警告问题&#xff1a;4、又出现“which is not on PATH”警告。5、解决方案 发现在安装的时候有很多WARNING出现&#xff0c;但是没有但回事…...

《C++设计模式》——行为型

前言 行为型模式是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构&#xff0c;而且重点关注它们之间的相互作用。 Interpreter(解释器) Template Method(模板方法) GOOD&#xff1a;把不变的代码部分都转移到父类中&#xff0c;将可变的代…...

什么是原生IP?原生IP与住宅IP有何区别?

相信许多做跨境的都会接触到IP代理&#xff0c;比如电商平台、社媒平台、收款平台等等&#xff0c;都会检测IP。那也会经常听到一些词汇&#xff1a;原生IP、住宅IP&#xff0c;这两者之间有什么区别呢&#xff1f;什么业务需要用到呢&#xff1f;接下来带大家具体了解一下。 什…...

element-plus 表格-自定义样式实现

效果如下 代码如下 <template><h2>表格自定义样式</h2><div style"background-color: cadetblue; height: 600px;"><div class"regulaContainer"><el-table ref"tableRef" :data"tableData" border …...

MVCC

MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是数据库管理系统&#xff08;DBMS&#xff09;中的一种技术&#xff0c;用于管理并发访问数据&#xff0c;允许多个事务同时进行而不互相干扰&#xff0c;同时保持数据的一致性。 MVCC 的工作原理如下&#xf…...

你不知道的JavaScript---对象

1.语法 对象可以通过两种方式定义&#xff1a;一种是对象字面量形式&#xff0c;一种是构造形式 对象字面量&#xff1a; var muObject {key: value }构造形式的&#xff1a; var myObject new Object() myObject.key value不管是使用对象字面量形式还是构造形式创建出来…...

C++项目实战——基于多设计模式下的同步异步日志系统-①-项目介绍

文章目录 专栏导读项目介绍开发环境核心技术环境搭建日志系统介绍1.为什么需要日志系统2.日志系统技术实现2.1同步写日志2.2异步写日志 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&a…...

解决Oracle数据库中日期格式不识别的问题

在数据库开发中&#xff0c;我们经常需要处理日期和时间数据。当我们在Oracle数据库中执行UPDATE语句时&#xff0c;可能会遇到ORA-01821错误&#xff0c;该错误表示提供的日期格式无法被数据库识别。本文将介绍如何解决Oracle数据库中日期格式不识别的问题。 问题分析&#x…...

一生一芯13——linux设置环境变量

参考自https://baijiahao.baidu.com/s?id1753516015142083750&wfrspider&forpc 本机使用ubuntu22.04 目录 1. 读取环境变量1. 读取特定环境变量2. 读取所有环境变量 2. 设置环境变量1. 对当前用户有效2. root设置 1. 读取环境变量 1. 读取特定环境变量 在命令行中输…...

CSS笔记(黑马程序员pink老师前端)定位

定位可以让盒子自由的在某个盒子内移动位置或者固定在屏幕中某个位置&#xff0c;并且可以压住其他盒子。 定位 定位模式 边偏移 定位模式说明static静态定位,按标准流特性摆放,没有边偏移,很少用relative相对定位,相对自身原有位置移动,原有位置继续占有&#xff08;不脱标…...

C高级Linux指令和shell脚本

XMind...

449. 序列化和反序列化二叉搜索树

难度&#xff1a;中等 昨天忘记做了。。。 简单学习一下官方题解 主要是&#xff1a;’ .join(map(str, arr)) int数组转String&#xff0c;中间有空格隔开 list(map(int, data.split())) String转int数组 class Codec:def serialize(self, root: TreeNode) -> str:arr […...

DockerCompose部署es和kibana

DockerCompose文件 version: 3.1 services:elasticsearch:image: elasticsearch:7.13.3container_name: elasticsearchprivileged: trueports:- "9200:9200"- "9300:9300"environment:- ES_JAVA_OPTS-Xms128m -Xmx1024m #设置使用jvm内存大小- cluster.na…...

windows系统docker中将vue项目网站部署在nginx上

一、首先在windows系统上下载并安装docker&#xff0c;要下载windows版本 https://www.docker.com/products/docker-desktop/ PS&#xff1a;安装过程中需要WSL&#xff0c;我的是win11系统&#xff0c;直接提示了我安装就可以下一步了。其他windows系统版本我不知道是否需要单…...

LabVIEW利用纳米结构干电极控制神经肌肉活动

LabVIEW利用纳米结构干电极控制神经肌肉活动 随着人口老龄化&#xff0c;长期护理的必要性变得更加重要&#xff0c;医疗中心的压力开始达到惊人的水平。全球对所有社会和经济部门的认识对于更好地协调卫生和社会服务之间的护理以及为更多的院外治疗提供条件至关重要。 关于医…...

使用PHPStudy在本地快速建立网站并实现局域网外访问(无公网IP)

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…...

Java工具类--http请求-post

支持各类型报文与参数说明 说明&#xff1a; url : 地址timeout&#xff1a;超时时间 如3秒 3*1000contentType&#xff1a;类型 如 application/x-www-form-urlencoded application/jsonapplication/xmlrequestBody&#xff1a;报文内容 如 application/x-www-form-urlenco…...

HTTP【总结】

1. 当用户在浏览器输入网址回车之后&#xff0c;网络协议都做了哪些工作&#xff1f; 首先解析出URL中的域名&#xff0c;根据域名获取对应的ip地址&#xff0c;从浏览器缓存中查看&#xff0c;如果没有则从本机域名解析文件hosts中查看&#xff0c;还没有则从DNS的层层解析。…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...