如何预设加密只有根分区?

我有3个分区:EFI(/boot/efi),引导(/boot)和根目录(/)。我只想加密根目录/)。我可以通过安装程序手动完成这个操作,但我想要预设它。
如何定义它?我的(非加密的)配置看起来像下面这样。这是我在寻找EFI系统分区建议时找到的一些混合建议(没有找到清晰的指南)。
boot-root ::
  100 100 100 fat32
    $primary
    $iflabel{ gpt }
    $reusemethod( }
    use_filesystem{ } filesystem{ vfat }
    method{ efi } format{ }
    mountpoint{ /boot/efi }
  .
  300 300 300 ext4
    use_filesystem{ } filesystem{ ext4 }
    method{ format } format{ }
    mountpoint{ /boot }
  .
  100% 3000 100% ext4
    use_filesystem{ } filesystem{ ext4 }
    method{ format } format{ }
    mountpoint{ / }
  .

如何将`sda3`设置为LUKS加密的物理分区,并在其上创建文件系统?
更新:
我发现可以通过以下方式将分区设置为加密,但仍存在三个问题:
1. 我仍然需要在选择的分区上创建和激活加密卷。 2. 在创建和激活后,我仍然需要设置正确的ext4文件系统。 3. 这个方法没有选择所需的加密类型`dm-crypt`来创建和激活加密卷。
仍然在努力解决问题。
boot-root ::
  100 100 100 fat32
    $primary
    $iflabel{ gpt }
    $reusemethod( }
    use_filesystem{ } filesystem{ vfat }
    method{ efi } format{ }
    mountpoint{ /boot/efi }
  .
  300 300 300 ext4
    use_filesystem{ } filesystem{ ext4 }
    method{ format } format{ }
    mountpoint{ /boot }
  .
  100% 3000 100% ext4
    method{ crypto } format{ }
  .

顺便说一下,像sdasdbsdc等这样的标签在每次启动时并不总是保持相同的字母(我的每次启动都会变化)。 - Xen2050
2@Xen2050,你说得对,UUIDPARTUUIDLABEL或者PARTLABEL都是更好的选择。在我的情况下,我正在启动一个镜像进行格式化,所以只有一个驱动器。无论哪种方式,我该如何设置加密单个分区?我可以通过交互方式来完成,但我需要预设它。 - deitch
嗯,也许有所进展,但还有更多问题。将会发布其他问题。 - deitch
@deitch - 这是服务器分区配置、客户端还是仅仅是一个桌面分区示例?这三个分区对您的意图来说太少了 - 缺少/swap和/home - 所以您必须以某种方式设置硬盘的扩展部分,带有逻辑分区 - 通常分区只允许4个,但扩展与逻辑分区最多允许4倍63个分区(而GPT允许更多)?!- 关于主分区和从分区,请参考:http://unix.stackexchange.com/questions/33555/what-is-the-max-partition-supported-in-linux - dschinn1001
@dschinn1001实际上,这是一个用于安全服务器的模板。核心操作系统位于可移动驱动器上。用户数据和交换空间位于内部驱动器上,由一个systemd服务找到并适当地挂载。但是忽略这一点...我如何在没有LVM的情况下设置根目录加密? - deitch
1个回答

首先,打开一个根终端:
sudo -i

然后,使用类似以下命令的方式,填充应该加密的分区,以随机数据进行加密:
openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sdxy

你需要将sdxy替换为将要加密的分区。然后输入
cryptsetup luksFormat --cipher twofish-xts-plain64 --key-size 512 --hash sha512 --iter-time 2000 /dev/sdxy

加密分区 sdxy。打开卷并将其命名为 root:
cryptsetup luksOpen /dev/sdxy root

使用以下命令在其中创建一个ext4文件系统:
mkfs.ext4 /dev/mapper/root

接下来,您可以开始安装程序。当被询问您想要做什么时,请选择“其他选项”。然后选择所有未加密分区的挂载点。对于您的root分区,请选择/dev/mapper/root,点击“更改”。然后选择ext4作为文件系统类型,并将挂载点设置为/。然后点击“立即安装”并正常安装Ubuntu。
安装完成后,点击“继续测试”。打开终端并输入:
sudo -i
cd /mnt
mkdir root
mount /dev/mapper/root root
mount /dev/sdyz root/boot

sdyz 应该替换为您的 boot 分区。接下来,输入:

chroot root
mount -t proc proc /proc
mount -t sysfs sys /sys
nano /etc/crypttab

打开第二个终端并输入sudo blkid。找到root的UUID(最后一个说crypto_luks的)并将其粘贴到/etc/crypttab中。然后,/etc/crypttab文件应该看起来像这样:
root UUID=d68911dd-172a-4608-86d4-084eb72f409c none luks

关闭文件使用Ctrl+xyEnter。在终端中输入nano /etc/fstab并检查是否一切正常(例如UUID)。
最后,退出chroot环境并键入:
cryptsetup luksHeaderBackup /dev/sdxy --header-backup-file /root/root.img

这将把加密分区的头部图像放入文件夹/root并命名为root.img。然后将图像移动到外部驱动器(以防忘记密码)。现在您可以重新启动进入新安装的Ubuntu系统。
来源:http://thesimplecomputer.info/full-disk-encryption-with-ubuntu

欢迎来到Ask Ubuntu!虽然这理论上可以回答问题,但最好在这里包含答案的关键部分,并提供链接作为参考。 - Kalle Richter
@Earl,你建议在chroot(或容器化)环境中预先构建分区,然后将其放入安装程序中? - deitch
我该如何在播种机上操作这个? - deitch
我不知道,但至少这是一个不使用LVM的解决方案,可以创建一个LUKS加密的root分区。 - Earl Nick