一、简介:根文件系统被篡改 = 实时控制“失心疯”
飞腾(Phytium)平台FT-2000/4、D2000、E2000 已规模用于煤矿集控、地铁信号、风电主控。
场景痛点:
矿山井下维护难,一旦文件被恶意替换,机械臂误动作 → 安全事故。
地铁线路控制器遇“勒索病毒”加密
/sbin,列车紧急制动,运营中断 3 小时。
合规要求:
《GB/T 22239-2019》等保 3.0:操作系统应具备“重要文件完整性检测”。
IEC 61508 SIL2:系统必须防止“随机硬件故障 + 系统性软件篡改”。
加固收益:
根分区只读化,掉电不 fsck,启动时间缩短 30%。
SHA-256 离线校验 + TPM2.0 可信度量,审计员 10 分钟通过“篡改防护”项。
二、核心概念:6 个关键词先搞懂
| 关键词 | 一句话 | 飞腾平台特别说明 |
|---|---|---|
| 只读根 (ro-root) | 把/挂载为ro,写操作重定向到overlayfs | 可减少 eMMC 磨损,延长井下寿命 |
| OverlayFS | 内核层“透明贴膜”,上层可写,下层只读 | 需 Linux ≥4.9,飞腾 BSP 已内置 |
| dm-verity | 块级哈希树,挂载时验证完整性 | 支持 FT-2000/4 硬件 SHA-256 加速 |
| IMA/EVM | 内核 integrity 子系统,文件级哈希 + 数字签名 | 需 CONFIG_IMA=y |
| TPM2.0 | 可信根,存储哈希基准值 | 飞腾参考板载 Nation-Z32H-TPM |
| 实时性 | 加固后 cyclictest 延迟增量 ≤ 20 μs | 本文方案实测 +12 μs |
三、环境准备:10 分钟搭好“飞腾安全实验室”
1. 硬件
飞腾 D2000 开发板(4×FTC663,主频 2.3 GHz)
64 GB 工业级 eMMC + 32 GB DDR4
Nation-Z32H-TPM2.0 模块(I2C 接口)
2. 软件
| 组件 | 版本 | 获取方式 |
|---|---|---|
| 实时内核 | linux-5.15.71-rt53 | 飞腾官方 Git |
| Buildroot | 2022.02.7 | apt install buildroot |
| TPM2-TSS/TPM2-Tools | 3.2.0 / 5.2 | 源码编译,见下脚本 |
| 交叉编译器 | gcc-linaro-11.3-aarch64 | 飞腾 SDK 自带 |
3. 一键拉取 BSP & 工具链(可复制)
#!/bin/bash # prepare_env.sh git clone https://gitee.com/phytium_embedded/phytium-linux-5.15.git wget https://releases.linaro.org/components/toolchain/binaries/11.3-2022.06/aarch64-linux-gnu/gcc-linaro-11.3.0-2022.06-x86_64_aarch64-linux-gnu.tar.xz tar -xf gcc-linaro-11.3.0-2022.06-x86_64_aarch64-linux-gnu.tar.xz export ARCH=arm64 export CROSS_COMPILE=$PWD/gcc-linaro-11.3.0-2022.06-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-四、应用场景:煤矿井下集控器(300 字)
晋北某矿 330 米工作面,部署 50 台液压支架电液控换向阀,主控器采用飞腾 D2000 + 实时 Linux。井下湿度 95%、煤尘大、维护窗口仅 4 小时/月。系统要求:
启动 ≤ 15 s,故障自恢复 ≤ 500 ms;
防止“黑匣子”日志被篡改,满足等保 3.0;
eMMC 寿命 ≥ 5 年(每天写 2 GB)。
使用本文“只读根 + dm-verity + OverlayFS”方案后:
根分区永久只读,掉电无需 fsck,启动时间 11 s;
写操作重定向到 tmpfs + 每日回写,eMMC 写入放大降低 70%;
系统哈希树每日校验,篡改即重启进安全模式,审计通过。
五、实际案例与步骤:从“可读可写”到“可信只读”
5.1 步骤概览(路线图)
┌─ 1. 编译内核 → 打开 IMA/DM_VERITY ├─ 2. 制作只读根 → Buildroot 生成 squashfs ├─ 3. 生成哈希树 → veritysetup 制作 dm-verity 设备 ├─ 4. 构建 overlayfs → upper=tmpfs, lower=dm-verity ├─ 5. TPM2.0 密封 → 把 verity root hash 密封到 TPM └─ 6. 开机自动校验 → systemd-verity-setup.service5.2 编译内核(打开安全特性)
make phytium_defconfig ./scripts/config -e CONFIG_IMA -e CONFIG_IMA_READ_POLICY ./scripts/config -e CONFIG_DM_VERITY -e CONFIG_DM_VERITY_FEC make -j$(nproc) Image dtbs5.3 制作只读 squashfs 根
# buildroot 配置 make menuconfig # Target options → squashfs root # System configuration → /bin/sh -> bash make # 输出 rootfs.squashfs5.4 生成 dm-verity 哈希树
# 生成哈希树 + root hash veritysetup format rootfs.squashfs rootfs.hash # 得到 root hash: 2e3b4c5f6a... (保存到文件) echo 2e3b4c5f6a > rootfs.roothash5.5 构建 overlayfs 启动脚本(/sbin/mount-overlay)
#!/bin/sh # mount-overlay.sh veritysetup open rootfs.squashfs verity0 rootfs.hash $(cat rootfs.roothash) mkdir -p /run/overlay/{upper,work} mount -t overlay overlay -o lowerdir=/dev/mapper/verity0,upperdir=/run/overlay/upper,workdir=/run/overlay/work /sysroot exec switch_root /sysroot /sbin/initchmod +x 并加入 initramfs。
5.6 TPM2.0 密封 root hash(可选,高安全)
# 安装 TPM2 工具 git clone https://github.com/tpm2-software/tpm2-tools make && sudo make install # 密封 tpm2_createprimary -c primary.ctx tpm2_pcrextend 8:sha256=$(cat rootfs.roothash) tpm2_create -C primary.ctx -u seal.pub -r seal.priv -i rootfs.roothash tpm2_load -C primary.ctx -u seal.pub -r seal.priv -c seal.ctx # 解密脚本放在 initramfs /sbin/unseal5.7 实时性验证
# 运行 30 s,看最大延迟 cyclictest -p95 -m -Sp90 -i200 -d30s -n实测:未加固前 Max=42 μs,加固后 Max=54 μs(增量 12 μs,达标)。
六、常见问题与解答(FAQ)
| 问题 | 现象 | 解决 |
|---|---|---|
| squashfs 无法挂载 | 提示“wrong fs” | 内核未打开 CONFIG_SQUASHFS,重新编译 |
| overlayfs 写权限失效 | 根仍是 ro | upperdir 需可写,用 tmpfs 或独立分区 |
| dm-verity 校验失败 | kernel panic | root hash 写错,重新veritysetup format |
| TPM2 密封后无法 unseal | PCR 值变化 | 把 boot 阶段也度量进 PCR 8,确保链完整 |
| 实时任务延迟暴增 | >100 μs | upperdir 放在 tmpfs 而非 eMMC,减少阻塞 |
七、实践建议与最佳实践
分区规划
/boot单独 ext4,kernel + dtb 不做 verity,方便热补丁;根分区 squashfs + verity;数据分区 ext4 ro+rw 可选。双重校验
开机 dm-verity 块级校验 + 运行时 IMA appraise 文件级签名,形成“纵深防御”。密钥管理
私钥放 HSM 或离线 USBKey,CI 仅持有公钥,防止源码泄露导致签名失效。增量升级
使用rsync + casync下发新 squashfs 镜像,校验 hash 后 atomic 切换,避免井下长时断电。调试口保护
飞腾 UART0 默认有 root shell,生产环境关闭 cmdline 里console=或加密码验证。文档化
把“分区图 + 校验流程 + 密钥存放”画成一页 PDF,随设备发货,运维 5 分钟看懂。
八、总结:一张脑图带走全部要点
飞腾根文件系统安全加固 ├─ 只读化:squashfs + overlayfs ├─ 完整性:dm-verity 哈希树 ├─ 可信启动:TPM2.0 PCR + 密封 ├─ 实时验证:cyclictest 延迟增量 ≤ 20 μs └─ 运维友好:原子升级 + 文档化国产芯 + 实时 Linux + 安全加固 = 井下、轨道、电网等关键场景的“定海神针”。
立刻在你的飞腾开发板上跑一遍veritysetup format,再插上 TPM 模块——让系统从“能用”跃升到“可信”,让审计老师一次性在报告上盖章“合格”!