移除系统加密

来自 ArchWiki

此条目或章节需要语言、wiki 语法或风格方面的改进。请参阅 Help:Style 以获取参考。

理由: 以第一人称书写,以及其他风格问题。(在 Talk:Removing system encryption 中讨论)

使用 dm-crypt 和 LUKS 移除系统加密。

原位移除 LUKS 加密

概述

虽然不如备份数据并将其恢复到重新格式化的设备上安全,但 cryptsetup 允许用户永久地从设备上原位移除 LUKS 加密。例如,如果您的 LUKS 加密分区内存在 ext4 文件系统,执行原位解密将移除 LUKS 签名,并将 ext4 文件系统直接放在分区上,以便您可以直接挂载它。除非出现问题,否则文件系统中的文件将保持完整。 cryptsetup 文档中使用的术语是“解密”。

请参阅 cryptsetup-reencrypt(8) 手册中 --decrypt 选项。

从 2012 年发布的 cryptsetup 1.5.0 版本开始,就已支持 LUKS1 设备的非破坏性离线解密。LUKS1 解密仅支持离线模式解密。

对于 LUKS2 设备,同时支持离线和在线(即无需卸载)解密。

警告: 以下步骤本质上是危险的,可能会导致灾难性的数据丢失。在继续之前,您应始终备份驱动器和 LUKS 标头,以保护您的数据免受解密过程中意外情况的影响。

原位解密 LUKS1 设备

LUKS1 设备的解密是在离线模式下完成的,即它不能被打开和挂载。如果要解密系统盘,请重启进入 USB Live 环境。否则,请使用 unmount 命令,然后使用 cryptsetup close dm-name 命令。

首先,使用 blkidlsblk 识别 device_path

接下来,以下命令执行解密

# cryptsetup reencrypt --decrypt device_path
Enter any existing passphrase: 
Finished, time 02m05s,   19 GiB written, speed 162,6 MiB/s

它将自动识别 LUKS1 标头版本,并且不会对已打开的设备执行操作。此过程可能需要一段时间,但会提供进度条。如果未发生问题,则可以立即直接挂载设备上的文件系统。

原位解密 LUKS2 设备

可以使用 cryptsetup 命令以离线或在线模式进行解密。自 cryptsetup 2.5.0 版本(2022 年)以来,LUKS2 支持通过将 LUKS2 标头迁移到单独的文件中进行解密。

new_file(LUKS2 标头将迁移到的文件)在解密的初始化阶段不能存在。

# cryptsetup reencrypt --decrypt --header new_file device_path
警告: 导出的标头必须放置在将要进行原位解密的设备上托管的文件系统之外。否则可能会发生死锁,或者在解密过程被中断的情况下,将无法恢复解密。

要恢复中断的 LUKS2 原位解密,只需执行以下命令

# cryptsetup reencrypt --decrypt --resume-only --header migrated_header_file device_path

如果在活动设备上成功完成解密(在线解密),则映射设备将被延迟停用,以便在线性映射不再使用时自动移除。之后,原始的 device_path 可以直接使用,而无需设备映射器映射。

注意: 使用迁移到文件的标头中断的 LUKS2 解密设备无法使用 cryptsetup 版本 < 2.5.0 恢复。

清理系统文件

设备名称和 UUID 可能会因解密而更改,您可能需要更新相关的配置文件。最可能需要更新的文件是 /etc/crypttab/etc/fstab 以及,如果最近解密的设备出现在内核命令行中,则还需要更新引导加载程序的配置(例如,/etc/default/grub)。如果您编辑后者,请记住按照 GRUB 中的描述重新生成 grub 配置。

通过备份-格式化-恢复移除 LUKS

前提条件

  • 您希望解密的加密根文件系统。
  • 足够的驱动器空间来存储备份。
  • Arch Linux(或其他)Live CD/USB。
  • 几个小时。

启动进入 Live 环境

下载最新的 Arch ISO 并刻录到 CD 或 USB,重启系统,并从 CD 启动。

激活分区

此条目或章节需要语言、wiki 语法或风格方面的改进。请参阅 Help:Style 以获取参考。

理由: 难以阅读,写得像博客文章,遗漏了一些提示。(在 Talk:Removing system encryption 中讨论)

关于不同设置的说明

此处显示了一个示例设置

磁盘
NTFS myvg(lvm) NTFS
其他操作系统 cryptswap(lv) cryptroot(lv) 共享
luks luks
swap root(xfs)

灰色分区是一个参考框架,可以忽略。黄色分区将用作存储空间,可以随意更改。绿色分区将被修改。粗体文本必须与您的系统设置相匹配

在示例系统中:myvg 包含名为 cryptrootcryptswap 的 lvs。它们位于 /dev/myvg/cryptroot/dev/myvg/cryptswap。启动时,LUKS 与一些 crypttab 条目一起使用,以创建 /dev/mapper/root/dev/mapper/swap

作为本指南的一部分,Swap 分区将不会被解密,因为撤销 swap 加密不需要任何复杂的备份或恢复。

示例系统并不代表所有系统。不同的文件系统需要不同的工具来有效地备份和恢复其数据。如果未使用 LVM,则可以忽略 LVM。

注意: XFS 需要 xfs_copy 以确保有效的备份和恢复,dd 是不够的。dd 可以与 ext2、3 和 4 一起使用。

此条目或章节需要扩充。

理由: jfs 呢?(在 Talk:Removing system encryption 中讨论)

一旦分区被定位

加载必要的模块。对于设备映射器/LVM

# modprobe dm-mod 

对于 LUKS

# modprobe dm-crypt

扫描物理卷、卷组和逻辑卷

# pvscan; vgscan; lvscan

激活 LVM 卷组

# lvchange -ay myvg/cryptroot

使用 LUKS 打开加密的文件系统,以便可以读取

# cryptsetup luksOpen /dev/myvg/cryptroot root

输入密码。

注意: 此时唯一应该挂载的分区是备份分区。如果备份分区以外的分区已挂载,则现在可以安全地卸载它。
挂载备份空间

仅当使用 NTFS 存储备份时,才需要安装 ntfs-3g

下一步对于备份存储非常重要。

# mount -t ntfs-3g -o rw /dev/sdXY /mount/point/

或者使用 netcat 将备份存储在远程系统上。

此条目或章节需要扩充。

理由: 添加 netcat 说明。(在 Talk:Removing system encryption 中讨论)

备份数据

使用 xfs_copy

# xfs_copy -db /dev/mapper/root /mount/point/backup_root.img
注意: -d 标志保留 UUID,-b 确保不会尝试对任何目标文件进行直接 IO。

使用 dd

# dd if=/dev/mapper/root of=/mount/point/backup_root.img

取消加密

这是不归路。请确保您已为此步骤做好准备。如果您计划稍后撤销此操作,您将几乎必须从头开始。

# cryptsetup luksClose root
# lvm lvremove myvg/cryptroot

恢复数据

我们必须创建一个新的逻辑卷来容纳我们的根文件系统,然后我们恢复我们的文件系统。

# lvm lvcreate -l 100%FREE -n root myvg
# xfs_copy -db /mount/point/backup_root.img /dev/myvg/root

第二个驱动器名称现在已更改。

调整配置

您需要启动进入您的系统并编辑 /etc/crypttab/etc/mkinitcpio.conf/etc/fstab,以及可能的 /boot/grub/menu.lst