Linux之SELinux与防火墙
一、SELinux的说明
- 开发背景与目的:
- SELinux由美国国家安全局(NSA)开发,旨在避免资源的误用。传统的Linux基于自主访问控制(DAC),通过判断进程所有者/用户组与文件权限来控制访问,对root用户权限限制较少。而NSA为更好地控制权限与进程问题,以Linux为研究目标,将成果整合进Linux内核形成SELinux。
- 核心概念:
- 自主访问控制(DAC):根据进程所有者/用户组对比文件权限来决定是否可访问文件,root用户不受各种权限设置限制。
- 强制访问控制(MAC):以策略规则制定特定程序读取特定文件的权限控制方式,即使是root用户,使用不同进程时获取的权限依进程设置而定,且进程不能任意使用系统文件资源,SELinux提供默认策略及规则供选择启用。
二、SELinux的工作原理
- 主体、目标与策略:
- 主体(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的启动、关闭与查看
- 三种模式:
- enforcing(强制模式):SELinux正在运行,开始限制domain/type。
- permissive(宽容模式):SELinux正在运行,但仅发出警告信息,不实际限制domain/type访问。
- disabled(关闭):SELinux未实际运行。
- 查看与切换模式:
- 通过
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:删除。
- 修改安全上下文:
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服务的影响
- 实验一:httpd服务演示安全上下文值设定:
- 服务端设置好httpd服务相关配置后,通过客户端测试只能访问到http服务测试界面,修改自定义目录
/www的安全上下文值为httpd_sys_content_t(可通过chcon -t httpd_sys_content_t /www -R或按/var/www/html文件修改)后可成功访问。
- 服务端设置好httpd服务相关配置后,通过客户端测试只能访问到http服务测试界面,修改自定义目录
[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
- 实验二: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
一、防火墙概述
- 定义与分类:
- 防火墙是位于内部网和外部网之间的屏障,按预定义规则控制数据包进出。可分为硬件防火墙(由厂商设计的主机硬件,以数据包过滤机制为主)和软件防火墙(如Netfilter、TCP Wrappers等,这里主要介绍Linux系统的Netfilter)。
- Netfilter是Linux内核内建的数据包过滤机制,能分析数据包头部数据(涉及OSI七层协议的2、3、4层),可进行多种过滤操作,如拒绝特定端口、来源IP、带有特殊标志的数据包等,但不能有效阻挡病毒或木马程序,对内部LAN攻击也较难防范。
二、iptables
- 介绍:
- iptables服务把处理或过滤流量的策略条目称为规则,多条规则组成规则链,依据数据包处理位置分类,包括
目标地址转换(PREROUTING);
处理流入的数据包(INPUT);
处理流出的数据包(OUTPUT);
处理转发的数据包(FORWARD);
在进行路由选择后处理数据包,用于源地址转换(POSTROUTING)。 - 防火墙按从上至下顺序读取策略规则,找到匹配项即执行相应行为,若无匹配项则执行默认策略。其命令格式及各参数有明确含义,可根据流量的多种信息进行匹配并处理。
- iptables服务把处理或过滤流量的策略条目称为规则,多条规则组成规则链,依据数据包处理位置分类,包括
- 实验与案例:
准备工作
#安装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
- 介绍:
- 与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的说明 开发背景与目的: SELinux由美国国家安全局(NSA)开发,旨在避免资源的误用。传统的Linux基于自主访问控制(DAC),通过判断进程所有者/用户组与文件权限来控制访问,对…...
深度学习使用LSTM实现时间序列预测
大家好,LSTM是一种特殊的循环神经网络(RNN)架构,它被设计用来解决传统RNN在处理长序列数据时的梯度消失和梯度爆炸问题,特别是在时间序列预测、自然语言处理和语音识别等领域中表现出色。LSTM的核心在于其独特的门控机…...
Vue第一篇:组件模板总结
前言 本文希望读者有一定的Vue开发经验,样例采用vue中的单文件组件,也是我的个人笔记,欢迎一起进步 必须有根元素 这是一个最简单的vue单文件组件,<template></template>被称为模板,模板中必须有一个根元素…...
时钟使能、
时钟使能 如果正确使用,时钟使能能够显著地降低系统功耗,同时对面积或性能的影响极小。但是如果不正确地使用时钟使能, 可能会造成下列后果: • 面积增大 • 密度减小 • 功耗上升 • 性能下降 在许多使用大量控制集的…...
1. Autogen官网教程 (Introduction to AutoGen)
why autogen The whole is greater than the sum of its parts.(整体的功能或价值往往超过单独部分简单相加的总和。) -Aristotle autogen 例子 1. 导入必要的库 首先,导入os库和autogen库中的ConversableAgent类。 import os from autogen import Conversable…...
开源账目和账单
开源竞争: 开源竞争(当你无法彻底掌握技术的时候,你就开源这个技术,让更多的人了解这个技术,形成更多的技术依赖,你会说这不就是在砸罐子吗?一个行业里面总会有人砸罐子,你不如先砸…...
vue2面试题10|[2024-11-24]
问题1:vue设置代理 如果你的前端应用和后端API服务器没有运行在同一个主机上,你需要在开发环境下将API请求代理到API服务器。这个问题可以通过vue.config.js中的devServer.proxy选项来配置。 1.devServer.proxy可以是一个指向开发环境API服务器的字符串&…...
c语言与c++到底有什么区别?
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于c语言与c区别的相关内容! 关…...
云计算-华为HCIA-学习笔记
笔者今年7月底考取了华为云计算方向的HCIE认证,回顾从IA到IE的学习和项目实战,想整合和分享自己的学习历程,欢迎志同道合的朋友们一起讨论! 第二章:服务器基础 服务器是什么? 服务器本质上就是个性能超强的…...
优先算法 —— 双指针系列 - 复写零
目录 1. 复写零 2. 算法原理 一般情况下 改为就地操作:从左到右(错误) 从右到左 总结一下解决方法: 如何找到最后一个复写的数 特殊情况 完整步骤: 3. 代码 1. 复写零 题目链接:1089. 复写零 - 力…...
初识Linux—— 基本指令(下)
前言: 本篇继续来学习Linux的基础指令,继续加油!!! 本篇文章对于图片即内容详解,已同步到本人gitee:Linux学习: Linux学习与知识讲解 Linux指令 1、查看文件内容的指令 cat cat 查看文件…...
esayexcel进行模板下载,数据导入,验证不通过,错误信息标注在excel上进行返回下载
场景:普普通通模板下载,加数据导入,分全量和增量,预计20w数据,每一条数据校验,前后端代码贴上(代码有删改,关键代码都有,好朋友们自己取舍,代码一股脑贴上了&…...
服务器数据恢复—raid5阵列热备盘上线失败导致EXT3文件系统不可用的数据恢复案例
服务器数据恢复环境: 两组分别由4块SAS硬盘组建的raid5阵列,两组阵列划分的LUN组成LVM架构,格式化为EXT3文件系统。 服务器故障: 一组raid5阵列中的一块硬盘离线。热备盘自动上线替换离线硬盘,但在热备盘上线同步数据…...
《Qt Creator:人工智能时代的跨平台开发利器》
《Qt Creator:人工智能时代的跨平台开发利器》 一、Qt Creator 简介(一)功能和优势(二)快捷键与效率提升(三)跨平台支持(四)工具介绍与使用主要特性:使用步骤…...
AG32既可以做MCU,也可以仅当CPLD使用
Question: AHB总线上的所有外设都需要像ADC一样,通过cpld处理之后才能使用? Reply: 不用。 除了ADC外,其他都是 mcu可以直接配置使用的。 Question: DMA和CMP也不用? Reply: DMA不用。 ADC/DAC/CMP 用。 CMP 其实配置好后,可以直…...
51c自动驾驶~合集31
我自己的原文哦~ https://blog.51cto.com/whaosoft/12121357 #大语言模型会成为自动驾驶的灵丹妙药吗 人工智能(AI)在自动驾驶(AD)研究中起着至关重要的作用,推动其向智能化和高效化发展。目前AD技术的发展主要遵循…...
2023年3月GESPC++一级真题解析
一、单选题(每题2分,共30分) 题目123456789101112131415答案BAACBDDAADBCDBC 1.以下不属于计算机输入设备的有( )。 A .键盘 B .音箱 C .鼠标 D .传感器 【答案】 …...
linux NFS
什么是NFS NFS是Network File System的缩写,即网络文件系统。一种使用于分散式 文件协议通过网络让不同的机器、不同的操作系统能够分享个人数据,让应用 程序通过网络可以访问位于服务器磁盘中的数据。NFS在文件传送或信息传送 的过程中,依赖…...
查看浏览器的请求头
爬虫时用到了请求头,虽然可以用网上公开的,但是还是想了解一下本机浏览器的。以 Edge 为例,其余浏览器通用。 打开浏览器任一网页,按F12打开DevTools;或鼠标右键,选择“检查”。首次打开界面应该显示在网页…...
【JavaEE进阶】 JavaScript
本节⽬标 了解什么是JavaScript, 学习JavaScript的常⻅操作, 以及使⽤JQuery完成简单的⻚⾯元素操作. 一. 初识 JavaScript 1.JavaScript 是什么 JavaScript (简称 JS), 是⼀个脚本语⾔, 解释型或即时编译型的编程语⾔. 虽然它是作为开发Web⻚⾯的脚本语⾔⽽出名,…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...
