首页/安全/取证与溯源速查/只读挂载与写保护操作
Linux 取证135 条

只读挂载与写保护操作

取证分析前把设备或镜像置为只读,避免分析动作改变证据;blockdev --setro 与 mount -o ro 是两条基础手段。

取证与溯源速查安全更新于 2026-10-13

只读挂载与写保护

把设备或镜像置为只读,是分析开始前的第一道保护:读取动作本身会更新访问时间、写系统日志、改变内存状态,直接在原始介质上操作等于一边分析一边破坏证据。Linux 上常用两条手段叠加,blockdev --setro 在块设备层禁止写入,mount -o ro 在文件系统层只读挂载,镜像文件则配合 loop 与分区偏移使用。

基本信息

块设备层blockdev --setro /dev/sdb 禁写,blockdev --getro 查询状态
文件系统层mount -o ro,noexec,nodev,nosuid <设备> <目录>
镜像挂载mount -o ro,loop,offset=<字节偏移> disk.img <目录>
分区偏移起始扇区乘以 512 得到字节数,fdisk -l 或 mmls 可取
前置动作挂载前先对原始介质完整计算哈希并留记录

典型使用场景

  • 现场分析前把证据盘设为只读,避免任何误写
  • 按分区偏移只读挂载镜像,核对目录结构与文件时间
  • 搭建可重复的分析环境,保证所有操作都能回退
  • 反复读取同一介质时,避免触发文件系统自检或自动修复
  • 交付前重新核验原始介质的只读状态与哈希

只读挂载

只读挂载
blockdev --getro /dev/sdb                       # 查询当前只读状态
blockdev --setro /dev/sdb                       # 块设备层禁写
fdisk -l /dev/sdb                               # 取分区起始扇区,换算成字节偏移
mount -o ro,loop,offset=$((2048*512)) disk.img /mnt/evidence   # 只读挂载镜像中的分区
mount -o ro,noexec,nodev,nosuid /dev/sdb1 /mnt/evidence2       # 只读挂载物理分区
mount | grep /mnt/evidence                      # 确认挂载参数已按只读生效

挂载选项读法

选项作用何时使用
ro只读挂载取证场景的默认选择
loop把镜像文件当作块设备挂载分析 dd 或其他工具导出的镜像
noexec禁止在该文件系统上执行程序防止误触发镜像中的样本
nodev忽略设备文件避免经由挂载点访问异常设备
nosuid忽略 setuid 与 setgid 位降低权限被意外提升的风险
E01 一类带校验的取证容器格式无法被 mount 直接识别,需先用专用工具转换成原始镜像或用工具映射为块设备,再按偏移只读挂载,转换产物要重新计算哈希并登记。
只读挂载不等于零写入:部分文件系统在挂载时会尝试重放日志或更新超级块,日志型文件系统尤其需要注意。处理这类镜像时优先使用取证专用挂载工具,必要时在副本上操作,并保留原始介质哈希以便事后比对。

易错点

  • 直接在原始介质上挂载分析,文件系统日志重放或后台写入改变了证据
  • 分区偏移算错,挂载到的是空区或错误文件系统,结论随之失真
  • 挂载前未对原始介质计算哈希,之后无法证明介质未被改动
  • 只指定 ro 不加 noexec,误执行镜像中的程序影响分析机环境

数据来源与参考

  • man 8 mount(util-linux)
  • man 8 blockdev(util-linux)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌