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               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain 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:http
 
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
 
Chain 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 daemon
     Loaded: 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux初识进程信号

预备 1&#xff0c;你怎么能认识信号呢&#xff1f; 信号是内置的&#xff0c;进程认识信号&#xff0c;是程序员内置的属性 2&#xff0c;信号产生之后&#xff0c;怎么处理信号&#xff1f; 知道&#xff01;因为在信号产生之前&#xff0c;就已经把处理信号的内容准备好…

如何安全删除 Linux 用户帐户和主目录 ?

Linux 以其健壮性和灵活性而闻名&#xff0c;是全球服务器和桌面的首选。管理用户帐户是系统管理的一个基本方面&#xff0c;包括创建、修改和删除用户帐户及其相关数据。本指南全面概述了如何在 Linux 中安全地删除用户帐户及其主目录&#xff0c;以确保系统的安全性和完整性。…

ubuntu16.04在ros使用USB摄像头-解决could not open /dev/video0问题

首先检查摄像头 lsusb 安装 uvc camera 功能包 sudo apt-get install ros-indigo-uvc-camera 安装 image 相关功能包 sudo apt-get install ros-kinetic-image-* sudo apt-get install ros-kinetic-rqt-image-view运行 uvc_camera 节点 首先输入roscore 然后另外开一个终端输入…

计算机网络socket编程(6)_TCP实网络编程现 Command_server

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络socket编程(6)_TCP实网络编程现 Command_server 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论…

聚水潭与MySQL数据集成案例分享

聚水潭数据集成到MySQL的技术案例分享 在现代数据驱动的业务环境中&#xff0c;如何高效、可靠地实现不同系统之间的数据对接成为企业关注的焦点。本次案例将详细介绍如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据无缝集成到MySQL数据库中&#xff0c;实现从“聚水谭…

Kafka日志索引详解以及生产常见问题分析与总结

文章目录 一、Kafka的Log日志梳理1.1、Topic下的消息如何存储1.1.1、log文件追加记录所有消息1.1.2、index和timeindex加速读取log消息日志 1.2、文件清理机制1.2.1、如何判断哪些日志文件过期了1.2.2、过期的日志文件如何处理 1.3、Kafka的文件高效读写机制1.3.1、Kafka的文件…

数据结构 (5)栈

一、基本概念 栈是一种运算受限的线性表&#xff0c;它只允许在表的一端进行插入和删除操作&#xff0c;这一端被称为栈顶&#xff08;Top&#xff09;&#xff0c;而另一端则被称为栈底&#xff08;Bottom&#xff09;。栈的插入操作被称为入栈&#xff08;Push&#xff09;&a…

AI 在软件开发流程中的优势、挑战及应对策略

AI 在软件开发流程中的优势、挑战及应对策略 随着人工智能技术的飞速发展&#xff0c;AI大模型正在逐步渗透到软件开发的各个环节&#xff0c;从代码自动生成到智能测试&#xff0c;AI的应用正在重塑传统的软件开发流程。本篇文章将分析AI在软件开发流程中带来的优势&#xff0…

2025-2026财年美国CISA国际战略规划(下)

文章目录 前言四、加强综合网络防御&#xff08;一&#xff09;与合作伙伴共同实施网络防御&#xff0c;降低集体风险推动措施有效性衡量 &#xff08;二&#xff09;大规模推动标准和安全&#xff0c;以提高网络安全推动措施有效性衡量 &#xff08;三&#xff09;提高主要合作…

hubuctf-2024校赛-复现wp

web easyweb1 <?php error_reporting(0); highlight_file(__FILE__);$flag getenv("GZCTF_FLAG");if(isset($_GET[num])){$num $_GET[num];if(preg_match("/[0-9]/", $num)){die("You are failed.");}if(intval($num)){echo $flag;} } 利…

[AutoSar]BSW_Diagnostic_007 BootLoader 跳转及APP OR boot response 实现

目录 关键词平台说明背景一、Process Jump to Bootloader二、相关函数和配置2.1 Dcm_GetProgConditions()2.2 Dcm_SetProgConditions() 三、如何实现在APP 还是BOOT 中对10 02服务响应3.1 配置3.2 code 四、报文五、小结 关键词 嵌入式、C语言、autosar、OS、BSW、UDS、diagno…

Linux命令思维导图

看到一个很不错的Linux命令思维导图&#xff0c;用机器翻译了一下&#xff0c;建议收藏备用。 附上英文版&#xff1a;

vmware esxi vcenter6.7安装教程(dell)以及许可证

背景 vSphere是数据中心产品附带的软件套件&#xff0c;vSphere就像是Microsoft Office套件一样&#xff0c;其中包含许多软件&#xff0c;例如PPT、Word、Excle等&#xff0c;同理&#xff0c;vSphere也是一个软件套装&#xff0c;其中包含vCenter、ESXi、vSphere Client等&a…

springboot实战(17)(“大事件“——新增文章主体逻辑)

目录 一、新增文章涉及的数据表、实体类。 &#xff08;1&#xff09;表结构。 &#xff08;2&#xff09;实体类&#xff08;Article&#xff09; 二、接口文档分析。 &#xff08;1&#xff09;请求方式与请求路径。 &#xff08;2&#xff09;请求参数。 &#xff08;3&…

Vue小项目(开发一个购物车)

基于Vue知识点1&#xff08;点击跳转&#xff09;、Vue知识点2&#xff08;点击跳转&#xff09; ​想要学习更多前端知识&#xff1a;点击Web前端专栏 接下来我们开发一个如下图所示&#xff0c;有最基本购物车功能的简易小项目 下面这是最基本的HTMLCSS框架&#xff01;&…

Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件

不使用 deep 要想修改三方组件样式&#xff0c;只能添加到 scoped 之外&#xff0c;弊端是污染了全局样式&#xff0c;后续可能出现样式冲突。 <style lang"less"> .container {.el-button {background: #777; } }使用 /deep/ deprecated .container1 {/deep…

禁用达梦DEM的agent

agent占用内存较多&#xff0c;实际没什么使用&#xff0c;考虑停止agent 应该切换到root执行停止 cd /dm/dmdbms/tool/dmagent/service/ ./DmAgentService stop禁用

多维高斯分布的信息熵和KL散度计算

多维高斯分布是一种特殊的多维随机分布&#xff0c;应用非常广泛&#xff0c;很多现实问题的原始特征分布都可以看作多维高斯分布。本文以数据特征服从多维高斯分布的多分类任务这一理想场景为例&#xff0c;从理论层面分析数据特征和分类问题难度的关系注意&#xff0c;本文分…

【ESP32CAM+Android+C#上位机】ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输

前言: 本项目实现ESP32-CAM在STA或AP模式下基于UDP与手机APP或C#上位机进行视频流/图像传输。本项目包含有ESP32源码(arduino)、Android手机APP源码以及C#上位机源码,本文对其工程项目的配置使用进行讲解。实战开发,亲测无误。 AP模式,就是ESP32发出一个WIFI/热点提供给电…

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计

概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术&#xff0c;选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发&#xff0c;搭载了先进的勘智 K230D 芯片。 K230…