web-dev-qa-db-ja.com

個別のパーティション暗号化とUEFI /セキュアブートで複数のUbuntu 18.xを実行するにはどうすればよいですか?

複数のコンピューターに投資することなく、さまざまなタスク(作業、オープンソースプログラミング、ゲーム)の懸念を明確に分離するには、個別に暗号化されたパーティションに並列オペレーティングシステムをインストールすることをお勧めします。

ウィッシュリスト、目標:

  • 1台のマシンに1台のハードドライブを使用します。
  • [〜#〜] uefi [〜#〜]Secure Boot とともに使用します。
  • 高度に分離された複数のLinuxインスタンスを並行してインストールします。
    • 他のインスタンスのディスクに(簡単に)アクセスできないようにするための個別に暗号化されたパーティション。
    • 独自のソフトウェア、設定、およびホームフォルダーを保持します。
    • 現在 buntu 18.xデスクトップ
    • 他のディストリビューションの可能性もありますが、ここでは取り上げません。
  • Windowsのインスタンスを1つインストールします。
    • 主な焦点ではありません。
    • 現在 Windows 1 です。
  • 必要に応じて、一般的な(共有)ストレージ用に他のパーティションまたはディスクを使用します。
    • ここでは扱いません。
1
Joel Purra

以下の手順を使用して、1台のマシンに3つの個別のUbuntuシステムをセットアップしました。よく働く!

アイデア

  • UEFI /セキュアブート中のシステム選択を管理するには、 refind ではなく grub を使用します。
  • Linuxインスタンスごとに個別の/bootパーティションを使用しないでください。 refindカーネルを直接ブートするEFIシステムパーティション(ESP) から実行します。
  • Ubuntuインストーラーから Linux Unified Key Setup(LUKS) をセットアップします。
  • 暗号化されたディスクから直接起動することはrefindでサポートされていないため、現在のソリューションはカーネルファイルを暗号化しないことに注意してください。

概観

  • 明らかに、事前に重要なデータの複数のバックアップを作成してください。ブート手順の変更、ディスクのフォーマット、暗号化の有効化などは危険であり、注意が必要です。
  • 最初にWindowsをインストールします。
    • 一般的な推奨事項のようですが、UEFIの方が重要ではありません。
    • GPTとESPを準備します。これは、Ubuntu USB/DVDから GNOME Partition Editor を使用して手動で行うこともできます。
    • Ubuntuのインスタンス数とカーネルサイズによっては、Windowsインストーラーによって作成されたESPは十分に大きくない場合があります。2つのUbuntuインスタンスには512 MBで十分ですが、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. インストールの種類(他のオペレーティングシステムと共存している)およびディスクのフォーマット/パーティションについて尋ねられたら、[Something other]を選択してディスクとパーティションのリストを表示します。
  4. ESPであるefiタイプのパーティションを見つけます。
    • 私のシステムでは、これは/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. vmlinuzkernel(initrd および initial ramdisk(refind のEFIブート可能コピーを作成します。 ubuntu-instanceを独自のものに置き換えることを忘れないでください。ウブントゥワークなどを使っています。 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_linux.confの暗号化されたパーティション用にrefindのUbuntuインスタンスカーネルブートオプションを準備します。以下のテンプレートから/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。
    • 上記のように/bootからESPのubuntu-instanceにvmlinuz + initrdをコピーします。

今後の改善

  • EFIファイルシステムドライバー が存在する場合は、暗号化されたLUKSパーティションをrefindが読み取れるようにする場合は、カーネルを暗号化されていないESPに保持しないようにしてください。これにより、上記の設定が大幅に簡略化される場合があります。
  • ubiquity --no-bootloaderを実行するとshim-signedのインストールがスキップされるため、サードパーティのDKMSモジュール/ドライバー(nvidia etcetera)では、セキュアブートのために手動で署名する必要があります。これは、各カーネル/ドライバの更新後に kmodsign for /lib/modules/x.y.z/updates/dkms/*.ko を使用して実行できます。よりスムーズな代替策は、自動署名を行うshim-signedgrubの一部を含む)をインストールすることです。おそらく、汚いことの少ない代替案がありますか?
  • カーネル+ドライバーの更新がインスタンスごとの更新を自動的にトリガーできるかどうかを判断しますESP refindのvmlinuz + initrdコピー。
  • 次のいずれかを使用して、一時的なブートパーティションの使用を改善します。
    • 各Linuxインスタンスで、一時ブートパーティションを暗号化されたスワップスペースとして構成します。
    • ESP一時/bootファイル用に再利用します。誤ってESPをフォーマットするなどして破壊するという追加のリスクは望んでいませんが、同様に動作します。

インスピレーション

ありがとうございました!


1 これ Wayland plus Nvidia grapics driver problem が私を捕まえた。ディスクのロックが解除された後、黒い画面が表示されます。幸い、簡単に修正でき、Waylandは一度復元できます 更新されたNvidiaドライバーがインストールされました -更新されたkernel + initrdをESPにコピーすることを忘れないでください。

1
Joel Purra