RHCE——SELinux

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.mzph.cn/news/887606.shtml

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

相关文章

如何分析Windows防火墙日志

Windows防火墙&#xff0c;也被称为Windows Defender Firewall&#xff0c;是一种内置的安全功能&#xff0c;可以主动监控和分析运行Windows操作系统的计算机上通过Windows防火墙的网络流量&#xff0c;主要目的是作为计算机和互联网或其他网络之间的屏障&#xff0c;使管理员…

Python - 函数(四)

函数&#xff1a;在编写程序的过程中&#xff0c;有某一功能代码块出现多次&#xff0c; 但是为了提高编写的效率以及代码的重用&#xff0c;所以把具有独立功能的代码块组织为一个小模块&#xff0c;这就是函数 ‌Python中的函数‌是一组被命名的可执行代码&#xff0c;用于完…

2024-11-27 学习人工智能的Day32 神经网络与反向传播

一、神经网络 神经网络神经网络&#xff08;Neural Networks&#xff09;是一种模拟人脑神经元网络结构的计算模型&#xff0c;用于处理复杂的模式识别、分类和预测等任务。 人工神经元是神经网络的基础构建单元&#xff0c;模仿了神武神经元的工作原理&#xff0c;核心功能是…

代码随想录打卡DAY21

算法记录第21天 [二叉树] 1.LeetCode 538. 把二叉搜索树转换为累加树 题目描述&#xff1a; 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原…

[在线实验]-ActiveMQ Docker镜像的下载与部署

镜像下载 下载ActiveMQ的Docker镜像文件。通常&#xff0c;这些文件会以.tar格式提供&#xff0c;例如activemq.tar。 docker的activemq镜像资源-CSDN文库 加载镜像 下载完成后&#xff0c;您可以使用以下命令将镜像文件加载到Docker中&#xff1a; docker load --input a…

k8s 架构详解

Kubernetes&#xff08;通常简称为K8s&#xff09;是一个开源的容器编排平台&#xff0c;它帮助自动化部署、扩展和管理容器化应用程序。Kubernetes架构设计得非常灵活且可扩展&#xff0c;能够支持从小规模到大规模的各种应用部署需求。下面是对Kubernetes架构的详细解释&…

并发编程2.0

9.创建线程有哪几种方式&#xff1f; 继承Thread类&#xff0c;通过重写run方法来定义线程的执行逻辑 class MyThread extends Thread {Overridepublic void run() {System.out.println("线程执行的代码");} } public class Main {public static void main(String[…

一个比较舒服的 prettier 前端配置 vue js

1. 安装 prettier 库 npm i -D prettier2. 配置 package.json "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,vue,scss,css}\""3. 根目录下放这两个文件 .prettierrc {"semi": true,"singleQuote": true,&quo…

VTK中对于相机camera的设置

1. 相机的核心属性 在 VTK 中&#xff0c;vtkCamera 的核心属性有默认值。如果你不设置这些属性&#xff0c;相机会使用默认值来渲染场景。 Position&#xff08;默认值&#xff1a;(0, 0, 1)&#xff09;&#xff1a; 默认情况下&#xff0c;相机位于 Z 轴正方向的 (0, 0, 1)…

学习日志017--python的几种排序算法

冒泡排序 def bubble_sort(alist):i 0while i<len(alist):j0while j<len(alist)-1:if alist[j]>alist[j1]:alist[j],alist[j1] alist[j1],alist[j]j1i1l [2,4,6,8,0,1,3,5,7,9] bubble_sort(l) print(l) 选择排序 def select_sort(alist):i 0while i<len(al…

活着就好20241128

早晨问候&#xff1a; 亲爱的朋友们&#xff0c;大家早上好&#xff01;今天是2024年11月28日&#xff0c;第48周的第四天&#xff0c;也是十一月的第二十八天&#xff0c;农历甲辰[龙]年十月廿四。在这个即将步入月末、阳光依旧明媚的清晨&#xff0c;愿第一缕阳光轻轻洒落在…

超高流量多级缓存架构设计!

文章内容已经收录在《面试进阶之路》&#xff0c;从原理出发&#xff0c;直击面试难点&#xff0c;实现更高维度的降维打击&#xff01; 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…

3D Gaussian Splatting综述 论文笔记

文章目录 参考资料 参考资料 A Survey on 3D Gaussian Splatting精读 3DGaussianSplatting技术的影响会有多大&#xff1f; - Kedreamix的回答 - 知乎 https://www.zhihu.com/question/626506306/answer/3375816824 3DGS综述《A Survey on 3D Gaussian Splatting》 【论文笔记…

@Pattern (用于校验字符串是否符合特定正则表达式)

Pattern 是一个用于校验字符串是否符合特定正则表达式的注解&#xff0c;它在 Java 中常用于验证输入数据的格式。以下是 Pattern 注解的详解和使用方法&#xff1a; 含义 Pattern 注解用于在 Java 中对字段进行注解&#xff0c;以确保其值与指定的正则表达式匹配。这个注解可…

mac 如何查看 export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node 是否正确

在 macOS 上&#xff0c;如果你想查看环境变量 NVM_NODEJS_ORG_MIRROR 是否已正确设置为 https://npm.taobao.org/mirrors/node&#xff0c;你可以按照以下步骤进行检查&#xff1a; 1. 检查当前环境变量值 打开终端并运行以下命令来查看 NVM_NODEJS_ORG_MIRROR 环境变量的当…

探索人工智能:从Python到深度学习的进阶之旅

在当今这个数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为科技领域的热门话题。对于有志于进入这一领域的学习者来说&#xff0c;制定一个系统的学习计划至关重要。本文将为您规划一条从Python编程基础出发&#xff0c;逐步深入到人工智能核心领域的学…

红黑树的概念以及基本模拟

目录 一、概念和规则&#xff1a; 1、思考为什么最长路径不超过最短路径的二倍&#xff1f; 2、红黑树的效率&#xff1f; 二、红黑树的代码实现 1、红黑树的节点结构 2、红黑树的插入 1、大致过程&#xff1a; 2、维护的三种情况&#xff1a; 1、情况一&#xff1a;变…

IP反向追踪技术,了解一下?

DOSS&#xff08;拒绝服务&#xff09;攻击是现在比较常见的网络攻击手段。想象一下&#xff0c;有某个恶意分子想要搞垮某个网站&#xff0c;他就会使用DOSS攻击。这种攻击常常使用的方式是IP欺骗。他会伪装成正常的IP地址&#xff0c;让网络服务器以为有很多平常的请求&#…

二十五:如何“合法”地跨域访问?

跨域访问&#xff08;Cross-Origin Resource Sharing&#xff0c;简称CORS&#xff09;是现代Web开发中常见的一种技术需求。由于浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;不同域名、协议或端口之间的资源无法直接交互&#xff0c;这对前端开发…

计算机网络的功能

目录 信息交换 资源共享 分布式处理 可靠性增强 集中管理 信息交换 计算机网络最基本的功能之一是允许不同设备之间的数据通信。这包括电子邮件的发送和接收、即时消息的传递、文件传输等。通过网络&#xff0c;用户可以轻松地与全球各地的其他人进行沟通和协作。 信息交…