RHCE——SELinux

news2024/11/28 11:35:43

SELinux

什么是SELinux呢?其实它是【Security-Enhanced Linux】的英文缩写,字母上的意思就是安全强化Linux的意思。

SELinux是由美国国家安全局(NSA)开发的,当初开发的原因是很多企业发现,系统出现问题的原因大部分都在于【内部员工的资源误用】,实际由外部发动的攻击反而没有那么严重。那么什么是【员工资源误用】呢?举例来说,如果有个不是很懂系统的系统管理员为了自己设置的方便,将网页所在目录【/var/www/html/】的权限设置为【drwxrwxrwx】。

那么如果【/var/www/html】设置为777,代表所有进程均可对该目录读写,万一你真的启动了WWW服务器软件,那么该软件所触发的进程将可以写入该目录,而该进程却是对整个Internet提供服务的。只要有心人接触到这个进程,而且该进程刚好又提供了用户进行写入的功能,那么外部的人很可能就会想你的系统写入些莫名其妙的东西。

为了管理这方面的权限与进程的问题,美国国家安全局开始着手处理操作系统这方面的管理。由于Linux是自由软件,程序代码都是公开的,因此它们便使用Linux来作为研究的目标,最后更将研究结果整合到Linux内核中,那就是SELinux。所以说,SELinux是整合到内核的一个模块。

主体(Subject) 

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

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

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

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

 目标(object)

系统中的资源,包括文件、目录、网络、设备等。在SELinux中,每个对象都有自己的安全上下文,其中包含了对象的类型信息、安全级别等。 

策略(policy) 

Linux 系统中进程与文件的数量庞大,所以限制进程是否可以访问文件的 SELinux 规则数量就更加烦琐,如果每个规则都需要管理员手工设定,那么 SELinux 的可用性就会极低,所以SELinux 默认定义了两个策略来制订规则
selinux的2个默认策略
-targeted:默认策略,用于限制网络服务(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd),对本机系统的限制极少
-mls:多级安全保护策略,该策略限制更为严格

安全上下文

安全上下文是 SELinux 的核心。安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。一个「进程安全上下文」一般对应多个「文件安全上下文」。只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。

文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。

 查询安全上下文
ls  -Z  文件/目录

ps auxZ | grep -v grep | grep nginx

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

root:安全上下文的身份是root(用户编号为0),默认会映射为unconfined_u,可以通过以下命令查看映射关系:

[root@server ~]# semanage login -l

system_u:系统用户身份(用户id1-999),其中u代表user

普通用户名_u:普通用户身份(用户id1000-65535),用户数据的user字段是user_u

注意:user字段只用于标识数据或进程被哪个身份所拥有,比如系统数据的user字段是system_u
角色(role):表示此数据是进程还是文件或目录包含(了解就行)

object_r:代表该数据是文件或目录,r代表 role(角色的意思)
system_r:进程,r代表 role
类型(type):

最重要,进程是否可以访问文件,主要就是看进程的安全上下文类型字段是否和文件的安全上下文类型字段相匹配
在默认的targeted策略中
类型字段在主体(进程)的安全上下文中被称作域(domain)
类型字段在目标(文件或目录)的安全上下文中被称作类型(type)
进程的域与文件的类型是否匹配需要查询策略规则
灵敏度:用 s0、s1、s2 来命名,数字为灵敏度分级,数值越大,灵敏度越高,管的越多

SELinux的三种工作模式 

enforcing模式
enforcing模式是SELinux的默认工作模式,也是最常用的工作模式。在enforcing模式下,SELinux会强制执行安全策略,阻止未经授权的访问。如果进程试图访问未授权的资源,SELinux会禁止该进程的访问,并且在系统日志中记录相关信息

permissive模式
permissive模式是SELinux的一种辅助模式,它不会阻止任何访问,但会记录下未经授权的访问行为。在permissive模式下,SELinux只是记录违规行为,而不会强制执行安全策略。这种模式通常用于测试和调试,以便管理员了解哪些访问是被禁止的

disabled模式
disabled模式是指完全禁用SELinux。在disabled模式下,SELinux不会执行任何安全策略,所有访问都会被允许。这种模式通常用于解决一些特殊的问题,但不建议在生产环境中使用

[root@server ~]# setenforce 1    #临时开启
[root@server ~]# getenforce
Enforcing

[root@server ~]# setenforce 0  #临时关闭进入宽容模式
[root@server ~]# getenforce
Permissive

永久性开启selinux
[root@server ~]# vim  /etc/selinux/config 
SELINUX=enforcing 或 enabled
永久性关闭selinux
[root@server ~]# vim  /etc/selinux/config 
SELINUX=disabled    

selinux配置文件 
[root@server ~]# vim  /etc/selinux/config 
SELINUX=enforcing         # 设置模式
SELINUXTYPE=targeted      # 设置策略类型
修改安全上下文

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

[root@server ~]# chcon -R --reference=范例文件 文件名

[root@server ~]# touch test
[root@server ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  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  /root/test
正在更改 '/root/test' 的安全上下文
[root@server ~]# ls -Z /root/test
unconfined_u:object_r:net_conf_t:s0 /root/test

[root@server ~]# touch temp
[root@server ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  temp  test
[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
# 恢复快照
# 开启selinux
# 查看状态
[root@server ~]# getenforce
Enforcing
[root@server ~]# yum  install  httpd  -y
[root@server ~]# mkdir  /web1

# 使用mobaxterm将zy网页文件上传

[root@server ~]# systemctl start httpd
[root@server ~]# vim  /etc/httpd/conf/httpd.conf 
DocumentRoot "/web1"
<Directory "/web1">

[root@server ~]# systemctl restart httpd
# 测试:Windows中浏览器中输入server主机的IP地址,只会看到apache的欢迎页,说明selinux对/web1的安全上下文检测未通过

[root@server ~]# ls  -Zd  /var/www/html  # 查看默认网页目录的安全上下文
system_u:object_r:httpd_sys_content_t:s0 /var/www/html

[root@server ~]# ls  -Zd  /web1
unconfined_u:object_r:default_t:s0 /web1

# 将/web1的类型修改为默认网页目录的类型
[root@server ~]# chcon  -Rv  -t  httpd_sys_content_t  /web1

[root@server ~]# ls -Zd /web1
unconfined_u:object_r:httpd_sys_content_t:s0 /web1

[root@server ~]# systemctl restart httpd
# 测试:此时输入IP地址则可以浏览

[root@server ~]# restorecon [-Rv] 文件或目录

-R:连同子目录一起修改;

-v:将过程显示到屏幕上

[root@server ~]# ls -Zd /web1
unconfined_u:object_r:httpd_sys_content_t:s0 /web1

[root@server ~]# restorecon -Rv /web1

[root@server ~]# ls -Zd /web1
unconfined_u:object_r:default_t:s0 /web1

semanage命令(管理SELinux策略)

semanage 命令用于管理SELinux策略。SELinux(Security-Enhanced Linux)是一个Linux内核安全模块,提供了强大的安全策略,可以限制进程的权限,以防止恶意软件的传播

以下是一些常用的 semanage 命令:

semanage login -l:列出所有的登录名
semanage login -a -s user_u:为用户添加一个新的登录名
semanage login -d -s user_u:删除用户的登录名
semanage user -l:列出所有的用户
semanage user -a -r s0-s0:c0.c1023:为用户添加一个新的角色
semanage user -d -r s0-s0:c0.c1023:删除用户的角色
semanage port -l:列出所有的端口
semanage port -a -t http_port_t -p tcp 8080:为端口添加一个新的类型
semanage port -d -t http_port_t -p tcp 8080:删除端口的类型

[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 ssh
ssh_port_t                     tcp      22
getsebool命令(获取SELinux布尔值的当前状态)
getsebool -a
#-a 选项用于显示所有的SELinux布尔值的当前状态

getsebool -a | grep httpd
#查询与 httpd 有关的布尔型规则

getsebool httpd_can_network_connect
#获取 httpd_can_network_connect 布尔值的当前状态
setsebool命令(设置SELinux布尔值的状态)
setsebool -P httpd_can_network_connect 1
#启用 httpd_can_network_connect 布尔值

使用端口selinux的设定 

#先把/web1的安全上下文类型修改为httpd_sys_content_t
[root@server ~]# ls -Zd /web1
unconfined_u:object_r:default_t:s0 /web1

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

[root@server ~]# chcon -R -t httpd_sys_content_t /web1

[root@server ~]# ls -Zd /web1
unconfined_u:object_r:httpd_sys_content_t:s0 /web1
[root@server ~]# vim  /etc/httpd/conf/httpd.conf 
Listen 7777   # 修改80端口为7777

[root@server ~]# systemctl restart httpd  # 报错
Job for httpd.service failed because the control process exited with error code.
See "systemctl status httpd.service" and "journalctl -xeu httpd.service" for details.

[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  # 7777端口未在放行列表中
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
[root@server ~]# systemctl status httpd.service  # 查看日志
[root@server ~]# semanage port -a -t http_port_t -p tcp 7777     # 添加新端口
[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      7777, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
[root@server ~]# systemctl restart httpd  # 重启服务成功
[root@server ~]#
# 测试:192.168.48.130:7777

 设置selinux端口策略

[root@server ~]# semanage  port  -l  |  grep  ssh
ssh_port_t                     tcp      22

[root@server ~]# vim /etc/ssh/sshd_config
Port 2222      # 去掉#,修改端口号

[root@server ~]# systemctl restart  sshd  # 重启失败

[root@server ~]# semanage port -a -t ssh_port_t  -p  tcp  2222 # 添加新端口

[root@server ~]# semanage  port  -l  |  grep  ssh
ssh_port_t                     tcp      2222, 22

[root@server ~]# systemctl restart  sshd  # 重启成功


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

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

相关文章

Vue3的通灵之术Teleport

前言 近期Vue3更新了一些新的内容&#xff0c;我都还没有一个一个仔细去看&#xff0c;但是还是有必要去解读一下新内容的。就先从Teleport 开始吧。 官方对 Teleport 的解释是&#xff1a;<Teleport> 是一个内置组件&#xff0c;它可以将一个组件内部的一部分模板“传…

介绍一下atof(arr);(c基础)

hi , I am 36 适合对象c语言初学者 atof(arr)&#xff1b;是返回浮点数(double型)&#xff0c;浮点数数是arr数组中字符中数字 格式 #include<stdio.h> atof(arr); 返回值arr数组中的数 未改变arr数组 #include<stdio.h> //atof(arr) 返 <stdlib> int…

STM32 USART配置库函数

单片机学习&#xff01; 目录 一、USART配置函数 1.1 USART_DeInit函数 1.2 USART_Init函数 1.3 USART_StructInit函数 二、配置同步时钟输出函数 2.1 USART_ClockInit函数 2.2 USART_ClockStructInit函数 三、USART的外设与中断函数 3.1 USART_Cmd函数 3.2 USART_IT…

通俗理解人工智能、机器学习和深度学习的关系

最近几年人工智能成为极其热门的概念和话题&#xff0c;可以说彻底出圈了。但人工智能的概念在1955年就提出来了&#xff0c;可以说非常古老。我在上小学的时候《科学》课本上就有人工智能的概念介绍&#xff0c;至今还有印象&#xff0c;但那些年AI正处于“寒冬”&#xff0c;…

2024数学建模亚太赛【C题】赛题详细解析

目录 &#x1f4d1;一、竞赛时间 &#x1f5dd;️二、奖项设置 ✏️三、选题思路 &#x1f50d;阶段一&#xff1a;【数据预处理与探索性分析】 1.【数据清洗与预处理】 2.【探索性数据分析&#xff08;EDA&#xff09;】 &#x1f50d;阶段二&#xff1a;【时间序列建模…

数据结构 【堆实现】

上文提到堆是一种特殊的二叉树&#xff0c;其中它的父结点均不大于或者不小于其子结点的值。堆总是一棵完全二叉树。其中&#xff0c;堆的父节点全部不小于它的子结点时称为大堆&#xff0c;堆的父结点全部不大于其子结点的堆称为小堆。 堆可以由两种结构来实现&#xff0c;分别…

【AI绘画】Midjourney进阶:色调详解(下)

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;Midjourney中的色彩控制为什么要控制色彩&#xff1f;为什么要在Midjourney中控制色彩&#xff1f; &#x1f4af;色调纯色调灰色调暗色调 &#x1f4af…

[代码随想录Day24打卡] 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 一个合法的IP地址是什么样的&#xff1a; 有3个’.分割得到4个数&#xff0c;每个数第一个数不能是0&#xff0c;不能含有非法字符&#xff0c;不能大于255。 这个是否属于合法IP相当于一个分割问题&#xff0c;把一串字符串分割成4部分&#xff0c;分别判断每…

“harmony”整合不同平台的单细胞数据之旅

其实在Seurat v3官方网站的Vignettes中就曾见过该算法&#xff0c;但并没有太多关注&#xff0c;直到看了北大张泽民团队在2019年10月31日发表于Cell的《Landscap and Dynamics of Single Immune Cells in Hepatocellular Carcinoma》&#xff0c;为了同时整合两类数据&#xf…

贴代码PasteForm框架之框架核心帮助类PasteFormHelper说明

简介 PasteForm是贴代码推出的 “新一代CRUD” &#xff0c;基于ABPvNext&#xff0c;目的是通过对Dto的特性的标注&#xff0c;从而实现管理端的统一UI&#xff0c;借助于配套的PasteBuilder代码生成器&#xff0c;你可以快速的为自己的项目构建后台管理端&#xff01;目前管…

杂7杂8学一点之ZC序列

重要的放在前面&#xff0c;优秀文章链接&#xff1a;5GNR漫谈13&#xff1a;Zadoff –Chu&#xff08;ZC&#xff09;序列性质 目录 1. ZC序列 1.1 ZC序列的表达式 1.2 ZC序列的特点 2. PRACH中的ZC序列 2.1 为什么要有逻辑根序列与物理根序列的概念 1. ZC序列 ZC序列&…

matlab代码--卷积神经网络的手写数字识别

1.cnn介绍 卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种深度学习的算法&#xff0c;在图像和视频识别、图像分类、自然语言处理等领域有着广泛的应用。CNN的基本结构包括输入层、卷积层、池化层&#xff08;Pooling Layer&#xff09;、全连…

【Linux】—简单实现一个shell(myshell)

大家好呀&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流哦&#xff01; 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&…

基于 Flask 和 RabbitMQ 构建高效消息队列系统:从数据生成到消费

简介 在构建 Web 应用时&#xff0c;处理和传输大量数据是不可避免的。对于需要高效、可扩展的消息处理和异步任务执行的场景&#xff0c;使用 RabbitMQ&#xff08;一种流行的消息队列中间件&#xff09;与 Flask&#xff08;一个轻量级的 Python Web 框架&#xff09;结合&a…

Linux:文件管理(一)——文件描述符fd

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说&#xff0c;如果在电脑上新建了一个空白文档&#xff0…

机器学习模型——线性回归

文章目录 前言1.基础概念2.代价函数3.单变量线性回归3.1加载数据3.2初始化超参数3.3梯度下降算法3.3.1初次梯度下降3.3.2 多次梯度下降3.3.3结果可视化 前言 随着互联网数据不断累积&#xff0c;硬件不断升级迭代&#xff0c;在这个信息爆炸的时代&#xff0c;机器学习已被应用…

如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南

动态链接库&#xff08;DLL&#xff09;文件是Windows操作系统中非常重要的一部分&#xff0c;它们包含了程序运行所需的代码和数据。当系统提示DLL文件丢失时&#xff0c;可能会导致应用程序无法正常运行。以下是一些安全高效地打开和管理DLL文件以及修复DLL丢失问题的方法&am…

数据结构(初阶7)---七大排序法(堆排序,快速排序,归并排序,希尔排序,冒泡排序,选择排序,插入排序)(详解)

排序 1.插入排序2.希尔排序3.冒泡排序4.选择排序(双头排序优化版)5.堆排序6.快速排序1). 双指针法2).前后指针法3).非递归法 7.归并排序1).递归版本(递归的回退就是归并)2).非递归版本(迭代版本) 计算机执行的最多的操作之一就有排序&#xff0c;排序是一项极其重要的技能 接下…

【JavaEE初阶 — 网络原理】初识网络原理

目录 1. 网络发展史 1.1 独立模式 1.2 网络互连 1.2.1 网络互联的背景 1.2.2 网络互联的定义 1.3 局域网LAN 1.4 广域网WAN 2. 网络通信基础 2.1 IP地址 2.2 端口号 2.3 认识协议 2.4 五元组 2.5 协议分层 2.5.1 分…

【C++习题】15.滑动窗口_串联所有单词的子串

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 30. 串联所有单词的子串 题目描述&#xff1a; 解法 滑动窗口哈希表 这题和第14题不同的是&#xff1a; 哈希表不同&#xff1a;hash<string,int>left与right指…