惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
小众软件
小众软件
美团技术团队
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
D
Docker
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
B
Blog
雷峰网
雷峰网
The Cloudflare Blog

土法炼钢兴趣小组的算法知识备份

国密算法与国密 TLS 系列索引 【系统架构设计】架构质量属性:不只是"高可用高性能" 【系统架构设计百科】告警策略:如何避免"狼来了" 【系统架构设计】CQRS:读写分离的架构哲学 【系统架构设计】空间架构:极端扩展场景的解法 【系统架构设计】微服务架构深度审视:优势、代价与适用边界 【系统架构设计】扩展性原理:水平、垂直与对角扩展 【系统架构设计】无状态设计:扩展的第一步也是最难的一步 【系统架构设计】缓存架构:从本地到分布式的多级缓存体系 【系统架构设计】管道与过滤器:Unix 哲学的架构表达 【系统架构设计】复杂性管理:架构的核心战场 【系统架构设计】消息队列架构:异步解耦的设计与陷阱 【系统架构设计】CDN 架构:全球加速的设计原理 【系统架构设计】连接池设计:被忽视的性能杀手 【系统架构设计】弹性设计模式:熔断器、舱壁与超时 【系统架构设计】高可用设计模式:冗余、故障转移与仲裁 【系统架构设计】容量规划:从拍脑袋到数据驱动 【系统架构设计】数据库扩展:分库分表的工程实践与替代方案 【系统架构设计】SLO 工程:可靠性的量化管理 【系统架构设计】性能建模:用数学思维分析系统瓶颈 【系统架构设计】混沌工程:主动验证系统的韧性 【系统架构设计】零拷贝与内存映射:数据搬运的极致优化 【系统架构设计】线程模型:从 thread-per-request 到协程 【系统架构设计】容灾架构:多活与灾备设计 【系统架构设计】数据库性能模式:索引、查询与连接管理 【系统架构设计】数据建模:从关系范式到文档模型的真实权衡 【系统架构设计】吞吐量优化:批处理、流水线与并发模型 【系统架构设计】流处理架构:从批处理到实时的范式迁移 【系统架构设计】搜索引擎架构:倒排索引之上的系统设计 【系统架构设计】时序数据架构:监控与 IoT 的存储设计
【操作系统百科】IMA、EVM 与 dm-verity
2026-06-28 · via 土法炼钢兴趣小组的算法知识备份

固件验证了 bootloader → bootloader 验证了内核 → 内核之后谁验证文件?IMA 度量和鉴定文件完整性,dm-verity 保护整个块设备。

一、先看图

flowchart LR
    UEFI[UEFI Secure Boot<br/>验证 bootloader] --> BL[bootloader<br/>验证内核]
    BL --> KERNEL[内核启动]
    KERNEL --> IMA[IMA<br/>度量/鉴定文件]
    KERNEL --> DMVERITY[dm-verity<br/>块设备完整性]
    IMA --> TPM[TPM PCR<br/>存储度量值]

    classDef boot fill:#f0883e22,stroke:#f0883e,color:#adbac7;
    classDef runtime fill:#388bfd22,stroke:#388bfd,color:#adbac7;
    class UEFI,BL boot
    class KERNEL,IMA,DMVERITY,TPM runtime

二、IMA(Integrity Measurement Architecture)

2.1 度量(Measurement)

文件被访问 → 计算 hash → 记录到 IMA 日志 → 扩展到 TPM PCR
cat /sys/kernel/security/ima/ascii_runtime_measurements | head
# 10 hash template filename

2.2 鉴定(Appraisal)

文件被访问 → 计算 hash → 与签名/预期值比较 → 不匹配则拒绝
# IMA 策略
echo "appraise func=BPRM_CHECK fowner=0" > /sys/kernel/security/ima/policy

2.3 签名

evmctl ima_sign --key /path/to/private_key.pem /usr/bin/my_app

签名存储在文件的 xattr(security.ima)中。

三、EVM(Extended Verification Module)

保护文件的安全扩展属性(xattr)不被篡改:

security.ima + security.selinux + security.capability → HMAC/签名
# EVM 状态
cat /sys/kernel/security/evm

4.1 原理

块设备 → Merkle 树(hash tree)→ root hash

每次读块 → 验证 hash → 不匹配则返回 I/O 错误。

4.2 使用

veritysetup format /dev/sda1 /dev/sda2
# Root hash: abc123...

veritysetup open /dev/sda1 verified /dev/sda2 abc123...
mount /dev/mapper/verified /mnt

4.3 应用场景

  • Android 系统分区
  • Chrome OS rootfs
  • 容器镜像

五、fs-verity

文件级别的 verity(不需要块设备层):

fsverity enable /path/to/file
fsverity measure /path/to/file

内核在页缓存层验证 → 惰性验证(按需读取时检查)。

六、TPM 与 PCR

PCR(Platform Configuration Register)= 度量值的累加器
PCR_new = Hash(PCR_old || measurement)

TPM 硬件保证 PCR 不可回退 → 远程认证(Remote Attestation)可以验证系统状态。

七、dm-integrity

integritysetup format /dev/sda1
integritysetup open /dev/sda1 integrity_dev

每个扇区附加校验码 → 检测静默数据损坏。

可与 dm-crypt 组合 → 加密 + 完整性。

八、完整性链

UEFI Secure Boot
  → bootloader 签名验证
    → 内核签名验证
      → 模块签名验证(J-85)
        → IMA 文件度量/鉴定
          → dm-verity 块设备验证

每一环都必须闭合 → 任何一环缺失都可能被绕过。

九、观察

# IMA 度量日志
cat /sys/kernel/security/ima/ascii_runtime_measurements | wc -l

# dm-verity 状态
dmsetup status | grep verity

# TPM PCR
tpm2_pcrread

# fs-verity
fsverity measure /path/to/file

# EVM 状态
cat /sys/kernel/security/evm

十、小结

  • IMA = 文件完整性度量和鉴定 → TPM PCR 存储
  • EVM = 保护安全 xattr
  • dm-verity = 块设备 Merkle 树验证
  • fs-verity = 文件级惰性验证
  • 完整性链必须从固件到运行时闭合

参考文献

  • security/integrity/ima/
  • security/integrity/evm/
  • Documentation/admin-guide/device-mapper/verity.rst
  • Documentation/filesystems/fsverity.rst

工具

  • evmctl
  • veritysetup
  • fsverity
  • tpm2-tools

上一篇SELinux 与 AppArmor 下一篇内核缓解措施

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-04-27 · os

【操作系统百科】内存回收

Linux 内存回收是 VM 最复杂的子系统之一。本文讲 active/inactive LRU、kswapd 与 direct reclaim、watermark 三线、swappiness 的真实含义、MGLRU 改造、memcg 回收与 PSI。

2026-04-28 · os

【操作系统百科】交换

swap 还值得开吗?本文讲 swap area 基础、swap cache、zram 压缩内存、zswap 前端压缩池、swappiness 的真实含义、容器里的 swap 策略,以及为什么现代 Android 全靠 zram 不靠磁盘。

2026-05-03 · os

【操作系统百科】Slab/SLUB 分配器

buddy 只管页粒度(4K+),内核大多数对象只有几十到几百字节。slab/SLUB 在 buddy 之上做对象级缓存。本文讲 slab 历史、SLUB 接手、SLOB 退场、kmem_cache、per-CPU cache、KASAN 集成。

2026-05-07 · os

【操作系统百科】用户态分配器

glibc malloc、tcmalloc、jemalloc、mimalloc 各有哲学。本文讲 arena、thread cache、size class、madvise 返还策略、碎片与 RSS 膨胀、如何根据负载选分配器。