web-dev-qa-db-ja.com

Whole Disk Encryptionを使用したデュアルUbuntuインストール

私の目標は、Xubuntu/Ubuntuのデュアルブートをキャッチしたい-dm-crypt(ネイティブで提供される)ディスク全体暗号化でディスクを完全に暗号化することです。すぐに、ubuntuインストーラーを使用しても簡単にこれを行うことはできず、最終的に各ルートファイルシステムの2つの異なるinitrd構成を作成するようツールをだますことができないため、これは実行できない可能性があります。

だから質問:

  1. 誰もこれを以前にやったことがありますか、これを行うのに欠けている簡単な方法はありますか?

  2. (1)が負の場合... a。各インストール(xubuntu/ubuntu)ごとに個別のベース暗号化ボリュームを作成する必要がありますか、それとも1つの暗号化ボリュームとその中に個別のインストールパーティションを作成するだけですか?プロセスをより簡単にするために、私は後者に傾いています。ただし、ブートローダーがこれをどのように処理するかはわかりません。

b。最初のレイアウトを取得した後、暗号化されたボリュームを1つ使用した場合、それを復号化して2番目のディストリビューションをインストールする方法(およびブートローダー、initrdなどを適切に更新する方法)

Security Stack Exchangeのセキュリティ面について質問しました。

2
Tek Tengu

完全なアカウントは次のとおりです。

再起動間の段階にステップをグループ化しました。

  1. 予選
  2. データをバックアップする
  3. 主なタスクのためにlive-USBで再起動しますa。事前インストール:ディスクにスペースを作りますb。インストール:手動パーティション分割を行いますc。インストール後:initramfsを補足する
  4. プライマリUbuntuを再起動してgrubを更新します
  5. セカンダリUbuntuを再起動してキーファイルを追加します
  6. 仕上げのためにセカンダリUbuntuを再起動します
  7. 将来のインストールのためのリマインダー
  8. 暗号化されていない/ bootについて

0.予備

BIOSを搭載したラップトップでこれを行いました(UEFIの詳細については、 暗号化された/ bootを使用したUbuntuのフルディスク暗号化 を参照してください)。 Ubuntu 16.10を以前の16.04にインストールしてから18.04を以前の16.10にインストールする手順を繰り返しました。ただし、Bionicインストールのルート(/)に使用した論理ボリュームの内容を消去する必要がありました。消去せずに放置すると、Ubiquityまたはupdate-initramfsがさまざまな方法で失敗しました。

パーティション/ LVMボリュームは、ハードディスク/ dev/sda上の標準のUbuntuインストールによって作成された名前で参照します。

$ lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINT
NAME                    TYPE  FSTYPE      MOUNTPOINT
sda                     disk              
├─sda1                  part  ext2        /boot
├─sda2                  part              
└─sda5                  part  crypto_LUKS 
  └─sda5_crypt          crypt LVM2_member 
    ├─ubuntu--vg-root   lvm   ext4        /
    └─ubuntu--vg-swap_1 lvm   swap        [SWAP]

LUKSコンテナ「sda5_crypt」は、論理パーティション上のすべてのスペースを占有します。 LUKSコンテナーを縮小するのは、私にとって非常に困難です。既存のUbuntuインストールを試して破壊したくありません。そこで、代わりに論理ボリューム "root"を縮小するを選択して、新規インストール用のスペースを確保しました。

したがって、ディスク上の唯一の暗号化されていないスペースは、255Mの/ bootパーティションです。このパーティションを分割することは可能ですが、2つの等しい半分にはそれぞれ2つのカーネルバージョンしか保持されず、私にとっては十分ではありません。そこで、代わりに新しい/ bootディレクトリを新しい/ルートの下に配置するにすることにしました(他の場所を指すことはありません)。これにより、いくつかの複雑な問題が発生しますが、プライマリUbuntuとともに複数のインストールを行う余地も残されています。

以下のすべてのコマンドはSudo権限で実行されるなので、すべてのコマンドラインからSudo部分をスキップしました。

また、どのLinuxをインストールしたいかわからないため、「セカンダリUbuntu」について説明します。 「セカンダリUbuntu」(およびUbiquityに固有の詳細)を好みのフレーバーに置き換えます。

1.データをバックアップします

通常のバックアップに加えて、必要な設定(/ etc/crypttabなど)の別のコピーを、簡単にアクセスできる場所に作成することもできます。すべてが計画どおりであれば、それは必要ではありませんが、落ち着いておくのに役立つかもしれません。

2.主なタスクのためにlive-USBで再起動します

2.a.プレインストール:ディスクにスペースを作ります

LUKSコンテナーを開き、LVMをアクティブにします。

cryptsetup luksOpen /dev/sda5 sda5_crypt
vgscan
vgchange -ay

既存のルートボリュームを縮小します。

e2fsck -f /dev/mapper/ubuntu--vg-root
#resize2fs -p /dev/mapper/ubuntu--vg-root 16G
lvreduce -L 16G --resizefs /dev/ubuntu-vg/root
  • コメントアウトされた行は、「lvreduce --resizefs」を信頼してサイズ変更ビットを信頼できない場合に備えてあります。気分が良くなったら「resize2fs」を実行します。

新しいルートボリュームを追加します。サイズは選択できます。 16Gは単なる例です。

lvcreate -L 16G -n root2 ubuntu-vg

新しいスワップを作成しますif if休止状態でLUKSを使用できると信じている場合。それ以外の場合は、2つのインストールが既存のスワップスペースを共有するようにします。

lvcreate -L 4G -n swap2 ubuntu-vg

新しいデータボリュームを作成することは、やるべきことのように思えますが、ここで説明するようにインストールには不可欠ではありません。

lvcreate -l 100%FREE -n data ubuntu-vg

この時点で、初心者はlive-USBを使用せずに再起動し、プライマリUbuntuにログインして、動作することを確認することができます。その場合は、ライブUSBに再起動するときに、LUKSコンテナを再度開くことを忘れないでください。

さらに、LUKSコンテナーを開くために正しいコマンドを使用するように注意してください。たとえば、Launcherサイドバーに表示されるアイコンをクリックすると、コンテナが間違った名前で開かれ、update-initramfsがそのジョブを実行できなくなります。

cryptsetup luksOpen /dev/sda5 sda5_crypt

2.b.インストール:手動パーティション分割を行います

インストーラーを起動し、インストールの種類として「その他」を選択します。

  • /を新しいルートボリューム(/ dev/ubuntu-vg/root2)にポイントします。
  • / bootをどこにも向けないでください。
  • 新しいスワップボリュームを作成した場合は新しいスワップボリュームにポイントし、そうでない場合は古いボリュームにポイントします。
  • 他のパーティションまたはLVMボリュームがインストールに参加していないことを慎重に確認します。
  • Grubを論理ボリュームに配置します。ポイントはgub-installが失敗することを保証するであるため、どのボリュームでもかまいません。初めて、これは最も安全なオプションです。後で、これを何度も実行すると、/ dev/sdaを選択するタイミングが正確にわかります。

インストールの残りに進みます。

  • インストーラーがマウントをアンマウントするかどうかを尋ねる場合、ここで言及されていないことを行っています。余分なマウントをアンマウントします。

インストールの最後に、テストを続行することを選択します。

  • インストーラーがgrub-installが失敗したことを報告したら、grubなしで続行することを選択します。
  • ポップアップウィンドウが停止した場合は、インストーラウィンドウを最小化します。

2.c.インストール後:initramfsを補足する

両方のルートボリュームをマウントします。

mkdir /mnt/newroot && mount /dev/mapper/ubuntu--vg-root2 /mnt/newroot
mkdir /mnt/oldroot && mount /dev/mapper/ubuntu--vg-root /mnt/oldroot

ファイル/ etc/crypttabを古いルートボリュームから新しいルートボリュームにコピーします。

cp -p /mnt/oldroot/etc/crypttab /mnt/newroot/etc/
cat /mnt/newroot/etc/crypttab

コピーしたファイルがすでにキーファイルを参照している場合は、キーファイルとキーをinitrd.imgにロードする必要があるスクリプトもコピーします。

cp -p /mnt/oldroot/crypto_keyfile.bin /mnt/newroot/
cp -p /mnt/oldroot/etc/initramfs-tools/hooks/crypto_keyfile /mnt/newroot/etc/initramfs-tools/hooks/
  • 最初は、キーはまだ存在していません。変更を一度にすべて行わない場合はトラブルシューティングが容易になるため、後のステップで作成することをお勧めします。

重要な最終ステップは、chroot jailのinitrd.imgへの変更をロードすることです。

for DEV in dev dev/pts sys proc; do mount --bind /$DEV /mnt/newroot/$DEV; done

chroot /mnt/newroot update-initramfs -u

# Note reverse order.
for DEV in proc sys dev/pts dev; do umount /mnt/newroot/$DEV; done
  • 「cryptsetup:警告:/ etc/crypttabの無効な行」というエラーメッセージが表示された場合、正しい名前でLUKSコンテナを開いていません。

整頓(特に、ライブUSBの作成時に永続性を選択しなかった場合は、100%は必要ありません)。

umount /mnt/oldroot && rmdir /mnt/oldroot
umount /mnt/newroot && rmdir /mnt/newroot

LUKSコンテナを閉じて整理することもできますが、インストーラウィンドウを最小化する必要がある場合は、「デバイスまたはリソースがビジーです」というエラーメッセージが表示されます。心配しないでください、それはとにかくシャットダウンで閉じられます。

cryptsetup luksClose sda5_crypt
  • 最も難しい部分は終了しました。

3.プライマリUbuntuを再起動してgrubを更新します

ファイル/ etc/default/grubを編集して、暗号化された/ bootを有効にします:

GRUB_ENABLE_CRYPTODISK=y
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda5:sda5_crypt"
  • GRUB_ENABLE_CRYPTODISKの値を「true」または「1」などに設定すると、update-grubは値が「1」であるべきだと文句を言いますが、実際には「y」でなければなりません。 これは既知のバグです。
  • いつものように、ファイルの最後に改行を追加しないように注意してください。

次に、grubを更新します。主に、新しくインストールしたUbuntuをメニューに追加するだけでなく、変更した設定も追加します。

update-grub

4.セカンダリUbuntuを再起動してキーファイルを追加します

GrubメニューからセカンダリUbuntuを選択すると、LUKSコンテナを開くためのパスワードが求められます。そして、同じパスワードを再度求められます。ログインしたら、パスワードを2回入力する必要があるという問題を修正する必要があります。キーファイルをLUKSコンテナに追加することでそれを行います。

最初に、LUKSコンテナにすでにあるキーの数を知りたいです。 LUKSコンテナには最大8個のキー(0〜7の番号)を含めることができるため、本当に必要なキーのみを作成します。

cryptsetup luksDump /dev/sda5
  • Wily Werewolfでは、コンテナにはすでに3つのキーがあります。理由はわかりません。

次に、新しいキーファイルを作成します。

dd bs=512 count=4 if=/dev/urandom of=/crypto_keyfile.bin
chmod a=,u+r /crypto_keyfile.bin

次に、新しいキーをコンテナに追加します。このコマンドは、既存のパスワードと同様に、既知のパスワードを入力します。

cryptsetup luksAddKey /dev/sda5 /crypto_keyfile.bin

まだキーをinitrd.imgにロードするためにupdate-initramfsを実行するスクリプトが必要です。ファイルを/ etc/initramfs-tools/hooks /に配置し、その保護を設定します。

chmod +x /etc/initramfs-tools/hooks/crypto_keyfile

スクリプトには、1行だけが必要です。

cp /crypto_keyfile.bin "${DESTDIR}"
  • スクリプトのnameとキーファイルの名前は、決定するのはあなた次第です。

また、キーへの参照を/ etc/crypttabに追加する必要があります。変更前は、次のようになっています。

sda5_crypt UUID=sda5-uuid-here none luks,discard

変更後、次のようになります。

sda5_crypt UUID=sda5-uuid-here /crypto_keyfile.bin luks,discard,keyscript=/bin/cat

これで、いよいよinitramfsを更新する準備ができました。

update-initramfs -u

5.仕上げを行うためにセカンダリUbuntuを再起動します

今回は、grubメニューからセカンダリUbuntuを選択するときに、LUKSパスワードを1回だけ入力する必要があります。

バックアップのために、キーファイルを古いルートボリュームにコピーします。

mkdir /mnt/oldroot
mount /dev/mapper/ububtu--vg-root /mnt/oldroot
cp /crypto_file /mnt/oldroot/

バックアップ用にgrub設定もコピーします(古いルートボリュームから新しいルートボリュームに)。 grubメニューは両方のインストールで共有されるため、その設定は両方で同じであり、どちらのインストールでもメニューをインストールできます。そのため、今のところメインのUbuntuをメニューの一番上に保持したい場合でも、後で設定のバックアップコピーが必要になる場合があります。

cp /mnt/oldroot/etc/default/grub /etc/default/
umount /mnt/oldroot
rmdir /mnt/oldroot

また、論理ボリューム(主にルートボリューム)のマウントオプションを変更して、2つのインストールがGUIで互いのプライベート部分を公開しないようにすることもできます。/etc/fstabのパターンを説明できますが、幸いなことに、Disksを使用すると、必要のない適切なジョブが作成されます。

最後に、セカンダリUbuntuの通常の展開を開始し、両方のインストールで新しいデータボリュームを展開することもできます。

6.将来のインストールのためのリマインダー

  • Ubuntuのインストールのいずれかを上書きする場合、LUKS用の新しいキーファイルの作成を除いて、常に同じインストール後の手順を繰り返す必要があります。
  • キーファイルの必要性は、将来のリリースでなくなる可能性があります。実際、インストールのcryptsetup部分に関する適切なドキュメントが見つからなかったため、変更される可能性があることを恐れています。気をつけて!

7.暗号化されていない/ bootについて

暗号化されていないプライマリパーティションを分割して新しい/ boot用のスペースを確保することを選択した場合、提示した手順の一部を削除できます。

  • キーファイルは必要ないため、キーをinitrd.imgにロードするためのスクリプトも必要ありません。また、キーファイルへの参照を/ etc/crypttabに追加する必要もありません。それでも、インストール後の段階で/ etc/crypttabファイルを追加し、chroot jailでupdate-initramfsを実行する必要があります。
  • 新しい/ bootが暗号化されていない場合、grub設定でGRUB_ENABLE_CRYPTODISKも必要なく、起動パラメーターをGRUB_CMDLINE_LINUXに設定する必要もありません。それでも、update-grubを実行して、grubメニューにセカンダリインストールを追加する必要があります。
3
AimoE

注:質問に答えましたが、おそらく最後の段落が必要です。

手動パーティション設定とデュアルブート構成

Dmcryptの代替CDからインストールする必要があります。インストーラーで手動パーティション設定を選択します。 2つの個別の暗号化ボリュームが必要な場合は、プライマリまたは拡張またはEFIパーティションの両方にし、最初のOSをインストールするときに他のボリューム用に十分なスペースを残します。暗号化されたボリュームを共有する2つのLinuxディストリビューションが必要な場合(ただし、以下で説明するようにおそらくそれは望ましくありません)、1つの大きな暗号化ボリュームを作成し、そのOSをインストールするときに各OSのファイルシステムを作成します。

暗号化されたボリュームをLVM物理ボリュームにし、その物理ボリュームだけにまたがるボリュームグループを作成します。 2つのオペレーティングシステムが暗号化されたボリュームを共有する場合、それらはボリュームグループも共有します。ボリュームグループは複数のボリュームを管理する方法であり、その構成には1つだけがあります。各ルートファイルシステムに少なくとも1つの論理ボリュームを作成します。 2つのOSが暗号化されたボリュームを共有し、休止状態を使用したくない場合は、スワップ領域を共有できます。

十分な大きさのブート領域を残します。これは暗号化しないでください。ディスク容量に大きな制約がない限り、少なくとも1GB(緊急時にレスキューCDを保存できます)をお勧めしますが、1つのカーネルと1つの代替カーネルに200MBで十分です。

2つの個別のブートパーティションをインストールするのが最も簡単な方法です。 1つのディストリビューションでブートセクターを制御し、セカンダリディストリビューションのブートローダーをブートパーティションの最初のセクターにインストールします。プライマリブートローダーからセカンダリディストリビューションのブートローダーをチェーンロードします。

単一のブートパーティションが必要な場合は、1つのオペレーティングシステムにのみGrubをインストールし、2つのオペレーティングシステム間で/bootを共有します。

2つのLinuxディストリビューションのインストール

デュアルブートは使用するのが苦痛で、ほとんどの状況では必要ありません。 2つのオペレーティングシステムを実行する場合は、何らかの形式の仮想化を使用します。デュアルブートの唯一のユースケースは、同じ高価なハードウェアで複数のオペレーティングシステムをテストする必要がある場合です(それでも、余裕があれば、OSごとに別々のマシンを用意する方が便利です)。

異なるパスワードを使用した2つの個別のLinuxインストールが必要な場合は、デュアルブートが必要です。その場合でも、個別のアカウントを発行するか、それぞれが独自のルートユーザーを持つ個別の仮想化コンテナを作成することにより、目的のセキュリティポリシーを実装できる場合があります。

LinuxでLinuxを実行するには、仮想化さえ必要ないかもしれません: chroot で別のインストールからプログラムを実行できます。 Ubuntuまたは別のDebianベースのディストリビューションをマスターOSとして使用する場合、 schroot を使用すると非常に簡単になります。異なる二次ディストリビューションでschrootを使用する場合は、おそらく個別にインストールする必要があるため、別のボリュームにインストールする必要があります。セカンダリディストリビューションがDebianベースであり、ブートする必要がない場合は、 debootstrap を使用してサブディレクトリにインストールできます。 schroot guide を参照してください。

Ubuntu/Xubuntuデュアルインストール

UbuntuとXubuntuの両方を試してみたい場合は、このすべての必要はありません。 XubuntuとUbuntuは、異なるデフォルトパッケージを持つ同じディストリビューションです。任意のバリアントからUbuntuをインストールし、 buntu-desktopxubuntu-desktop パッケージの両方がインストールされていることを確認します。ログイン時に好みの環境を選択すると、Ubuntu/Unity別名UbuntuまたはUbuntu/XFCE別名Xubuntuを使用します。

0
Gilles

私は最近、自分のコンピューターに既に持っていた暗号化されたUbuntuと一緒に別のUbuntuをインストールしました。ほとんどの場合、 LUKS暗号化ハードドライブへの複数のLinuxディストリビューションのインストール ブログエントリの指示に従いました。

ただし、既存のインストールをそのまま維持したかったのですが、既存のLUKSコンテナーのサイズ変更は私にとって非常に困難であり、ディスク全体を再パーティション化したくないため、代わりに内部のLVMボリュームを再編成しましたライブUSBを使用する既存のLUKSコンテナ。この決定により、LUKSコンテナー内に新しい/ bootフォルダーを配置しなければならなかったため、指示から少し逸脱しました。ただし、予想よりも簡単であることが判明しました。

そのため、ライブUSBにログインしたまま、インストーラーを起動し、手動パーティション設定を選択しました。 「/」を新しい論理ボリュームに指定し、インストーラーがLUKSコンテナー内に新しい/ bootを配置できるようにしました。 hibernateがLUKSで動作するかどうかはわかりませんが、スワップは新しい論理ボリュームを指すようにしました。 GRUBインストールの場合、インストールが確実に失敗するターゲットを選択しました。最後に、「テストの継続」を選択し、その直後にgrubをインストールせずに続行しました。

インストール前にリブートする前に、最初のUbuntuのルートボリュームから/ etc/crypttabを新しいルートボリュームにコピーし、chrootでupdate-initramfs -uを実行しました。 これは重要なステップです。

再起動後、最初のUbuntuにログインし、/ etc/default/grubを編集してGRUB_ENABLE_CRYPTODISK = yを追加し、GRUB_CMDLINE_LINUXを「cryptdevice =/dev/sda5:sda5_crypt」を含むように変更して、update-grubを実行し、再起動しました。

再起動後、新しいインストールを実行したら、起動時にLUKSパスワードを2回入力する必要がないようにキーファイルを追加しました(/ bootが暗号化されているため)。キーファイルを追加するには、いくつかのソースからのほぼ同一の指示に従いました。 Pavel Koganの「Linux Mint encryption」 ブログエントリは元のソースでなければなりません。

途中でいくつかのばかげた障害を乗り越える必要がありましたが(たとえば、「GRUB_ENABLE_CRYPTODISKの値:util/grub-install.cは '1'ですが、util/config.cには 'y' "が必要です)。

0
AimoE