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

Linux之SELinux与防火墙

一、SELinux的说明

  1. 开发背景与目的
    • SELinux由美国国家安全局(NSA)开发,旨在避免资源的误用。传统的Linux基于自主访问控制(DAC),通过判断进程所有者/用户组与文件权限来控制访问,对root用户权限限制较少。而NSA为更好地控制权限与进程问题,以Linux为研究目标,将成果整合进Linux内核形成SELinux。
  2. 核心概念
    • 自主访问控制(DAC):根据进程所有者/用户组对比文件权限来决定是否可访问文件,root用户不受各种权限设置限制。
    • 强制访问控制(MAC):以策略规则制定特定程序读取特定文件的权限控制方式,即使是root用户,使用不同进程时获取的权限依进程设置而定,且进程不能任意使用系统文件资源,SELinux提供默认策略及规则供选择启用。

二、SELinux的工作原理

  1. 主体、目标与策略
    • 主体(subject):即进程。
    • 目标(object):被主体访问的资源,如文件、目录、端口等。
    • 策略(policy):依据某些服务制定基本访问安全策略,包含详细规则指定不同服务对资源的访问与否。主要策略有targeted(默认,对网络服务限制多、本机限制少)和strict(限制严格)。
#查看文件的安全上下文
[root@localhost ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 home

安全上下文用冒号分为四个字段:
Identify:role:type:
身份标识(Identify):相当于账号方面的身份标识,主要有以下三种常见的类型:
root:表示root的账号身份;
system_u:表示程序方面的标识,通常就是进程;
unconfined_u:代表的是一般用户账号相关的身份。
角色(role):通过角色字段,可知道这个数据是属于程序、文件资源还是代表用户。一般角色
有:
object_r:代表的是文件或目录等文件资源;
system_r:代表的是进程。
类型(type):在默认的targeted策略中,Identify与role字段基本上是不重要的,重要的在于这
个类型字段。而类型字段在文件与进程的定义不太相同,分别是:
type:在文件资源上面称为类型。
domain:在主体程序中则称为域。
domain需要与type搭配,则该程序才能够顺利读取文件资源。
最后一个字段是和MLS和MCS相关的东西,代表灵敏度,一般用s0、s1、s2来命名,数字代表灵敏
度的分级。数值越大、灵敏度越高。

三、SELinux的启动、关闭与查看

  1. 三种模式
    • enforcing(强制模式):SELinux正在运行,开始限制domain/type。
    • permissive(宽容模式):SELinux正在运行,但仅发出警告信息,不实际限制domain/type访问。
    • disabled(关闭):SELinux未实际运行。
  2. 查看与切换模式
    • 通过getenforce查看当前模式,sestatus查看SELinux状态、使用策略等信息。
    • 可通过setenforce 0切换到permissive模式,setenforce 1切换到enforcing模式,改变策略后需重新启动系统,在enforcing、permissive、disabled之间切换某些情况也需重新启动。
#查看目前的模式
[root@localhost ~]# getenforce
Enforcing
#查看目前的selinux使用的策略
[root@server /]# sestatus
SELinux status:                 enabled  # 是否启用selinux
SELinuxfs mount:                /sys/fs/selinux #selinux的相关文件数据挂载点
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted #目前的策略
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33#查看selinux的策略:
[root@server ~]# vim /etc/selinux/config
改变策略之后需要重新启动;
如果由enforcing或permissive改成disabled,或由disabled改为其它两个,也必须要重新启动。
将selinux模式在enforcing和permissive之间切换的方法为:
setenforce 0 转换成permissive宽容模式
setenforce 1转换成enforcing强制模式
restorecon [-Rv] 文件或目录
-R:连同子目录一起修改;
-v:将过程显示到屏幕上
restorecon怎么会知道每个目录记载的默认selinux type类型呢?因为系统将每个目录的默认selinux type类型记录在/etc/selinux/targeted/contexts/目录内。但是该目录内有很多不同的数据,所以我们可以用semanage这个命令的功能来查询与修改。
semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec
-l为查询;
-a:增加一些目录的默认安全上下文的设置;
-m:修改;
-d:删除。
  1. 修改安全上下文
chcon [-R] [-t type] [-u user] [-r role] 文件
-R:连同该目录下的子目录也同时修改;
-t:后面接安全上下文的类型字段;
-u:后面接身份识别;
-r:后面接角色
chcon [-R] --reference=范例文件 文件 将文件的安全上下文按照范例文件修改
restorecon [-Rv] 文件或目录
-R:连同子目录一起修改;
-v:将过程显示到屏幕上
restorecon怎么会知道每个目录记载的默认selinux type类型呢?因为系统将每个目录的默认
selinux type类型记录在/etc/selinux/targeted/contexts/目录内。但是该目录内有很多不同
的数据,所以我们可以用semanage这个命令的功能来查询与修改。
semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec
-l为查询;
-a:增加一些目录的默认安全上下文的设置;
-m:修改;
-d:删除。

四、SELinux对Linux服务的影响

  1. 实验一:httpd服务演示安全上下文值设定
    • 服务端设置好httpd服务相关配置后,通过客户端测试只能访问到http服务测试界面,修改自定义目录/www的安全上下文值为httpd_sys_content_t(可通过chcon -t httpd_sys_content_t /www -R或按/var/www/html文件修改)后可成功访问。
[root@server ~]# systemctl disable firewalld --now
[root@server ~]# getenforce
Enforcing
[root@server ~]# cat /etc/nginx/conf.d/test_ip.conf
server {listen 192.168.121.100:80;root /www/ip/100;location / {}
}
server {listen 192.168.121.200:80;root /www/ip/200;location / {}
}
[root@server ~]# systemctl restart nginx.service
[root@server ~]# curl 192.168.121.100
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.26.1</center>
</body>
</html>
然后我们进行安全上下文的修改:
方法1:直接修改自定义目录的安全上下文:
[root@server ~]# chcon -t httpd_sys_content_t /www/ -R方法2:将自定义目录的安全上下文的值按照按照指定文件进行修改:
[root@server ~]# chcon -R --reference=/usr/share/nginx/html/index.html /www[root@server ~]# curl 192.168.121.100
this is 100
  1. 实验二:web服务端口改变演示端口设定
[root@server ~]# vim /etc/nginx/conf.d/test_port.conf
server {listen 192.168.121.153:80;root /www/port/80;location / {}
}
server {listen 192.168.121.153:10000;root /www/port/10000;location / {}
}
#重启nginx服务出现错误,查看其状态日志信息,拒绝访问10000端口
[root@server ~]# systemctl restart nginx.service
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 策略中添加一条规则,将 http_port_t 类型分配给 TCP 端口 10000:
[root@server ~]# semanage port -a -t http_port_t -p tcp 10000
[root@server ~]# systemctl restart nginx.service

一、防火墙概述

  1. 定义与分类
    • 防火墙是位于内部网和外部网之间的屏障,按预定义规则控制数据包进出。可分为硬件防火墙(由厂商设计的主机硬件,以数据包过滤机制为主)和软件防火墙(如Netfilter、TCP Wrappers等,这里主要介绍Linux系统的Netfilter)。
    • Netfilter是Linux内核内建的数据包过滤机制,能分析数据包头部数据(涉及OSI七层协议的2、3、4层),可进行多种过滤操作,如拒绝特定端口、来源IP、带有特殊标志的数据包等,但不能有效阻挡病毒或木马程序,对内部LAN攻击也较难防范。

二、iptables

  1. 介绍
    • iptables服务把处理或过滤流量的策略条目称为规则,多条规则组成规则链,依据数据包处理位置分类,包括
      目标地址转换(PREROUTING);
      处理流入的数据包(INPUT);
      处理流出的数据包(OUTPUT);
      处理转发的数据包(FORWARD);
      在进行路由选择后处理数据包,用于源地址转换(POSTROUTING)。
    • 防火墙按从上至下顺序读取策略规则,找到匹配项即执行相应行为,若无匹配项则执行默认策略。其命令格式及各参数有明确含义,可根据流量的多种信息进行匹配并处理。
  2. 实验与案例
    准备工作
#安装iptables相关的包,由于我们这里是9.X版本,应该安装iptables-nft-services:
[root@server ~]# yum install iptables-nft-services -y#关闭firewalld ,开启iptables,并且查看其状态是不是active:
[root@server ~]# systemctl stop firewalld
[root@server ~]# systemctl start iptables
[root@server ~]# systemctl status iptables.service#清除所有的规则表:
[root@server ~]# iptables -F#展示所有的规则策略:
[root@server ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destinationChain FORWARD (policy ACCEPT)
target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
target     prot opt source               destination
[root@server ~]#

实验一:搭建web服务,设置任何人能够通过80端口访问。

#向 INPUT 链中插入一条规则,允许所有进入系统的 TCP 数据包,并且目标端口是 80:
[root@server ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT #列出当前 iptables 的所有规则,并显示每条规则的行号
[root@server ~]# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:httpChain FORWARD (policy ACCEPT)
num  target     prot opt source               destinationChain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination#从 INPUT 链中删除第 1 条规则:
[root@server ~]# iptables -D INPUT 1

实验二:禁止所有人ssh远程登录该服务器

#禁止所有人ssh远程登录该服务器(拒绝访问22端口):
[root@server ~]# iptables -I INPUT -p tcp --dport 22 -j REJECT#从IPINPUT链中删除第一条规则:(这条命令只能在虚拟机中执行,因为前一条命令已经拒绝ssh远程登录):
[root@server ~]# iptables -D INPUT 1

实验三:禁止192.168。121.11主机地址ssh远程登录该服务器,允许该主机访问服务器的web服务。服务器地址为
192.168.121.10

#拒绝192.168.121.11通过ssh远程连接服务器:
[root@server ~]# iptables -I INPUT -p tcp -s 192.168.121.11 --dport 22 -j REJECT#允许192.168.121.11访问服务器的web服务:
[root@server ~]# iptables -I INPUT -p tcp -s 192.168.121.11 --dport 80 -j ACCEPT

在这里插入图片描述

三、firewalld

  1. 介绍
    • 与iptables不同,iptables修改规则需重新完整加载所有规则,可能对运行系统产生不良影响,而firewalld是动态防火墙,规则变更只需保存更新即可,支持IPv4和IPv6设置,还引入了区域概念,即几套防火墙策略集合(策略模板),用户可快速切换。
[root@server ~]# systemctl stop iptables.service
[root@server ~]# systemctl start firewalld.service
[root@server ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)Active: active (running) since Sun 2024-11-24 17:06:08 CST; 8s ago#查看帮助:
[root@server ~]# firewall-cmd --help#查看所有规则:
[root@server ~]# firewall-cmd --list-all

相关文章:

Linux之SELinux与防火墙

一、SELinux的说明 开发背景与目的&#xff1a; SELinux由美国国家安全局&#xff08;NSA&#xff09;开发&#xff0c;旨在避免资源的误用。传统的Linux基于自主访问控制&#xff08;DAC&#xff09;&#xff0c;通过判断进程所有者/用户组与文件权限来控制访问&#xff0c;对…...

深度学习使用LSTM实现时间序列预测

大家好&#xff0c;LSTM是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构&#xff0c;它被设计用来解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题&#xff0c;特别是在时间序列预测、自然语言处理和语音识别等领域中表现出色。LSTM的核心在于其独特的门控机…...

Vue第一篇:组件模板总结

前言 本文希望读者有一定的Vue开发经验&#xff0c;样例采用vue中的单文件组件&#xff0c;也是我的个人笔记&#xff0c;欢迎一起进步 必须有根元素 这是一个最简单的vue单文件组件&#xff0c;<template></template>被称为模板&#xff0c;模板中必须有一个根元素…...

时钟使能、

时钟使能 如果正确使用&#xff0c;时钟使能能够显著地降低系统功耗&#xff0c;同时对面积或性能的影响极小。但是如果不正确地使用时钟使能&#xff0c; 可能会造成下列后果&#xff1a; • 面积增大 • 密度减小 • 功耗上升 • 性能下降 在许多使用大量控制集的…...

1. Autogen官网教程 (Introduction to AutoGen)

why autogen The whole is greater than the sum of its parts.(整体的功能或价值往往超过单独部分简单相加的总和。) -Aristotle autogen 例子 1. 导入必要的库 首先&#xff0c;导入os库和autogen库中的ConversableAgent类。 import os from autogen import Conversable…...

开源账目和账单

开源竞争&#xff1a; 开源竞争&#xff08;当你无法彻底掌握技术的时候&#xff0c;你就开源这个技术&#xff0c;让更多的人了解这个技术&#xff0c;形成更多的技术依赖&#xff0c;你会说这不就是在砸罐子吗&#xff1f;一个行业里面总会有人砸罐子&#xff0c;你不如先砸…...

vue2面试题10|[2024-11-24]

问题1&#xff1a;vue设置代理 如果你的前端应用和后端API服务器没有运行在同一个主机上&#xff0c;你需要在开发环境下将API请求代理到API服务器。这个问题可以通过vue.config.js中的devServer.proxy选项来配置。 1.devServer.proxy可以是一个指向开发环境API服务器的字符串&…...

c语言与c++到底有什么区别?

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于c语言与c区别的相关内容&#xff01; 关…...

云计算-华为HCIA-学习笔记

笔者今年7月底考取了华为云计算方向的HCIE认证&#xff0c;回顾从IA到IE的学习和项目实战&#xff0c;想整合和分享自己的学习历程&#xff0c;欢迎志同道合的朋友们一起讨论&#xff01; 第二章&#xff1a;服务器基础 服务器是什么&#xff1f; 服务器本质上就是个性能超强的…...

优先算法 —— 双指针系列 - 复写零

目录 1. 复写零 2. 算法原理 一般情况下 改为就地操作&#xff1a;从左到右&#xff08;错误&#xff09; 从右到左 总结一下解决方法&#xff1a; 如何找到最后一个复写的数 特殊情况 完整步骤&#xff1a; 3. 代码 1. 复写零 题目链接&#xff1a;1089. 复写零 - 力…...

初识Linux—— 基本指令(下)

前言&#xff1a; 本篇继续来学习Linux的基础指令&#xff0c;继续加油&#xff01;&#xff01;&#xff01; 本篇文章对于图片即内容详解&#xff0c;已同步到本人gitee&#xff1a;Linux学习: Linux学习与知识讲解 Linux指令 1、查看文件内容的指令 cat ​ cat 查看文件…...

esayexcel进行模板下载,数据导入,验证不通过,错误信息标注在excel上进行返回下载

场景&#xff1a;普普通通模板下载&#xff0c;加数据导入&#xff0c;分全量和增量&#xff0c;预计20w数据&#xff0c;每一条数据校验&#xff0c;前后端代码贴上&#xff08;代码有删改&#xff0c;关键代码都有&#xff0c;好朋友们自己取舍&#xff0c;代码一股脑贴上了&…...

服务器数据恢复—raid5阵列热备盘上线失败导致EXT3文件系统不可用的数据恢复案例

服务器数据恢复环境&#xff1a; 两组分别由4块SAS硬盘组建的raid5阵列&#xff0c;两组阵列划分的LUN组成LVM架构&#xff0c;格式化为EXT3文件系统。 服务器故障&#xff1a; 一组raid5阵列中的一块硬盘离线。热备盘自动上线替换离线硬盘&#xff0c;但在热备盘上线同步数据…...

《Qt Creator:人工智能时代的跨平台开发利器》

《Qt Creator&#xff1a;人工智能时代的跨平台开发利器》 一、Qt Creator 简介&#xff08;一&#xff09;功能和优势&#xff08;二&#xff09;快捷键与效率提升&#xff08;三&#xff09;跨平台支持&#xff08;四&#xff09;工具介绍与使用主要特性&#xff1a;使用步骤…...

AG32既可以做MCU,也可以仅当CPLD使用

Question: AHB总线上的所有外设都需要像ADC一样&#xff0c;通过cpld处理之后才能使用? Reply: 不用。 除了ADC外&#xff0c;其他都是 mcu可以直接配置使用的。 Question: DMA和CMP也不用? Reply: DMA不用。 ADC/DAC/CMP 用。 CMP 其实配置好后&#xff0c;可以直…...

51c自动驾驶~合集31

我自己的原文哦~ https://blog.51cto.com/whaosoft/12121357 #大语言模型会成为自动驾驶的灵丹妙药吗 人工智能&#xff08;AI&#xff09;在自动驾驶&#xff08;AD&#xff09;研究中起着至关重要的作用&#xff0c;推动其向智能化和高效化发展。目前AD技术的发展主要遵循…...

2023年3月GESPC++一级真题解析

一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 题目123456789101112131415答案BAACBDDAADBCDBC 1.以下不属于计算机输入设备的有&#xff08; &#xff09;。 A &#xff0e;键盘 B &#xff0e;音箱 C &#xff0e;鼠标 D &#xff0e;传感器 【答案】 …...

linux NFS

什么是NFS NFS是Network File System的缩写&#xff0c;即网络文件系统。一种使用于分散式 文件协议通过网络让不同的机器、不同的操作系统能够分享个人数据&#xff0c;让应用 程序通过网络可以访问位于服务器磁盘中的数据。NFS在文件传送或信息传送 的过程中&#xff0c;依赖…...

查看浏览器的请求头

爬虫时用到了请求头&#xff0c;虽然可以用网上公开的&#xff0c;但是还是想了解一下本机浏览器的。以 Edge 为例&#xff0c;其余浏览器通用。 打开浏览器任一网页&#xff0c;按F12打开DevTools&#xff1b;或鼠标右键&#xff0c;选择“检查”。首次打开界面应该显示在网页…...

【JavaEE进阶】 JavaScript

本节⽬标 了解什么是JavaScript, 学习JavaScript的常⻅操作, 以及使⽤JQuery完成简单的⻚⾯元素操作. 一. 初识 JavaScript 1.JavaScript 是什么 JavaScript (简称 JS), 是⼀个脚本语⾔, 解释型或即时编译型的编程语⾔. 虽然它是作为开发Web⻚⾯的脚本语⾔⽽出名&#xff0c;…...

后端接受大写参数(亲测能用)

重要点引入包别引用错了 import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data;JsonSerialize Data public class Item {JsonProperty(value "Token")private String token…...

Unity ShaderLab --- 实现局部透明

首先准备一张局部透明度的贴图 实现局部透明原理&#xff1a; 采样准备好的贴图&#xff0c;在片元着色中&#xff0c;将返回颜色的a值乘上采样后的a值 代码&#xff1a; fixed4 frag (v2f i) : SV_Target{fixed4 col i.color;col.a * tex2D(_MainTex, i.texcoord).a;return…...

Edify 3D: Scalable High-Quality 3D Asset Generation 论文解读

目录 一、概述 二、相关工作 1、三维资产生成 2、多视图下的三维重建 3、纹理和材质生成 三、Edify 3D 1、文本生成多视角图像的扩散模型 2、文本和多视角图像生成法线图像的ControlNet 3、重建与渲染模型 4、多视角高分辨率RGB图像生成 四、训练 1、训练过程 2、…...

银河麒麟v10 x86架构二进制方式kubeadm+docker+cri-docker搭建k8s集群(证书有效期100年) —— 筑梦之路

环境说明 master&#xff1a;192.168.100.100 node: 192.168.100.101 kubeadm 1.31.2 &#xff08;自编译二进制文件&#xff0c;证书有效期100年&#xff09; 银河麒麟v10 sp2 x86架构 内核版本&#xff1a;5.4.x 编译安装 cgroup v2启用 docker版本&#xff1a;27.x …...

Python浪漫之画明亮的月亮

目录 1、效果展示 2、完整版代码 1、效果展示 2、完整版代码 import turtledef draw_moon():# 设置画布turtle.bgcolor("black") # 背景颜色为黑色turtle.speed(10) # 设置绘制速度# 绘制月亮的外圈turtle.penup()turtle.goto(0, -100) # 移动到起始…...

【前端】JavaScript 中的函数嵌套:从基础到深度应用的全面指南

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;什么是函数嵌套示例代码 &#x1f4af;函数嵌套的意义与优势1. 封装性与模块化2. 闭包的实现与应用3. 回调与高阶函数4. 工厂模式 &#x1f4af;函数嵌套的不同应用场景…...

微信小程序条件渲染与列表渲染的全面教程

微信小程序条件渲染与列表渲染的全面教程 引言 在微信小程序的开发中,条件渲染和列表渲染是构建动态用户界面的重要技术。通过条件渲染,我们可以根据不同的状态展示不同的内容,而列表渲染则使得我们能够高效地展示一组数据。本文将详细讲解这两种渲染方式的用法,结合实例…...

全面击破工程级复杂缓存难题

目录 一、走进业务中的缓存 &#xff08;一&#xff09;本地缓存 &#xff08;二&#xff09;分布式缓存 二、缓存更新模式分析 &#xff08;一&#xff09;Cache Aside Pattern&#xff08;旁路缓存模式&#xff09; 读操作流程 写操作流程 流程问题思考 问题1&#…...

python安装包中的一些问题(三):加载 matplotlib 的过程中,调用了 Pillow(PIL 库)时发生了错误

报错&#xff1a; runfile(/Volumes/Expansion/Stuttgart/code_run/glacier_map_hugonnet/test_image_cut.py, wdir/Volumes/Expansion/Stuttgart/code_run/glacier_map_hugonnet) Traceback (most recent call last): File /opt/anaconda3/lib/python3.11/site-packages/spyd…...

AWTK-WEB 快速入门(1) - C 语言应用程序

先安装 AWTK Designer 用 AWTK Designer 新建一个应用程序 2.1. 新建应用程序 这里假设应用程序的名称为 AwtkApplicationC&#xff0c;后面会用到&#xff0c;如果使用其它名称&#xff0c;后面要做相应修改。 在窗口上放置一个按钮将按钮的名称改为 “close”将按钮的文本改…...