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⻚⾯的脚本语⾔⽽出名,…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
