当我安装操作系统时,我没有加密。现在有没有一种方法可以在不格式化且不丢失任何数据的情况下对其进行加密?我读了一些如何加密的指南,每个指南都说我需要备份所有数据,因为我会丢失它。现在有没有一种方法可以将其全部加密而不丢失数据?
答案1
是的,有办法。 LUKScryptsetup
实用程序包含重新加密命令您还可以使用它来加密现有的未加密根分区,即不破坏现有的文件系统。
也就是说,在执行此类转换之前,您仍然应该备份数据。当然,由于可能存在硬件故障等,人们应该始终定期执行备份。因此,这是一种多余的建议。
将现有根文件系统从未加密切换为加密需要执行几个步骤:
- 备份
- 确保已安装 cryptsetup 软件包
- 确保您的根文件系统有一些可用空间(为了安全起见,至少 100 MiB)
- 识别根分区所在的分区:例如使用
df /
,查找文件系统的 UUIDblkid
并将其存储在某处 - 启动进入救援系统,您可以在其中卸载根文件系统(例如,从包含 - 比如说 -格米尔)
- 找到您的根分区(例如使用
blkid
并查找 UUID) - 如果是 ext4 则执行文件系统检查:
e2fsck -f /dev/sdXY
- 缩小文件系统以为 LUKS 标头腾出一些空间,例如,如果它是 ext4 文件系统:(
resize2fs /dev/sdXY $smallersizeinGiB_G
您需要将其缩小至少 32 MiB) - 加密它:
cryptsetup reencrypt --encrypt /dev/sdXY --reduce-device-size 32M
- 打开它:
cryptsetup open /dev/sdXY root
- 将文件系统扩大到最大:
resize2fs /dev/mapper/root
- 将其安装到 - 说 -
/mnt/root
- 在 上挂载启动文件系统,并在下
/mnt/root
绑定挂载伪文件系统。/dev
/sys
/proc
/mnt/root
- 通过以下方式 chroot 进入您的系统:
chroot /mnt/root /bin/bash
- 更新内核参数
/etc/default/grub
或某个等效位置,例如,当您的发行版使用 dracut(很可能)时,您需要添加rd.luks.uuid=$UUID_OF_LUKS_DEVICE
(参见blkid
,请注意此 UUID 与根文件系统不同),如果您安装了 selinux,则应该添加enforcing=0
(然后删除它)因为所有的编辑 - 如果您的发行版启用了 selinux,请配置重新标记:
touch /mnt/root/.autorelabel
- 重新生成 grub 配置:
grub2-mkconfig -o /boot/.../grub...cfg
- 重新生成 initramfs(以确保包含 cryptsetup 支持):
dracut -f /boot/initramfs....img kernelversion
- 退出 chroot
- 卸载所有东西
cryptsetup close root
- 重启
正如您所看到的,这些步骤很多,即有可能引入错误。因此,可以说重新安装和恢复备份(例如配置文件和)可能更简单$HOME
。
另外,根据我截至 2020 年的经验,速度相对较慢,因此仅恢复设备并恢复备份cryptsetup reencrypt
可能会更快。cryptsetup luksFormat
如果您有 XFS 文件系统,则不能只是缩小它,因为截至 2020 年,XFS 不支持此功能。因此,您需要先缩小fstransform
它,然后才能缩小它。对于转换后的文件系统,您需要处理另一个 uuid。这意味着要么将新文件系统的 UUID 更改为旧文件系统的 UUID。或者更新 中文件系统的 UUID /mnt/root/etc/fstab
。
对于基于 dracut 的发行版,您不需要创建/etc/crypttab
,其他发行版可能需要它(也在 initramfs 更新之前,因为它可能需要包含在其中)。
答案2
来自 LUKS 常见问题解答https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions#2-setup
2.5 我可以加密一个已经存在的非空分区来使用 LUKS 吗?
没有转换器,也不是真正需要的。执行此操作的方法
是对有问题的设备进行备份,安全擦除设备(因为 LUKS 设备初始化不会清除旧数据),
执行 luksFormat,可选择覆盖加密设备,创建
新文件系统并恢复您的在现在加密的设备上进行备份。
另请参阅“安全方面”和“备份和数据
恢复”部分。对于备份,普通的 GNU tar 效果很好,可以备份文件系统中可能存在的任何内容。*
然而你可能想调查一下https://johndoe31415.github.io/luksipc/usage.html#plain-to-luks-conversion“Plain 到 LUKS 转换”可以满足您的要求。免责声明:我从未尝试过这个,我不知道它是否有效,而且该项目自 2015 年以来似乎没有更新过。