我能禁用全盘加密吗?

我最近安装了Ubuntu 12.10,它要求输入密码才能启动(我使用的是加密文件系统进行安装)。
我需要重新安装才能更改为标准的非加密文件系统吗?

你是把整个Ubuntu安装都加密了,还是只加密了你的个人目录? - Flimm
我在安装期间加密,所以我猜整个安装过程都被加密了。 - Zzealdor
3我是一个新用户,所以对Linux的运作方式不太确定(彻底受够了微软!) - Zzealdor
@Rinzwind 很可能不需要。这种方法(ecryptfs)对家目录进行加密,不需要额外的密码;使用登录密码即可。 - Jan
我在一台小型笔记本电脑上安装了Ubuntu 12.0,并进行了完全加密...然后我的系统变得非常非常慢...我已经重新安装了它,甚至使用最新版本,格式化了所有内容并取消了加密选项...但是我的系统仍然非常慢...我该如何解决这个问题? 之前我曾试用过Ubuntu而没有进行安装,效果还不错...我该如何让我的笔记本电脑恢复正常? - user163872
1@user163872:新的Ubuntu版本(12和13)在像净书这样的旧电脑上运行非常慢。 你应该安装Lubuntu,它专为速度而设计,在较旧/较慢的计算机上运行非常快,即使内存较低(例如512MB)。 Lubuntu与普通Ubuntu几乎相同 - 只是桌面/菜单稍有不同。但在普通Ubuntu上可用的所有功能在Lubuntu上也可以使用。 - lara
6个回答

如果Ubuntu在启动过程中(即在登录屏幕显示之前的文本控制台上)要求输入加密密码,这表示使用了全盘加密方法。(有多种方法可以实现这一点,但我将保持答案的通用性。)加密是由文件系统和物理硬盘之间的额外软件层处理的,而不是文件系统本身。
没有简单的方法或工具可以撤销这个操作。只有对Linux系统如何工作有一定了解的人才能完成。您需要将整个文件系统(或所有文件)移动到另一个分区(具有足够的可用空间)或外部硬盘驱动器上。然后,删除加密容器,并重新创建没有加密的文件系统。最后,在重新启动之前,请确保引导加载程序正确识别新的文件系统并执行“mount -a”。
如果可能的话,最好避免这个耗时且容易出错的过程。直接进行全新安装是对于新用户来说最快速且最安全的选择。
PS: 可能有机会更改加密密码,甚至可能更改为空字符串。然后,只需要按Enter键即可解密。也许您可以进一步抑制(现在无用的)密码提示。但是,这并不会禁用加密。数据仍将被加密,尽管加密是无效的,因为密钥可以轻易猜测出来。

4理论上,你不应该能够像这样做:“dd if=/dev/mapper/sda5_crypt of=/dev/sda5 bs=32M”吗? - Roy
2@Roy,我认为只有在以下条件成立的情况下,这个方法才能奏效:1. dd和底层驱动程序在读取每个块之前不会进行写入(可能有一些标志和设置来确保这一点);2. 读/写块不会重叠加密块的边界(可以进行检查,可能涉及一些数学计算);3. 在完成之前,不会覆盖解密所需的重要头部信息(检查底层加密格式,也许从末尾开始处理)。我认为这是可能的,但需要更仔细的设置和分析。 - fuzzyTew

以下是我解决问题的方法。请记住,我不是Linux专家,所以这可能不是最好的解决方案。无论如何,我找不到更好的方法。
将FDE安装迁移到未加密分区
注意:每当我说XXX时,我的意思是XXX
/dev/sda1 - boot partition
/dev/sda5 - encrypted partition
/dev/sda3 - clean non-encrypted EXT4 partition
/dev/sda2 - my newly created swap partition

从加密的根文件系统复制数据

从Live CD启动。我使用的是Ubuntu 13.10 32位桌面版ISO。

挂载您的分区:

sudo cryptsetup luksOpen /dev/sda5 crypt1

将源数据复制到目标分区并将dd PID保存到pid变量中。
sudo dd if=/dev/ubuntu-vg/root of=/dev/sda3 bs=1M & pid=$!

每秒钟使用USR1信号ping dd进程,并返回dd的状态结果。
while sudo kill -USR $pid; do sleep 1; done

监控 DD 的替代方法

如果你不喜欢上面的“while 方法”,你可以使用 watch。 打开不同的终端窗口并获取 PID:

pgrep -l '^dd$' | awk '{ print $1 }'

请用您的进程ID替换

watch kill -USR1 <pid>

你应该在每2秒钟的时间内在你的dd终端中看到输出。
配置新的根文件系统和分区
完成后,您可以挂载您的非加密分区以查看是否正常。
sudo mount /dev/sda3 /mnt

然后卸载您的分区:

sudo umount /dev/sda3

释放加密分区:
sudo cryptsetup luksClose /dev/sda5

运行gparted。 删除您的LUKS分区(扩展和逻辑都要删除)。 调整/ dev / sda3的大小并向左移动。 创建交换分区。
注意:将/ dev / sda3向左移动可能需要很长时间。对我来说,在120GB分区和SSD驱动器上花了30分钟。 如果您有500GB以上的HDD,请准备等待几个小时。 您可能希望在移动/ dev / sda3之前创建交换分区。
在交换分区上创建新的交换文件系统:
sudo mkswap /dev/sda2 

并将UUID存储在某个地方。

获取您的根分区UUID:

sudo blkid /dev/sda3

编辑 fstab 文件:
sudo nano /etc/fstab

删除或注释掉overlayfs和tmpfs行。

添加行以使用blkid结果替换 :

UUID=<uuid_root> /  ext4 errors=remount-ro 0 1
UUID=<uuid_swap> none swap sw 0 0

删除文件:
rm /etc/crypttab

更新您的initramfs以避免出现“cryptsetup:evms_activate不可用”等错误:

sudo -i
mount /dev/sda3 /mnt
mount -t proc none /mnt/proc
mount -o bind /sys /mnt/sys
mount -o bind /dev /mnt/dev
mount /dev/sda1 /mnt/boot
chroot /mnt /bin/bash
apt-get remove --purge cryptsetup
update-initramfs -u -k all

最后的注意事项和故障排除

这个方法对我有效,但是按照上述步骤可能不一定适用于你。 在我找到update-initramfs方法之前,我曾多次重新安装内核并修改grub。 但是对于你来说应该不会出现这种情况。 请记住,上述指令可能会删除你的数据,所以在进行操作之前要小心并备份。

如果你遇到内核问题(chrooted和/boot已挂载):

uname -r
sudo apt-get install --reinstall linux-image-3.X.Y-ZZ-generic

当然,将linux-image-3.X.Y-ZZ替换为您的内核日期(来自uname)。
或者GRUB(在chroot之外):
sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
sudo apt-get install -y boot-repair && (boot-repair &)

更多细节:https://help.ubuntu.com/community/Boot-Repair 祝好运

1我相信你需要手动替换/etc/initramfs-tools/conf.d/resume中交换分区的UUID,并且我建议使用cp -arsync -a来复制文件系统内容,因为这样通常更快且对SSD更安全。 - LiveWireBT
谢谢你让我的解释更加用户友好。我没有进行简历修改,也不敢使用cp或rsync,我以为dd(从设备到设备的原始复制)是处理这类任务的合适工具。我在虚拟机上进行了操作,但镜像被放在SSD上。你能详细解释一下“对SSD更安全”是什么意思吗? - NeverEndingQueue
使用dd命令会复制整个分区,甚至包括应该为空的块,这会导致对SSD进行不必要的写入(在某些情况下,甚至会降低性能,因为几乎所有单元都被写入)。几年前,我和其他一些人也发现,使用dd命令复制并激活TRIM(EXT4丢弃选项)会导致TRIM删除它认为是空的块,并在几个小时后留下一个损坏的安装。 - LiveWireBT
在第一种监控方法中,应该使用USR1而不是USR。我知道这很明显,但对于像我这样的新手来说可能会有问题 ;) - goodfellow

如果保留加密但关闭密码提示是可以的话,一个更简单的方法是设置一个简单的密码,比如"password",然后将这个简单密码以明文的形式保存在initramfs中。禁用LUKS加密密码
基本上,添加一个钩子脚本,然后在initramfs中添加一个"keyscript"。通常这些脚本用于通过蓝牙、USB存储设备等获取密码,但在这种情况下,只需让它打印出简单的密码即可。

实际上,很容易在原地解密分区而不费多大努力。例如,请参考这里的说明,对于Ubuntu和Arch来说通常同样适用。在我的情况下,我有一个LUKS1设备,显然这使事情变得更容易。我所需要做的只是:

  1. 使用USB启动到一个Live环境中。我使用的是Ubuntu 18.04。
  2. 运行sudo cryptsetup-reencrypt --decrypt <device_path>

就是这样。对于一个250GB的SSD,花了20分钟。我不需要对/etc/fstab、grub或initramfs做任何特殊处理。我在/etc/crypttab中注释掉了相关(唯一)的一行,但我甚至认为那都不是必要的。

话虽如此,我有一台带有500GB SSD的第二台机器,在大约3个小时后,它仍然声称还需要另外90分钟,并且速度越来越慢,所以我放弃了,只是重新刷写了驱动器。

在做任何事情之前,我建议先备份(解密的)分区。使用dd 如另一个答案中所描述的非常好。我是在分区挂载后,在重新启动到live USB环境之前进行的备份。这对于我最终重新刷写的分区非常有用,因为我能够重新挂载备份并复制我非常关心的内容。

真的很好。进度:8.7%,预计完成时间11:21,已写入19756 MiB,速度为302.6 MiB/s。 - Tomachi

@pattivacek的简短回答对我很有效。 想要摆脱起始屏幕上的“输入密码”部分 - 我只需添加

apt purge cryptsetup

之后。


只需格式化加密的磁盘并运行Disk Drill,这就是我所做的。我只是将它插入我的Windows笔记本电脑的SATA插槽中,在格式化后不要向其写入任何内容,使用Disk Drill,然后,一个Lubuntu加密卷就完全打开了,可以恢复我的文件。

你能详细解释一下吗?什么是Disk Drill?我猜你只能在Windows上使用它,对吗? - Zanna