移除系统加密
使用 dm-crypt 和 LUKS 移除系统加密。
原地移除 LUKS 加密
概述
虽然不如将数据备份并还原到重新格式化的设备上那样安全,但 cryptsetup 允许用户原地永久移除设备的 LUKS 加密。例如,如果您在一个 LUKS 加密分区中运行 ext4 文件系统,执行原地解密将移除 LUKS 签名,并将 ext4 文件系统直接置于分区上,从而使其可以直接挂载。除非出现意外,否则文件系统中的文件将保持完好。cryptsetup 文档将此操作称为“解密 (decryption)”。
请参阅 cryptsetup-reencrypt(8) 手册中的 --decrypt 选项。
自 2012 年发布的 cryptsetup 1.5.0 版本起,便支持对 LUKS1 设备进行非破坏性的离线解密。LUKS1 解密仅支持离线模式。
对于 LUKS2 设备,支持离线和在线(即不需要卸载)解密。
原地解密 LUKS1 设备
LUKS1 设备的解密在离线模式下进行,也就是说,它必须未被打开且未被挂载。如果您要解密系统盘,请重启进入 USB Live 环境。否则,请使用 unmount 然后执行 cryptsetup close dm-name。
首先,使用 blkid 或 lsblk 确定 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。
清理系统文件
由于解密,设备名称和 UUID 可能会发生变化,您可能需要更新相关的配置文件。最可能需要更新的文件包括 /etc/crypttab、/etc/fstab,以及(如果最近解密的设备出现在内核命令行中)您的 启动加载程序 (boot loader) 配置,例如 /etc/default/grub。如果您编辑了后者,请记得按照 GRUB 中的说明重新生成 grub 配置。
通过“备份-格式化-还原”移除 LUKS
前提条件
- 一个您希望解密的加密根文件系统。
- 足够的驱动器空间用于存储备份。
- 一个 Arch Linux(或其他)Live CD/USB。
- 几个小时的时间。
启动至 Live 环境
下载最新的 Arch ISO 并刻录到 CD 或 USB 中,重启系统并从 CD 启动。
激活分区
关于不同配置的说明
此处显示一个示例配置
| NTFS | myvg(lvm) | NTFS | |
| 其他 OS | cryptswap(lv) | cryptroot(lv) | 共享 |
| luks | luks | ||
| swap | root(xfs) | ||
灰色分区是参考框架,可以忽略。黄色分区将用作存储空间,可根据需要更改。绿色分区将被修改。粗体文本必须与您的系统配置相匹配。
在示例系统中:myvg 包含名为 cryptroot 和 cryptswap 的 lv。它们位于 /dev/myvg/cryptroot 和 /dev/myvg/cryptswap。启动时,LUKS 与几个 crypttab 条目一起创建 /dev/mapper/root 和 /dev/mapper/swap。
本指南不会对 Swap 进行解密,因为撤销 Swap 加密不需要任何复杂的备份或还原操作。
示例系统并不代表所有系统。不同的文件系统需要不同的工具来有效地备份和还原数据。如果不使用 LVM,可以忽略 LVM 相关步骤。
定位分区后
加载必要的模块。对于设备映射器/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 将备份存储在远程系统上。
备份数据
使用 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。