AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1129672
Accepted
Joel Purra
Joel Purra
Asked: 2019-03-30 04:14:01 +0800 CST2019-03-30 04:14:01 +0800 CST 2019-03-30 04:14:01 +0800 CST

如何使用单独的分区加密和 UEFI/安全启动运行多个 Ubuntu 18.x?

  • 772

为了在不投资多台计算机的情况下明确区分不同任务(工作、开源编程、游戏)的关注点,我更喜欢在单独加密的分区上安装并行操作系统。

愿望清单,目标:

  • 使用带有单个硬盘驱动器的单台机器。
  • 将UEFI与安全启动一起使用。
  • 并行安装多个高度分离的 Linux 实例。
    • 单独加密的分区以确保不会(轻松)访问其他实例的磁盘。
    • 保留自己的软件、设置和主文件夹。
    • 目前Ubuntu 18.x 桌面。
    • 可能是其他发行版,但这里没有涉及。
  • 安装一个 Windows 实例。
    • 不是主要焦点。
    • 目前是Windows 10。
  • 可选择使用其他分区或磁盘进行一般(共享)存储。
    • 这里不涉及。
encryption dual-boot uefi luks refind
  • 1 1 个回答
  • 1291 Views

1 个回答

  • Voted
  1. Best Answer
    Joel Purra
    2019-03-30T04:14:01+08:002019-03-30T04:14:01+08:00

    使用以下步骤在一台机器上设置三个独立的 Ubuntu 系统。效果很好!

    想法

    • 在 UEFI/安全启动期间使用refind而不是管理系统选择。grub
    • 不要为/boot每个 Linux 实例使用单独的分区。让我们直接从EFI 系统分区 (ESP)refind引导内核。
    • 从 Ubuntu 安装程序设置Linux 统一密钥设置 (LUKS) 。
    • 请注意,当前的解决方案不加密内核文件,因为refind.

    概述

    • 显然,事先为任何有价值的数据创建多个备份。更改引导程序、格式化磁盘、启用加密等可能是危险的,需要小心。
    • 首先安装 Windows。
      • 似乎是一般性建议,但对 UEFI 的影响较小。
      • 它将准备 GPT 和 ESP,这也可以使用Ubuntu USB/DVD 中的GNOME 分区编辑器手动完成。
      • Windows 安装程序创建的 ESP 可能不够大,具体取决于 Ubuntu 实例的数量和内核大小。512 MB 似乎足以容纳 2 个 Ubuntu 实例,但 1 GB 会更安全并允许更多实例。
    • 安装refind并确保它使用安全启动启动。
    • 对于每个所需的 Ubuntu 系统实例:
      • 从 USB 或 DVD 运行默认的 Ubuntu 安装程序。
      • 选择“其他”选项以手动设置加密并选择分区。
      • 安装后不要重新启动,而是继续设置refind启动过程。
    • 随着时间的推移,如果有内核或驱动程序更新,请执行维护任务。

    按实例安装

    假设GUID 分区表 (GPT)和 ESP 已由 Windows 安装程序设置,并且 Ubuntu 实例有额外的分区或空磁盘空间。

    分区路径和名称

    为了保持一致性,我将在下面使用此分区路径命名。您的系统上的路径会有所不同,并且会因实例而异,因此请注意。

    • /dev/nvme0n1p11是你的ESP。
    • /dev/nvme0n1p22是你的临时/boot分区。
    • /dev/nvme0n1p33是您的每个实例的“加密物理卷”(锁定)根/分区。
    • /dev/mapper/nvme0n1p33_crypt是您的(解锁的)根/分区。

    分区并安装一个新的(额外的)Ubuntu 实例

    1. 在 USB 或 DVD 上获取 Ubuntu,选择“试用 Ubuntu”启动它。
    2. 打开终端以更新并启动安装程序。
      sudo apt update && sudo apt dist-upgrade -y
      ubiquity --no-bootloader
      
    3. 当询问安装类型(与其他操作系统共存)和磁盘格式化/分区时,选择“其他”以查看磁盘和分区列表。
    4. efi找到类型为 ESP 的分区。
      • 在我的系统上,这是/dev/nvme0n1p11.
      • 记下分区路径名称,因为您将在下面需要它。
      • 在继续之前检查它是否至少有 200 MB 可用空间,因为新实例内核需要它。
    5. 选择或创建引导分区。
      • 在我的系统上,这是/dev/nvme0n1p22.
      • 记下引导分区路径名,因为您将在下面需要它。
      • 将重复用于后续的 Ubuntu 实例安装。
      • 创建或选择一个小(最大 512 MB)分区。
      • 擦除/格式化为 EXT4。
      • 单击“更改”并将其安装为/boot.
    6. 为 Ubuntu 选择或创建根分区。
      • 在我的系统上,这是/dev/nvme0n1p33.
      • 记下根分区路径名,因为您将在下面需要它。
      • 它将被删除。
      • 最少 5 GB,完整安装 25+ GB。
      • 单击“更改”,使其成为“加密物理卷”。
      • 选择与其他实例不同的密码。
    7. 找到以 结尾的新的未锁定分区_crypt。
      • 在我的系统上,这是/dev/mapper/nvme0n1p33_crypt.
      • 将挂载点更改为 root /。
    8. 让安装程序完成,但最后不要通过选择“继续测试”重新启动。

    refind为新实例设置。

    1. 进入chroot新操作系统进行更多更改。

      # NOTE: create temporary mount directories.
      sudo mkdir /mnt/bootpartition /mnt/ospartition
      
      # NOTE: Mount the newly created encrypted partition.
      sudo mount -o subvol=@ /dev/mapper/nvme0n1p33_crypt /mnt/ospartition
      sudo mount /dev/nvme0n1p22 /mnt/bootpartition
      
      # NOTE: Copy the boot files into the encrypted partition.
      # NOTE: Watch those trailing slashes! rsync is very sensitive to them.
      sudo rsync -aXAH /mnt/bootpartition/ /mnt/ospartition/boot/
      
      sudo mount /dev/nvme0n1p11 /mnt/ospartition/boot/efi
      sudo mount --bind /dev /mnt/ospartition/dev
      sudo mount --bind /proc /mnt/ospartition/proc
      sudo mount --bind /sys /mnt/ospartition/sys
      
      # NOTE: change root to the newly installed Ubuntu.
      sudo chroot /mnt/ospartition
      
    2. 编辑/etc/fstab并注释掉/boot. 其他条目是正确的。
    3. 可选:进行其他低级系统文件更改,例如损坏驱动程序的解决方法1。
    4. 为. _ vmlinuz_ _ _ initrd_ _ refind记得ubuntu-instance用我们自己的东西代替。我使用“ubuntu-work”和类似的。不要只使用“ubuntu”,因为它可能会被 Ubuntu 安装程序覆盖。
      # NOTE: Choose your own per-instance directory name.
      sudo mkdir /boot/efi/EFI/ubuntu-instance/
      sudo cp /boot/vmlinuz* /boot/initrd* /boot/efi/EFI/ubuntu-instance/
      
    5. 查找/dev/nvme0n1p33,此实例的加密物理卷。记下(或复制到剪贴板)UUID(但不是 PARTUUID)。
      sudo blkid
      
    6. refind为.in中的加密分区准备Ubuntu实例内核启动选项refind_linux.conf。/boot/efi/EFI/ubuntu-instance/refind_linux.conf从以下模板 创建,但使用您的路径和 UUID。
      "Boot with standard options"  "root=/dev/mapper/nvme0n1p33_crypt cryptdevice=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:nvme0n1p33_crypt ro quiet splash"
      "Boot to single-user mode"    "root=/dev/mapper/nvme0n1p33_crypt cryptdevice=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:nvme0n1p33_crypt ro single"
      "Boot with minimal options"   "root=/dev/mapper/nvme0n1p33_crypt cryptdevice=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:nvme0n1p33_crypt ro"
      
    7. 退出chroot并重新启动。记得在refind.
      exit
      sudo reboot
      

    清理

    可选的。这将删除refind. 我喜欢保留它们作为备份,直到系统稳定为止。

    • 删除任何剩余的共享 Ubuntu Grub 引导程序。
      # NOTE: The shared Ubuntu Grub EFI loader might be leftover from previous installations.
      #sudo rm -r /boot/efi/EFI/ubuntu/
      
    • 从未使用的引导分区中删除文件。
      # NOTE: Optionally clean up files from the Ubuntu installer.
      #sudo mkdir /mnt/bootpartition
      #sudo mount /dev/nvme0n1p22 /mnt/bootpartition
      #sudo rm -r /mnt/bootpartition/*
      

    内核或驱动程序更新后的维护

    由于 Ubuntu 不知道refind,内核+驱动程序更新需要 vmlinuz+initrd 的手动复制步骤。

    • 安装更新后,但在重新启动之前,将新的 vmlinuz+initrd 从加密复制/boot到未加密的 ESP ubuntu-instance,如上所示。
    • 如果您忘记执行此操作,并且系统损坏或未加载新驱动程序,请启动:
      • refind通过选择自定义引导选项从单用户模式。
      • Ubuntu 安装程序 USB/DVD,并挂载到临时位置:
        • 包含/boot.
        • ESP。
      • 将 vmlinuz+initrd 从您的文件复制/boot到 ESP 中ubuntu-instance,如上所示。

    未来的改进

    • 如果/当有EFI 文件系统驱动程序可以refind读取加密的 LUKS 分区时,请调查不要将内核保留在未加密的 ESP 上。这可能会大大简化上述设置。
    • 运行会ubiquity --no-bootloader跳过安装shim-signed,因此第三方 DKMS 模块/驱动程序(nvidia 等)需要手动签名才能安全启动。这可以在每次内核/驱动程序更新后使用kmodsignfor/lib/modules/x.y.z/updates/dkms/*.ko来完成。更流畅的替代方法是安装shim-signed(包括 的部分grub),它会自动签名。也许有一个不那么肮脏的替代方案?
    • 弄清楚内核+驱动程序更新是否可以自动触发更新每个实例的 ESP vmlinuz+initrd 副本refind。
    • 使用以下之一改善临时引导分区的使用:
      • 在每个 Linux 实例中将临时引导分区配置为加密交换空间。
      • 将 ESP 重新用于临时/boot文件。不希望通过意外格式化或类似的方式破坏 ESP 的额外风险,但可能同样有效。

    灵感

    谢谢!

    • @Aleksandr Dubinsky对“Ubuntu full disk encryption with encrypted /boot”的回答。
    • @StefK对“在不安装 Grub 的情况下安装 Ubuntu 12.04”的回答。
    • @Rod Smith对“如何使用 UEFI 在单个硬盘驱动器上安装两个独立的 Ubuntu 安装?”的回答
    • 由Roderick W. Smith撰写的更多答案、文章和文档,他是refind.
    • Ubuntu用于桌面使用的安装文档。

    1这个Wayland 加上 Nvidia 图形驱动程序问题引起了我的注意。磁盘解锁后会导致黑屏。幸运的是,它很容易修复,并且一旦安装了更新的 Nvidia 驱动程序,Wayland 就可以恢复——只需记住将更新的内核+initrd 复制到您的 ESP。

    • 1

相关问题

  • 如何加密我的主分区?

  • 使用加密的主目录重新安装 Ubuntu?

  • 如何从双启动计算机访问加密的主文件夹?

  • 安装时,我可以选择加密我的主文件夹——这是做什么的?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve