校验与回滚
目标
验证导入内容的完整性,检测篡改,锁定版本,并实际执行 rollback。
为什么重要
在隔离网络中,**不要进行没有 rollback 路径的变更。**如果删除了某项内容,重新获取它就要再次经过导入审批,而这可能耗费数天。因此,操作流程的一半在于“记录改了什么,并预先确定如何恢复”。
此外,验证必须按层依次进行。如果只做最终检查,一旦失败,就无法知道哪一层出现问题。按照 kernel → user space → container injection → actual execution 的顺序逐层向上检查,失败的位置本身就是原因所在。
步骤
- 为
/root/gpu/pool中所有.deb创建 SHA-256 manifest/root/gpu/manifest.sha256,执行验证,并将结果保存到/root/gpu/verify-ok.txt。所有行都必须正常。 - 创建
/root/gpu/tamper/目录,复制一个.deb后篡改副本,确认对该副本的验证失败,并将输出保存到/root/gpu/verify-fail.txt。原始 pool 必须保持不变。 - 检查已安装的
nvidia-container-toolkit文件完整性,并将结果保存到/root/gpu/dpkg-verify.txt。 - 按以下 4 行创建
/root/gpu/verify-plan.txt。这是在有真实 GPU 的环境中的验证顺序。L1=lsmod/L2=nvidia-smi/L3=nvidia-ctk/L4=podman-run - 将
nvidia-driver-550和nvidia-container-toolkit排除在升级对象之外,并把 hold 列表保存到/root/gpu/holds.txt。必须同时显示两个包。 - 从 apt 的安装事务记录中,将与本次安装有关的部分保存到
/root/gpu/history.txt。其中必须包含nvidia字符串。 - 连同配置文件一起完全删除(rollback)
nvidia-container-toolkit,并将删除后的状态保存到/root/gpu/after-rollback.txt。该包不得处于已安装状态,而nvidia-driver-550必须仍处于已安装状态。 - 按以下 6 行创建
/root/gpu/final-report.txt。BUNDLE_VERIFY=OK/TAMPER_DETECTED=yes/HELD=2/DRIVER_STILL=installed/TOOLKIT_NOW=removed/SNAPSHOT=<오늘 날짜 YYYY-MM-DD>
参考
- manifest 可以采用
cd /root/gpu/pool && sha256sum *.deb > ../manifest.sha256的形式创建;验证也在同一目录中执行sha256sum -c ../manifest.sha256。 - 可以像
printf 'x' >> <사본>那样追加字节来实施篡改。 - 文件完整性检查命令为
dpkg -V <패키지>。没有输出即表示正常。 - 取消 hold 的命令为
apt-mark unhold <패키지>,第 7 步之前可能需要执行。 - 常见错误 1:第 2 步篡改 pool 内的原始文件,导致后续所有步骤都失败。
- 常见错误 2:第 7 步只使用
remove,配置文件会残留,状态变为rc。必须完全删除。
创建完整性 manifest
为 /root/gpu/pool 中所有 .deb 创建 SHA-256 manifest /root/gpu/manifest.sha256,执行验证,并将结果保存到 /root/gpu/verify-ok.txt。所有行都必须正常。
为 pool 中所有 .deb 生成 checksum。为便于验证,请使用相对路径。
复现篡改检测
创建 /root/gpu/tamper/ 目录,复制一个 .deb 后篡改副本,确认对该副本的验证失败,并将输出保存到 /root/gpu/verify-fail.txt。原始 pool 必须保持不变。
请篡改副本,而不是原始文件。原样保存验证命令的失败输出。
检查已安装文件的完整性
检查已安装的 nvidia-container-toolkit 文件完整性,并将结果保存到 /root/gpu/dpkg-verify.txt。
dpkg 提供了比较安装时哈希与当前文件的选项。没有输出即表示正常。
验证计划文档
按以下 4 行创建 /root/gpu/verify-plan.txt。这是在有真实 GPU 的环境中的验证顺序。
L1=lsmod / L2=nvidia-smi / L3=nvidia-ctk / L4=podman-run
按顺序列出各层。以键=值形式写明每一层要检查的内容。
锁定版本
将 nvidia-driver-550 和 nvidia-container-toolkit 排除在升级对象之外,并把 hold 列表保存到 /root/gpu/holds.txt。必须同时显示两个包。
同时 hold 驱动和 toolkit,并查询 hold 列表进行确认。
检查安装事务
从 apt 的安装事务记录中,将与本次安装有关的部分保存到 /root/gpu/history.txt。其中必须包含 nvidia 字符串。
apt 的 history log 会记录每次事务的时间和命令行。
执行 rollback
连同配置文件一起完全删除(rollback)nvidia-container-toolkit,并将删除后的状态保存到 /root/gpu/after-rollback.txt。该包不得处于已安装状态,而 nvidia-driver-550 必须仍处于已安装状态。
只回滚 toolkit。使用连同配置文件一起删除的选项;如果设置了 hold,必须先取消。
导入、安装、验证与 rollback 报告
按以下 6 行创建 /root/gpu/final-report.txt。
BUNDLE_VERIFY=OK / TAMPER_DETECTED=yes / HELD=2 / DRIVER_STILL=installed / TOOLKIT_NOW=removed / SNAPSHOT=<오늘 날짜 YYYY-MM-DD>
汇总整个过程的结果。各值必须来自实际检查。