在EC2上对SELinux故障进行紧急恢复以及排查的思路及方法

news2024/10/2 22:25:40

概述

SELinux,全称Security-Enhanced Linux,是一个为系统提供强制访问控制机制的安全模块,安装并启用SELinux模块的操作系统会为每个进程和系统资源打上一个特殊的安全标记,称为SELinux上下文,并根据SELinux上下文信息以允许或拒绝访问行为。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

 

根据国家网络安全等级保护基本要求,第三级系统在安全计算环境层面“应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问”,因此需要通过国家等保三级测评的系统均需要在系统内开启SELinux。

注:亚马逊官方系统镜像Amazon Linux 2022已默认开启了Enforcing策略的SELinux。

随着SELinux的应用越来越广泛,由SELinux配置不当导致的系统故障也随之增多,严重情况下可能导致系统启动失败,本文先从如何紧急恢复SELinux故障的EC2主机入手,然后围绕 SELinux常见三大问题根源之一的“标签故障”,介绍在AWS上进行故障排查的方法及思路。

EC2紧急恢复的两种方法

EC2串行控制台访问

如果故障主机满足串行控制台访问前置条件,并且启用了串行控制台访问,则可以直接使用EC2串行控制台访问进行紧急恢复以及故障排查,串行控制台不要求您的EC2实例具有任何联网功能。使用串行控制台,您可以向实例输入命令,就像键盘和显示器直接连接到实例的串行端口一样。串行控制台会话在实例重启和停止期间持续。在重新启动期间,您可以从一开始就查看所有启动消息。串行控制台默认未启用,需要明确授权以后方可使用,具体方法如下:

1、授予账户可执行串行控制台的权限,建议的IAM策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:GetSerialConsoleAccessStatus",
                "ec2:EnableSerialConsoleAccess",
                "ec2:DisableSerialConsoleAccess"
            ],
            "Resource": "*"
        }
    ]
}


配置此策略后,账户将可以在连接EC2实例时,看到“EC2串行控制台访问”的选项,初始默认为“禁止”,需要点击“管理”,设置为“允许”,完毕,账号即可对EC2进行串行控制台访问.

2、在串行控制台登陆EC2服务器前,我们还需要为EC2建立允许在串行控制台使用密码登陆的用户及口令。使用默认的SSH方式远程登录EC2服务器,登录以后使用passwd设定密码,下面使用root为例:

[ec2-user ~]$ sudo passwd root  

3、禁用SELinux以进行紧急恢复,对于因SELinux导致的系统故障,我们可以先禁用SELinux以进行紧急恢复及故障排查。串行控台登录服务器以后,直接修改 /etc/selinux/config 并将SELINUX=disabled,然后重启服务器,即可生效。

救援实例

对于不支持串行控制台访问的服务器,或支持但前期未启用的,我们还可以使用救援实例对SELinux故障主机进行紧急恢复。具体操作如下:

  1. 在Virtual Private Cloud (VPC)中启动新的Amazon EC2实例,且使用与受损实例相同的 Amazon系统映像 (AMI)并与其位于同一可用区中。新实例将成为您的“救援”实例。或者,也可以使用您可以访问的现有实例,但前提是该实例使用与受损实例相同的 AMI,并且二者位于同一可用区中.
  2. 从受损实例中分离Amazon Elastic Block Store (Amazon EBS)根卷(/dev/xvda 或/dev/sda1)。记下设备名称,以确保稍后重新连接时它是相同的
  3. 将EBS卷作为辅助设备(/dev/sdf)附加到救援实例。
  4. 使用SSH连接到您的救援实例。
  5. 成为根用户,使用lsblk 标识正确的设备名称,然后将其保存以在整个过程中使用:
$ sudo -i
# lsblk
# rescuedev=/dev/xvdf1

注意:设备(/dev/xvdf1)可能会以不同的设备名称附加到救援实例。使用 lsblk 命令查看可用磁盘设备及其挂载点,以确定正确的设备名称。

6、选择要使用的适当临时挂载点,并确保它存在,请使用/mnt,除非该挂载点已在使用

# rescuemnt=/mnt
# mkdir -p $rescuemnt

7、从附加的卷挂载根文件系统:

# mount $rescuedev $rescuemnt

注意:如果卷挂载失败,请检查 dmesg | tail。如果日志显示 UUID 冲突,请使用选项 -o nouuid。

8、修改SELinux配置文件

# cd /mnt/rescuemnt
# vi ./etc/selinux/config

9、完成后,卸载辅助设备:

# exit
# umount $rescuemnt

10、将辅助卷(/dev/sdf)与救援 EC2 实例分离,然后以/dev/xvda 或 /dev/sda1(根卷)的形式将其附加到原始实例。确保这与步骤 2 中看到的相同。/11、启动EC2实例,然后验证实例是否正常重启。

SELinux日志分析

系统恢复以后,我们第一步是分析SELinux拦截日志,分析SELinux到底是拦截了哪些进程才导致的系统异常。默认情况下,SELinux拦截日志均记录在/var/log/audit/audit.log及/var/log/messages文件中,对于audit和message,我们均可以通过关键词“AVC”(Access Vector Cache,访问矢量缓存)筛选除SELinux拦截的日志,以下是当 Apache HTTP 服务器(在 httpd_t 域中运行)尝试访问 /var/www/html/file1 文件(标有 samba_share_t 类型)时发生的 AVC 拒绝日志(以及关联的系统调用)示例(具体日志格式含义,可参考 RedHat官方链接 ):

type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" 
path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 
tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file 

type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 
a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 
gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm="httpd" 
exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null) 

通过分析SELinux拦截日志,可识别出故障发生时SELinux拦截掉的进程及路径文件信息。

注:如果通过分析日志无法直观识别出被拦截的异常进程,由于audit及message都默认有归档功能,还可以将故障时间点的拦截日志与正常时间段拦截日志进行对比分析,识别出故障发生时被额外拦截的进程。

进程上下文标签重置

分析上下文标签有两种方式:一种是直接对拦截日志中主客体的上下文各个字段进行分析,包括分析SELinux用户、角色、类型、以及级别,这方面的分析需要管理员对SELinux有非常深刻的理解,要求较高。

作为一种简单但更实用的排查方法,对于仅仅启用默认SELinux策略的系统,我们可以使用rhel-autorelabel服务将系统进程上下文标签进行恢复重置,然后通过对比重置前后的文件标签属性,识别出进程上下文标签的异常。

对于文件标签属性,我们有两种方法进行对比,一种手动对比,我们可使用系统命令“ls -z file”查看并记录重置前后file的上下文标签值。这种对比方法适用于小量文件的对比;另一种是在系统安装AIDE文件完整性校验工具,将需要对比的文件加入aide.conf文件中,自动化进行对比。AIDE使用方法参考如下:

cp /etc/aide.conf /etc/aide.conf_bak(可选,备份原始conf文件)
vi /etc/aide.conf (可选,在默认的基础上增加需要对比的文件,来源可以是日志分析识别到的一个或多个异常进程)
aide --init 
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
aide --check

启用rhel-autorelabel服务的操作命令如下:

systemctl enable rhel-autorelabel
touch /.autorelabel
reboot
#系统重启后,将会对文件重打SELinux上下文标签

故障原因验证

在通过标签重置,并对比分析识别到标签故障具体原因后,我们可以尝试系统命令chcon 将异常进程的上下文标签修改为正确或错误的值,验证异常现象是否消失或复现,从而确定故障的根本原因。

总结

本文围绕“标签故障”这一SELinux常见故障根源,讨论了SELinux故障分析的思路和方法,但在实际环境中,系统故障的原因有多种,甚至SELinux故障仍有许多可能性,因此还需要查阅系统日志文件及官方文档进行详细分析。

本篇作者

image.png

王俊峰

亚马逊云科技专业服务团队安全顾问,负责云安全合规、云安全解决方案等的咨询设计及落地实施,致力于为客户上云提供安全最佳实践,并解决客户上云中碰到的安全需求。

文章来源:https://dev.amazoncloud.cn/column/article/63186bc260678178b03b8104?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=CSDN 

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

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

相关文章

高阶数据结构-----三种平衡树的实现以及原理(未完成)

TreeMap和TreeSet的底层实现原理就是红黑树 一)AVL树: 1)必须是一棵搜索树:前提是二叉树,任取一个节点,它的左孩子的Key小于父亲节点的Key小于右孩子节点的Key,中序遍历是有序的,按照Key的大小进行排列,高度平衡的二叉…

WINGREEN 034STM4-00-200-RS 输入输出模块

WINGREEN 034STM4-00-200-RS 输入输出模块是一种工业自动化设备,通常用于各种应用领域,以实现数字输入和输出功能。这些模块可以在不同行业的自动化系统中发挥关键作用,以下是一些可能的应用领域: 制造业:WINGREEN 034…

kubeadm搭建kubernetes(k8s)

kubeadm搭建kubernetes(k8s) 一、环境准备1.所有节点,关闭防火墙规则,关闭selinux,关闭swap交换2.修改主机名3.所有节点修改hosts文件4.调整内核参数5.生效参数 二、 安装软件1.所有节点安装docker2.所有节点安装kubea…

机器学习开源工具BatteryML,一站式分析与预测电池性能

编者按:天下苦锂电池寿命久矣,时闻“开车出,推车回”,又闻“充电两小时,待机两分钟”,亦闻“气温骤降,请注意电池保暖”……随着以锂离子电池为动力源的产品,如手机、电脑、新能源汽…

基于Java+SpringBoot+Vue前后端分离人事管理系统设计和实现

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

软路由vs传统路由器ip:选择合适的网络设备

在构建和管理网络基础设施时,选择正确的网络设备至关重要。本文将介绍软路由IP和传统路由器两种常见的网络设备,并探讨它们各自特点、优势以及应用场景,帮助读者了解并选择最适合他们需求的网络设备。 什么是软路由IP? 软路由IP是…

vscode软件中不显示文件前的图标

问题: 解决方案: 效果:

专家解读 | 电力行业关基测评安全防护新挑战

在赛宁网安主办的安全运营实践论坛上,中国电力科学研究院信通所网安室测评主管、高级测评师肖红阳以《电力行业关基测评实践和经验交流》为主题发表演讲。他强调“电力行业关键信息基础设施是国家网络安全保护工作的重中之重”,并围绕电力关基测评的背景…

仓储24代电子标签接口文档

电子标签标签注册 通过手动触发电子标签注册到系统,注册成功就可以进行功能测试。 仓储24代注册 注册成功显示rssi:-xxdB如下: 绝对值越小信号越差,一般0 ~ -75dB都可以正常通讯 查询电子标签信息接口 接口描述 查询注册到系统的电子标签的…

八、性能测试之磁盘分析

性能测试之磁盘分析 一、磁盘简介1、存储数据之前,要先进行格式化2、读写数据时,数据与磁盘间有个磁盘缓存(内存的一部分)3、磁盘:持久化的存储设备4、磁盘读写操作流5、磁盘组成6、磁盘分区7、磁盘阵列RAID&#xff0…

记录Echarts双Y轴左右刻度不一致问题

根据项目需要,echarts实现双Y轴图表。因为两边数据不同,所以会出现左右Y轴刻度不一致。 增长率暂时是0,在X轴上,懒得改了。 修改之前: 修改之后: 根据数据找出最大值,分为6份向上取整,得到的每份就是间隔。 // dataAr…

直播预告 | CAR-T疗法红海赛道如何胜出?CAR-T工艺开发及商业化新思考

直播背景 随着整个细胞治疗行业的快速发展,CGT产业链上下游不断完善,从上游原材料及设备供应商到CXO再到创新药企,各个环节的联系更加紧密,竞争与合作关系愈加凸显。细胞药物研发过程中,对生物试剂、耗材、仪器设备有…

基于springboot的图片文字识别,支持中英文识别

概述 基于springboot的图片文字识别,支持中英文识别. 页面上传图片即可转换为中文或者英文. 详细 1.需求(要做什么) 识别图片文字, 实现页面上传图片即可转换为中文或者英文. 2.理论概述 OCR,即Optical Character Recognition&#xff…

机器学习-k-近邻算法

k-近邻算法 一、k-近邻算法概述1.1 使用python导入数据1.2 从文本文件中解析数据 二、使用k-近邻算法改进约会网站的配对效果2.1 准备数据2.2 数据预处理2.3 分析数据2.4 测试算法2.5使用算法 三、手写体识别系统 一、k-近邻算法概述 k-近邻算法是一种常用的监督学习算法&…

百度智能云千帆大模型平台2.0来了!从大模型到生产力落地的怪兽级平台!!

目录 前言 最佳算力效能为企业降低门槛 最多大模型,最多数据集为企业保驾护航 企业级安全对于企业来说是硬性要求 前言 普通人或许感知不明显,但是对于企业而言,身处AI时代,是否选择投资大模型,是否拥抱人工智能…

既然有 HTTP 协议,为什么还要有 RPC

HTTP和RPC 什么是HTTP HTTP协议(Hyper Text Transfer Protocol),又叫做超文本传输协议。平时上网在浏览器上敲个网址就能访问网页,这里用到的就是HTTP协议。 什么是RPC RPC(Remote Procedure Call)&…

详解Vision Transformer中的Encoder

一.Transformer架构 左半边是Encoder,右半边是Decoder。 二.Vision Transformer Vision Transformer取了Transformer的左半边。包含 Input EmbeddingPositional Encoding多头注意力机制 Add & Norm(前馈网络)Feed Forward Add & Norm 2.1 Input Embe…

Python 完美解决 Import “模块” could not be resolved ...

首先扩展安装Python插件 Ctrl Shift P,在打开的输入框中输入 Python: Select Interpreter 搜索,选择 Python 解析器。 选好解析器后,就可以直接在 VS Code 里运行(快捷键 Ctrl F5)或调试(快捷键 F5&…

打造高效等级查询系统

在现代教育体系中,考试等级查询系统是学生、家长和校园必不可少的工具。易查分是一款功能强大、易于使用的在线成绩查询平台,可以帮助学生和家长方便查询学生的考试成绩和等级,了解学习情况,从而更好的制定学习计划和提供必要的支…

leetcode(力扣):203移除链表元素 leetcode(力扣):206反转链表 leetcode(力扣):876.链表的中间结点多种解法

目录 203.移除链表元素 解法一:将目标元素前一个元素存放地址改为下一元素地址 解法二:遍历原链表,把不是val的节点拿出来进行尾插到新链表​编辑 解法三:有哨兵位解法->头节点不存储有效数据​编辑 206.反转链表 方法一…