9.SELinux

目录

1. 概述

1.1. 概念

1.2. 作用:

1.3. SELinux与传统的权限区别

2. SELinux工作原理

2.1. 名词解释

2.1.1. 主体(Subject)

2.1.2. 目标(Object)

2.1.3. 策略(Policy)

2.1.4. 安全上下文(Security Context)

2.2. 文件安全上下文查看

2.2.1. 先启用selinux

2.2.2. 命令:

3. SELinux的启动、关闭与查看

3.1. 三种配置模式

3.2. 原理图:

3.3. 模式管理

3.3.1. 查看当前模式

3.3.2. 临时开启/关闭

3.3.3. 永久关闭

3.3.4. 注意

3.4. selinux的状态

3.4.1. 命令

3.4.2. 分析

4. 修改安全上下文

4.1. chcon命令

4.1.1. 作用

4.1.2. 格式

4.1.3. 示例

4.2. restorecon命令

4.2.1. 作用

4.2.2. 格式:

4.3. semanage命令

4.3.1. 作用

4.3.2. 安装

4.3.3. 格式1:

4.3.4. 常用命令组

4.3.5. 布尔值的查询与修改:

4.4. 实验

4.4.1. 实验1

4.4.2. 实验2

4.4.3. 实验3


1. 概述

1.1. 概念

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

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

1.2. 作用:

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

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

1.3. SELinux与传统的权限区别

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

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

2. SELinux工作原理

2.1. 名词解释

2.1.1. 主体(Subject)

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

进程得到资源流程:由用户调用命令,由命令产生进程,由进程去访问文件或目录资源。

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

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

2.1.2. 目标(Object)

目标就是需要访问的文件或目录资源

2.1.3. 策略(Policy)

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

2个默认策略

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

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

2.1.4. 安全上下文(Security Context)

所有进程、文件和目录都有自己的安全上下文

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

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

关系图:

解释:

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

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

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

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

2.2. 文件安全上下文查看

2.2.1. 先启用selinux

# 安装所需软件
[root@server ~]# yum install selinux-policy selinux-policy-targeted -y
# 编辑selinux配置文件
[root@server ~]# vim /etc/selinux/config # 先转为临时模式
SELINUX=permissive
[root@server ~]# touch /.autorelabel # 重建文件
[root@server ~]# reboot
[root@server ~]# vim /etc/selinux/config # 改为强制模式
SELINUX=enforcing
[root@server ~]# reboot

open启动方法

2.2.2. 命令:

[root@server ~]# ls -Z
system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
[root@server ~]# ll -Z
总用量 4
-rw-------. 1 root root system_u:object_r:admin_home_t:s0 1231 11月 15 12:00
anaconda-ks.cfg

2.2.3. 分析

重点为:system_u:object_r:admin_home_t:s0

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

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

(1)root:安全上下文的身份是 root,默认会映射为unconfined_u

(2)system_u:系统用户身份,其中“_u”代表 user

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

(4)seinfo 命令

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

[root@server ~]# yum install setools-console -y

格式:seinfo -参数

参数:

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

角色(role):表示此数据是进程还是文件或目录包含(了解就行)

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

(2)system_r:进程r代表 role

类型(type):

(1)

[root@server ~]# seinfo -t | more # 4991个类型

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

(3)在默认的targeted策略中

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

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

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

灵敏度:用 s0s1s2 来命名,数字为灵敏度分级,数值越大,灵敏度越高

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

[root@server ~]# yum install nginx -y
[root@server ~]# systemctl start nginx[root@server ~]# ls -Zd /usr/share/nginx/html
system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html

3. SELinux的启动、关闭与查看

3.1. 三种配置模式

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

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

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

3.2. 原理图:

3.3. 模式管理

3.3.1. 查看当前模式

[root@server ~]# getenforce

3.3.2. 临时开启/关闭

[root@server ~]# setenforce 0 # 临时关闭selinux,转为宽容模式,重启系统失效
[root@server ~]# getenforce
Permissive[root@server ~]# setenforce 1 # 临时开启selinux,转为强制模式,重启失效
[root@server ~]# getenforce
Enforcing

3.3.3. 永久关闭

[root@server ~]# vim /etc/selinux/configSELINUX=disabled[root@server ~]# reboot

3.3.4. 注意

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

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

3.4. selinux的状态

3.4.1. 命令

[root@server ~]# sestatus

3.4.2. 分析

[root@server ~]# 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

3.5. selinux配置文件

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

4. 修改安全上下文

4.1. chcon命令

4.1.1. 作用

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

4.1.2. 格式

# 方法1
chcon [-R] [-t type] [-u user] [-r role] 文件名
-R:递归修改,当前目录及目录下的所有文件都同时设置
-t:后面接安全上下文件的类型字段(重要)
-u:后面接身份标识
-r:后面接角色
-v:显示变动结果
# 方法2:
chcon -R --reference=范例文件 文件名

4.1.3. 示例

例1:单独修改

[root@server ~]# touch test
[root@server ~]# ls -Z test
unconfined_u:object_r:admin_home_t:s0 test
[root@server ~]# ls -Z /etc/hosts
system_u:object_r:net_conf_t:s0 /etc/hosts
[root@server ~]# chcon -v -t net_conf_t ~/test
正在更改 '/root/test' 的安全上下文
[root@server ~]# ls -Z test
unconfined_u:object_r:net_conf_t:s0 test

例2:按照范例文件修改

[root@server ~]# touch temp
[root@server ~]# ls -Z temp
unconfined_u:object_r:admin_home_t:s0 temp[root@server ~]# ls -Z /etc/passwd
system_u:object_r:passwd_file_t:s0 /etc/passwd[root@server ~]# chcon -v --reference=/etc/passwd ~/temp
正在更改 '/root/temp' 的安全上下文
[root@server ~]# ls -Z temp
system_u:object_r:passwd_file_t:s0 temp

4.2. restorecon命令

4.2.1. 作用

让文件的SELinux类型恢复为默认的SELinux类型默认的SELinux类型与semanage命令有关,其参考semanage命令所查询的默认SELinux类型

4.2.2. 格式:

restorecon [-Rv] 文件或目录
-R:连同子目录一起修改;
-v:将过程显示到屏幕上

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

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

4.3. semanage命令

4.3.1. 作用

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

4.3.2. 安装

[root@server ~]# yum install policycoreutils-python-utils  -y

4.3.3. 格式1:

semanage 选项 参数 文件

选项:login|user|port|interface|fcontext|translation|boolean ,注意:fcontext查询默认安全上下文(重要)

参数

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

文件:设置对象文件或目录

4.3.4. 常用命令组

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

[root@server ~]# semanage fcontext -l | grep 文件名[root@server ~]# semanage fcontext -l | grep /etc/passwd
/etc/passwd[-\+]? regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.OLD regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.adjunct.* regular file system_u:object_r:passwd_file_t:s0
/etc/passwd\.lock regular file system_u:object_r:passwd_file_t:s0

查看允许访问的端口

[root@server ~]# semanage port -l | grep 协议
[root@server ~]# semanage port -l | grep http
http_cache_port_t 	tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t 	udp 3130
http_port_t 		tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t 	tcp 5988
pegasus_https_port_t 	tcp 5989[root@server ~]# semanage port -l | grep dns
dns_port_t 		tcp 53, 853
dns_port_t 		udp 53, 853
dnssec_port_t 	tcp 8955

4.3.5. 布尔值的查询与修改:

作用:布尔值可以作为文件规则的开关来控制权限的给予:放行/阻塞

常用命令:

getsebool -a # 列出目前系统上面的所有布尔值条款
getsebool 规则名
setsebool -P 规则名=1|0 # 设置写入文件

4.4. 实验

4.4.1. 实验1

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

服务端操作

# 恢复快照# 开启selinux
[root@server ~]# vim /etc/selinux/config
SELINUX=enforcing[root@server ~]# reboot# 查看模式
[root@server ~]# getenforce
Enforcing# nginx软件安装
[root@server ~]# yum install nginx -y# 新建存储网页的目录
[root@server ~]# mkdir -p /www/zy# 使用xftp将zy网站数据文件上传到/www/zy目录中# 编辑nginx主配置文件
[root@server ~]# vim /etc/nginx/nginx.confroot 	/www/zy;
# 重启服务
[root@server ~]# systemctl restart nginx# 测试,返回403,说明selinux对/www/zy的安全上下文件检测未通过# 将/www/zy的策略类型改为已知可以访问的策略
[root@server ~]# ls -Zd /usr/share/nginx/html/
system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html/[root@server ~]# ls -Zd /www/zy
unconfined_u:object_r:default_t:s0 /www/zy
[root@server ~]# chcon -Rv -t httpd_sys_content_t /www/zy# 注意:chcon命令也可以使用参照范例文件修改来实现访问
[root@server ~]# chcon -R --reference=/usr/share/nginx/html/ /www/zy
[root@server ~]# ls -Zd /www/zy
system_u:object_r:httpd_sys_content_t:s0 /www/zy# 浏览器中重新测试

4.4.2. 实验2

使用nginx服务的端口号修改演示selinux的设定

# 基于上例
# 检查selinux的状态
[root@server ~]# getenforce
Enforcing
# 编辑httpd的主配置文件修改监听端口号
[root@server ~]# vim /etc/nginx/nginx.confserver {listen 7777;# 重启服务失败,selinux拦截端口的修改
[root@server ~]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for
details.# 查看selinux允许的端口号
[root@server ~]# semanage port -l | grep http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988# 使用semanage命令将7777端口号添加到http_port_t类型列表中
[root@server ~]# semanage port -a -t http_port_t -p tcp 7777
[root@server ~]# semanage port -l | grep http_port_t# 重启服务
[root@server ~]# systemctl restart nginx# 测试,浏览器输入:192.168.223.129:7777

4.4.3. 实验3

演示ssh端口号修改的selinux设定

[root@server ~]# vim /etc/ssh/sshd_config # 修改ssh的端口号为2222
Port 2222[root@server ~]# systemctl restart sshd # 重启服务失败
Job for sshd.service failed because the control process exited with error code.
See "systemctl status sshd.service" and "journalctl -xeu sshd.service" for
details.[root@server ~]# semanage port -l | grep ssh_port_t # 查看ssh的的端口号策略
ssh_port_t tcp 22
[root@server ~]# semanage port -a -t ssh_port_t -p tcp 2222 # 策略中添加新端口
[root@server ~]# semanage port -l | grep ssh_port_t
ssh_port_t 			tcp 			2222, 22
[root@server ~]# systemctl restart sshd

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

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

相关文章

详解Redis哨兵模式下,主节点掉线而重新选取主节点的流程

⭐最核心的结论:所谓选举的过程不是直接选出新的主节点,而是先在哨兵节点中选出 leader ,再由 leader 负责后续主节点的指定。 假定当前环境: 三个哨兵(sentenal1, sentenal2, sentenal3)一个主节点(redis-master)两个从节点(red…

接口测试框架对比

公司计划系统的开展接口自动化测试,需要我这边调研一下主流的接口测试框架给后端测试(主要测试接口)的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求,看哪个框架更适合我们。 需求 1、接口编写…

端到端实现高精地图重建(TopoNet解读和横评)

论文出处 [2304.05277] Graph-based Topology Reasoning for Driving Scenes (arxiv.org)https://arxiv.org/abs/2304.05277 TopoNet TopoNet的目标是从车辆上安装的多视角摄像头获取图像,感知实体并推理出驾驶场景的拓扑关系,实现端到端预测&#xf…

【自动化测试】----Java的单元测试工具Junit5

目录 支持Java的最低版本为8在pom.xml添加依赖Junit提供的注解功能 断言 Assertion类提供的一些方法测试用例执行顺序 (为了预防测试用例执行顺序错误)参数化 (假设登陆操作,用户名和密码很多,尽可能通过一个测试用例…

Java多线程--JDK5.0新增线程创建方式

文章目录 一、新增方式1:实现Callable接口(1)介绍(2)案例(3)总结对比 二、新增方式2:使用线程池(1)问题与解决思路1、现有问题2、解决思路3、好处 &#xff0…

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注:数据库配置比较重要 先将本地的Docker启动起来,用Docker管理数据库 将项目自己创建的Todo相关的都删掉…

以小猪o2o生活通v17.1为例简要分析SWOOLE加密破解,swoole_loader加密破解swoole加密逆向后的代码修复流程(个人见解高手掠过)

现在用Php加密五花八门除了组件就是混淆,在组件里面响当当的还属swoole,SWOOLEC是不错的国产加密,值得推荐官方宣称是永远无法破解的加密算法,针对swoole compiler的代码修复我谈谈我的看法,以小猪o2o生活通&#xff0…

PyTorch 2.2 中文官方教程(十九)

使用 RPC 进行分布式管道并行 原文:pytorch.org/tutorials/intermediate/dist_pipeline_parallel_tutorial.html 译者:飞龙 协议:CC BY-NC-SA 4.0 作者:Shen Li 注意 在github中查看并编辑本教程。 先决条件: PyTorc…

04-Java建造者模式 ( Builder Pattern )

建造者模式 摘要实现范例 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象 一个Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的 建造者模式属于创建型模式,它提供了一种创建对…

深度学习手写字符识别:训练模型

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客,网上也有很多教程,很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

vcruntime140.dll最新的修复方法,一键修复vcruntime140.dll的手段

在这篇文章中,我们将深入探讨并详细介绍各种修复vcruntime140.dll文件缺失或损坏问题的方法。鉴于此类问题广泛存在并影响了众多用户,本文目的是向大家展示不同的修复策略,希望能够帮助每个人解决这些棘手的技术难题。下面一起来看看vcruntim…

【RT-DETR有效改进】UNetv2提出的一种SDI多层次特征融合模块(细节高效涨点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本问给大家带来的改进机制是UNetv2提出的一种多层次特征融合模块(SDI)其是一种用于替换Concat操作的模块,SDI模块的主要思想是通过整合编码器生成的层级特征图来增强图像中的语义信息和细节信息。包括皮肤…

黑豹程序员-ElementPlus选择图标器

ElementPlus组件提供了很多图标svg 如何在你的系统中&#xff0c;用户可以使用呢&#xff1f; 这就是图标器&#xff0c;去调用ElementPlus的icon组件库&#xff0c;展示到页面&#xff0c;用户选择&#xff0c;返回选择的组件名称。 效果 代码 <template><el-inpu…

机器学习 - 梯度下降

场景 上一章学习了代价函数&#xff0c;在机器学习中&#xff0c;代价模型是用于衡量模型预测值与真实值之间的差异的函数。它是优化算法的核心&#xff0c;目标是通过调整模型的参数来最小化代价模型的值&#xff0c;从而使模型的预测结果更接近真实值。常见的代价模型是均方…

【Boost】:searcher的建立(四)

searcher的建立 一.初始化二.搜索功能三.完整源代码 sercher主要分为两部分&#xff1a;初始化和查找。 一.初始化 初始化分为两步&#xff1a;1.创建Index对象&#xff1b;2.建立索引 二.搜索功能 搜索分为四个步骤 分词&#xff1b;触发&#xff1a;根据分词找到对应的文档…

架构设计特训

一、考点分布 软件架构风格&#xff08;※※※※&#xff09;层次型软件架构风格&#xff08;※※※※&#xff09;面向服务的软件架构风格&#xff08;※※※※&#xff09;云原生架构风格&#xff08;※※※※&#xff09;质量属性与架构评估&#xff08;※※※※※&#xff…

Transformer实战-系列教程1:Transformer算法解读1

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 Transformer实战-系列教程1&#xff1a;Transformer算法解读1 Transformer实战-系列教程2&#xff1a;Transformer算法解读2 现在最火的AI内容&#xff0c;chatGPT、视觉大模…

Golang切片与数组

在Go语言中&#xff0c;切片&#xff08;Slice&#xff09;和数组&#xff08;Array&#xff09;是两个核心的数据结构&#xff0c;它们在内存管理、灵活性以及性能方面有着显著的区别。接下来将解析Golang中的切片与数组&#xff0c;通过清晰的概念解释、案例代码和实际应用场…

小林Coding_操作系统_读书笔记

一、硬件结构 1. CPU是如何执行的 冯诺依曼模型&#xff1a;中央处理器&#xff08;CPU&#xff09;、内存、输入设备、输出设备、总线 CPU中&#xff1a;寄存器&#xff08;程序计数器、通用暂存器、指令暂存器&#xff09;&#xff0c;控制单元&#xff08;控制CPU工作&am…

[word] word页面视图放大后,影响打印吗? #笔记#学习方法

word页面视图放大后&#xff0c;影响打印吗&#xff1f; word文档的页面视图又叫普通视图&#xff0c;又叫打印视图&#xff0c;是系统默认的视图&#xff0c;是用户用的最多最常见的视图。 问&#xff1a;怎样打开页面视图&#xff1f; 答&#xff1a;两种方法 方法一、点…