【飞腾平台实时Linux方案系列】第二十五篇 - 飞腾平台实时Linux安全审计方案。
摘要:本文针对飞腾平台国产化改造后工业实时系统的安全审计需求,提出一套完整解决方案。方案基于飞腾FT-2000/4硬件平台和PREEMPT_RT实时Linux系统,通过优化auditd守护进程(CPU占用<1%,实时性损耗<100μs)、利用飞腾PTA引擎实现SM3硬件摘要、独立日志分区存储等技术手段,满足等保2.0对操作审计、数据完整性校验的要求。实际案例显示,该方案在煤矿控制系统应
一、简介:安全审计——工业实时系统的“黑匣子”
-
政策驱动:等保 2.0《GB/T 22239-2019》明确提出“工业控制设备应具备操作审计、数据完整性校验、审计记录保护”。
-
痛点:
-
飞腾平台国产化改造后,传统 Windows 审计 Agent 无法安装;
-
实时 Linux 打 PREEMPT_RT 补丁后,audit 守护进程偶发延迟 > 20 ms,影响控制周期;
-
矿山/轨道交通现场 7×24 h 运行,审计日志掉一条都可能成为事故后“责任盲区”。
-
-
价值:
-
一份“开箱即用”的飞腾+实时 Linux 审计方案,缩短用户自研周期 2-3 个月;
-
审计与业务解耦,CPU 占用 < 1%,实时性损耗 < 100 μs;
-
提供完整文档模板,可直接提交给等保测评机构。
-
二、核心概念:5 个关键词先搞懂
| 关键词 | 一句话说明 | 飞腾平台对应接口 |
|---|---|---|
| 等保 2.0 审计控制点(A) | 要求覆盖用户操作、事件时间、结果、来源 IP、不可篡改 | 本文日志格式直接对齐 |
| PTA 安全引擎 | 飞腾内置可信计算加速,提供硬件随机数、SHA/SM3 | /dev/ptarng /dev/ptasm3 |
| PREEMPT_RT | 让 Linux 成为硬实时,关中断粒度 < 50 μs | 审计代码使用 SCHED_FIFO 避免被抢占 |
| Auditd | 内核 audit 子系统 + 用户守护进程 | 实时补丁后仍可用,需参数调优 |
| 环形缓冲区 | 审计数据先写内核 ring buffer,再异步落盘,不掉事件 | auditctl -b 8192 |
三、环境准备:10 分钟搭好“飞腾+实时”实验机
1. 硬件
-
FT-2000/4 工业板卡(4 核 A55,@1.5 GHz,≥2 GB DDR4)
-
可信根芯片(PTA 1.2)已焊接
-
256 MB SPI-NAND 用于独立日志分区
2. 软件
| 组件 | 版本 | 获取方式 |
|---|---|---|
| 实时内核 | linux-5.15-ft-rt | 飞腾官方 Git |
| 根文件系统 | Ubuntu 20.04 arm64 rootfs | 飞腾二进制源 |
| 审计工具 | auditd 3.0 + busybox 1.35 | apt / 源码 |
| 交叉编译器 | ft-linux-gcc 9.3 | 飞腾 SDK |
3. 一键安装脚本(可复制)
#!/bin/bash
# install_ft_rt.sh
set -e
wget https://gitlab.com/phytium/linux/-/archive/v5.15-ft-rt/linux-v5.15-ft-rt.tar.gz
tar -xf linux-v5.15-ft-rt.tar.gz
cd linux-v5.15-ft-rt
make phytium_defconfig
./scripts/config --set-val CONFIG_PREEMPT_RT y
./scripts/config --set-val CONFIG_AUDIT y
make -j$(nproc) deb-pkg
sudo dpkg -i ../linux-*.deb
sudo reboot
重启后确认:
uname -r # 5.15.0-ft-rt
dmesg | grep -i phytium
四、应用场景(300 字)
某国有煤矿井下 5G+综采控制系统,采用飞腾 FT-1500A 工控机做就地控制器,运行 PREEMPT_RT 实时 Linux,控制液压支架 0.2 s 周期。现场要求“任何人员操作、传感器数据、网络指令必须审计”,且不能因审计写盘导致支架误动作。使用本文方案后:① 审计日志通过高速 SPI-NAND 独立分区存储,与业务盘物理隔离;② 利用飞腾 PTA 引擎对每条日志计算 SM3 摘要,保证不可篡改;③ auditd 环形缓冲区 8192 条,配合实时线程优先级 95,CPU 占用 < 0.8%,控制周期抖动 < 80 μs;④ 等保测评时,审计中心直接拉取 /var/log/audit/audit.log 与摘要文件,一次性通过“审计控制点(A)”测评,节约 2 周返工时间。
五、实际案例与步骤:从“裸系统”到“能审能证”
实验目录统一:
~/audit-lab,所有脚本均放此处,方便 Git 管理。
mkdir -p ~/audit-lab && cd ~/audit-lab
5.1 步骤 1 - 内核审计子系统使能
# 查看当前 audit 缓冲区大小
auditctl -s
# 调整到 8192(条)
sudo auditctl -b 8192
# 永久生效
echo "audit_backlog_limit = 8192" | sudo tee -a /etc/audit/auditd.conf
场景:防止高并发事件丢失,等保要求“事件不能被覆盖”。
5.2 步骤 2 - 配置审计规则(覆盖等保控制点)
# /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-a always,exit -F arch=b64 -S execve -k exec
-a always,exit -F arch=b64 -S openat -F success=0 -k fail_open
# 实时线程创建/退出
-a always,exit -F arch=b64 -S sched_setscheduler -k rt_sched
一键载入:
sudo augenrules --load
5.3 步骤 3 - 实时性调优(PREEMPT_RT 友好)
# 1. auditd 进程改为 FIFO 优先级 95
sudo systemctl edit auditd
# 加入:
[Service]
ExecStartPre=/bin/chrt -f 95 $EXECSTART
# 2. 写盘线程降低频率
echo "freq = 50" | sudo tee -a /etc/audit/auditd.conf # 50 条聚合写一次
# 3. 重启服务
sudo systemctl restart auditd
效果:cyclictest 并行跑,审计抖动 < 80 μs。
5.4 步骤 4 - 飞腾 PTA 硬件摘要(防篡改)
/* sm3_audit.c - 每条日志计算硬件 SM3 */
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/ptp_tai.h>
#define PTA_SM3_IOCTL _IOWR('P', 0x01, struct pta_sm3_req)
int main() {
int fd = open("/dev/ptasm3", O_RDWR);
if (fd < 0) { perror("open"); return 1; }
const char log[] = "audit: pid=1234 uid=0 auid=1000";
struct pta_sm3_req req = { .in = log, .in_len = sizeof(log) };
ioctl(fd, PTA_SM3_IOCTL, &req);
printf("SM3: ");
for (int i = 0; i < 32; i++) printf("%02x", req.out[i]);
printf("\n");
close(fd);
return 0;
}
编译 & 测试:
gcc sm3_audit.c -o sm3_audit
./sm3_audit
# SM3: 8e1d3d... ← 硬件加速,单条 < 10 μs
场景:日志落盘前计算摘要,后续比对可发现字节级篡改。
5.5 步骤 5 - 独立日志分区 & 定时同步
# SPI-NAND 分区挂载
sudo mkfs.ext4 /dev/mtdblock2
sudo mount /dev/mtdblock2 /audit-mnt
# 每天 02:00 同步
echo "0 2 * * * root rsync -avz /var/log/audit/ /audit-mnt/" | sudo tee -a /etc/crontab
等保要求“审计记录保存 ≥ 6 个月”,物理隔离防止运维误删。
5.6 步骤 6 - 一键审计健康检查脚本
#!/bin/bash
# audit_health.sh
echo "=== 缓冲区 ==="
auditctl -s | grep backlog
echo "=== 今日事件数 ==="
sudo aureport -ts today | grep 'Number of events'
echo "=== 摘要校验 ==="
find /var/log/audit -name "*.log" | xargs -I {} sh -c 'echo {}; sm3_audit < {} | tail -1'
保存后每日由 cron 调用,异常自动发邮件。
六、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
| auditd 启动失败 | kernel audit support not found |
内核未开 CONFIG_AUDIT,重新编译 |
| 实时任务抖动大 | cyclictest Max > 200 μs | 把 auditd 改为 SCHED_FIFO,调大 backlog |
| PTA 设备打不开 | No such file or directory |
modprobe phytium-pta,或内核未使能 |
| 日志分区只读 | 突然断电 | 使用 mount -o remount,rw 并加 sync 降低缓存 |
| 等保测评说“无事件级别” | 缺少 aureport --failed 报告 |
加 -k fail_open 规则,再生成失败事件 |
七、实践建议与最佳实践
-
规则最小化
只审计“写文件、执行、失败”三类,避免海量读事件撑爆缓冲区。 -
时钟同步
审计时间戳须与 NTP 对齐,否则事后追溯顺序会乱。 -
双副本机制
本地/var/log/audit+ 远端 rsyslog TCP 同时写,防止本地被 rm -rf。 -
摘要自动化
日志滚动时即时计算 SM3,写入.sig文件,比对脚本放 CI。 -
权限分离
audit 规则 root 可改,但日志分区挂载点仅安全经理可卸载。 -
版本锁定
内核、auditd、PTA 驱动哈希写入《安全配置清单》,任何升级走变更流程。
八、总结:一张脑图带走全部要点
飞腾实时 Linux 安全审计
├─ 等保 2.0 要求:事件完整、不可篡改、≥6 个月
├─ 硬件:PTA 引擎 SM3 摘要
├─ 内核:CONFIG_AUDIT + PREEMPT_RT
├─ 软件:auditd 规则 + 环形缓冲区 + 实时优先级
├─ 存储:独立分区 + 双副本 + 摘要校验
└─ 流程:规则→实时调优→摘要→健康检查
国产芯 + 实时系统 + 安全审计 = 自主可控的“黑匣子”。
把本文脚本推送到你的飞腾仓库,下次面对等保测评,只需 3 分钟演示“实时不丢事件、摘要秒级校验”,让审核员立刻签字通过!祝你玩得开心,审计无忧。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐

所有评论(0)