跳转至内容

移除系统加密

来自 ArchWiki

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:原文使用第一人称,且存在其他风格问题。(在 Talk:Removing system encryption 中讨论)

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

原地移除 LUKS 加密

概述

虽然不如将数据备份并还原到重新格式化的设备上那样安全,但 cryptsetup 允许用户原地永久移除设备的 LUKS 加密。例如,如果您在一个 LUKS 加密分区中运行 ext4 文件系统,执行原地解密将移除 LUKS 签名,并将 ext4 文件系统直接置于分区上,从而使其可以直接挂载。除非出现意外,否则文件系统中的文件将保持完好。cryptsetup 文档将此操作称为“解密 (decryption)”。

请参阅 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 标头迁移到单独文件中来进行解密。

在解密初始化阶段,用于迁移 LUKS2 标头的 new_file(新文件)必须不存在。

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

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

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

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

注意 使用文件迁移标头但解密中断的 LUKS2 设备,无法使用 2.5.0 之前的 cryptsetup 版本恢复。

清理系统文件

由于解密,设备名称和 UUID 可能会发生变化,您可能需要更新相关的配置文件。最可能需要更新的文件包括 /etc/crypttab/etc/fstab,以及(如果最近解密的设备出现在内核命令行中)您的 启动加载程序 (boot loader) 配置,例如 /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
其他 OS cryptswap(lv) cryptroot(lv) 共享
luks luks
swap root(xfs)

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

在示例系统中:myvg 包含名为 cryptrootcryptswap 的 lv。它们位于 /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

输入密码。

注意 此时唯一应该被挂载的操作分区是备份分区。如果除了备份分区以外的其他分区已经挂载,现在可以安全地将其卸载 (umount)。
挂载备份空间

仅在调用 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

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.