当前位置: 首页 > 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的层层解析。…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

go 里面的指针

指针 在 Go 中&#xff0c;指针&#xff08;pointer&#xff09;是一个变量的内存地址&#xff0c;就像 C 语言那样&#xff1a; a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10&#xff0c;通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

如何做好一份技术文档?从规划到实践的完整指南

如何做好一份技术文档&#xff1f;从规划到实践的完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...