web-dev-qa-db-ja.com

暗号化されていないUbuntu16.04からLUKS暗号化された16.04のインストールへの移行

私の会社は、いくつかの新しいテスト作業でいくつかのUbuntuシステムの実装に取り​​組んでおり、それらの暗号化ソリューションを担当しています。 UbuntuとLinux/Unix全般についての実用的な知識を持つ主にWindowsユーザーであったため、これは少しやりがいがありますが、興味をそそられます。多くのインプレース暗号化サービスがWindowsで機能することは知っていますが、Ubuntuでこれらが不足していることに気付き、ここで20以上の投稿を読んだ後、フルディスク暗号化を使用した新規インストールが唯一の現実的なオプションであると判断しました。そうは言っても、一部のシステムはすでに使用されており、暗号化を使用してワイプして新たにインストールすることはできません。すべての設定と変更、および既存のファイルをコピー/バックアップする必要があります。そのため、/ homeをコピーするほど簡単ではありません。私にとって最善の行動は何であるか興味がありました。テストマシン用のパーティションの完全なコピー(gpartedを使用して外部にすばやくコピーするために使用)とUbuntu w/LUKSの新規インストールがあります。私はclonezillaの基本に精通していますが、それが私が集めたものからここで私を助けるとは思いません。

tldr:Ubuntu16.04のフルインストールを暗号化されたディスクに移動する必要があります。一部のマシンではTPMが有効になり、一部のマシンではTPMが有効になりません。それぞれについて、最善の行動方針を知る必要があります。新しい管理者を助けてくれてありがとう。

外部ネットワークアクセスを必要としないが、必要ではない方法を説明できる場合はボーナス。つまりパッケージが必要な場合は、テストPCでUSB/CD/DVDにダウンロードして、パッケージをオフラインでインストールできます。

1
Brendan77222

以下に説明するのは、私が何度も成功裏に使用した手順です。 Ubuntu16.04および18.04で動作します。 @Arnoが回答で提案したソリューションとは異なり、カーネルブートオプションを手動で編集する必要はありません。代わりに、_update-grub_に依存して_/etc/crypttab_に基づいて適切な構成を生成します。これは、デフォルトのLVMベースの暗号化でインストールするときにUbuntuでも使用されるより標準的な(しゃれの意図しない)ソリューションです。 (このソリューションはLVMも暗号化も使用しません_/boot_)

私は、このガイドに従うことによるデータの損失またはその他の潜在的な不快な結果について責任を負いません。何かをする前に、信頼できるバックアップがあることを確認してください。

これを入力している間、このガイドをテストしていません。これは(テスト済み) 自分でブログ投稿 似たようなケースと私が覚えているいくつかの詳細に基づいています。

このガイドでは、次のことを前提としています。

  • Ubuntuはすでにインストールされています
  • システムはBIOS/CSMではなく(U)EFIで起動します
  • _/boot_は別のパーティションにあります1
  • Ubuntu 16.04/18.04のライブメディアを起動できます(USB、PXE、DVDなどから) 2

_/boot_が別のパーティションにない場合、それを抽出するのは非常に簡単です。任意の場所に200〜500 MBのパーティションを作成し、ext4にフォーマットし、現在の_/boot_コンテンツをコピーし、_/etc/fstab_エントリを追加します。 、_update-grub_、再起動します。


1.バックアップ

現在のシステムパーティションをバックアップする必要があります。これを行う最も簡単な方法は、Clonezillaを使用することです。それはユーザープルーフであり、マニュアルは必要ありません-指示に従うだけです。

2.パーティションの縮小

LUKSヘッダーは、パーティション上のスペースの一部を占有します。 Clonezilla/partcloneは、ソースデバイスよりも小さいデバイスにイメージを復元できないため、暗号化されていないパーティションのイメージは少し小さいため、暗号化されたコンテナーに復元できません。

次に、パーティションを縮小して暗号化する必要があります。安全のために、10MB以上縮小してください。これを行う最も簡単な方法は、GPartedを使用することです。 Ubuntuライブメディアで入手できます。

3.縮小されたパーティションのイメージを作成する

これをClonezillaで再度行うか、Clonezillaがデフォルトで使用しているpartcloneに既に慣れてください。後でpartcloneを使用して手動で画像を復元します。

Partcloneを使用した画像へのクローン作成:

_Sudo partclone.ext4 -c -s /dev/sda2 | pigz -0 > /mnt/backup/sda2.ext4.ptcl.gz
_
  1. _partclone.ext4_は、ext4の操作専用のpartcloneのバイナリの1つです。サポートされている各ファイルシステムは、独自のパートクローンバイナリを取得します。

  2. _/dev/sda2_は、明らかにクローンを作成するパーティションです。私はパーティションをpartlabelで参照することを好みます。 _/dev/disk/by-partlabel/os_-はるかにクリーンなIMO。ただし、_/dev/sda2_の方が認識しやすくなります。

  3. pigzはマルチコアgzipです。 _-0_は、効果的な圧縮よりも速度を優先するように指示します。

  4. _/mnt/backup_ここでは、画像を保存する外部の場所を表します。以前にClonezillaを使用したことがある場合でも、_/home/partimag_の下にマウントできます。 SMB共有:_Sudo mount -t cifs -o username=gronostaj //192.168.1.90/Backup /mnt/backup_(インタラクティブにパスワードを要求する)をマウントする場合

4.パーティションを元のサイズに拡大します

LUKSヘッダー用に余分なスペースを確保したいのではないでしょうか。パーティションのサイズを元のサイズに戻します。

5.LUKSへのフォーマット

これは、元のデータを失う瞬間です。バックアップに問題がないことを確認してください。

システムパーティション(_/boot_を除く)をLUKSにフォーマットします。

_Sudo cryptsetup luksFormat --type luks2 /dev/sda2
_

作成したコンテナを開きます:

_Sudo cryptsetup open /dev/sda2 os
_

暗号化されたコンテナ全体がランダムなゴミのように見え、古いデータがまだ読み取れないことを確認してください。

_Sudo dd if=/dev/zero of=/dev/mapper/os bs=1M
_

(これにより、コンテナーの復号化されたコンテンツがゼロで上書きされますが、暗号化されたコンテンツはランダムなゴミのように見えます)

6.画像の復元

手動でpartcloneを実行して、イメージを復元します。

_cat /mnt/backup/sda2.ext4.ptcl.gz | pigz -d | Sudo partclone.ext4 -r -o /dev/mapper/os
_

簡単な方法でClonezillaを使用して「縮小」バックアップを作成し、その出力ファイルを調べると、どのパートクローンソースであるかが簡単にわかります。断片化される巨大なチャンクサイズを設定しない限り、pigzにパイプする前にそれらを一緒にcatする必要があります。

また、パーティション全体に合うようにファイルシステムのジオメトリを調整する必要があります。

_Sudo resize2fs /dev/mapper/os
_

7.暗号化サポートの有効化

まず、復元したばかりのOSにchrootします。

_mkdir /mnt/os
Sudo mount /dev/mapper/os /mnt/os
cd /mnt/os
mount --bind /dev dev
mount -t tmpfs tmpfs tmp
mount -t sysfs sys sys
mount -t proc proc proc
Sudo chroot .
mount -a
_

このターミナルは、ライブインスタンスではなく、インストールされているUbuntuのインスタンスで動作しています。

インストールcryptsetup

_apt update
apt install cryptsetup -y
_

ファイル_/etc/crypttab_を作成する必要があります。そうでない場合でも、心配する必要はありません。手動で作成してください。このファイルを編集して、パーティションのエントリを追加します。

_os /dev/sda2 none luks
_

エディターを保存して終了します。 initramfsを再構築します:

_update-initramfs -u -k all
_

更新GRUBエントリ:

_update-grub
_

8.余分なパスワードプロンプトを削除する

暗号化されたパーティションが複数ある場合は、起動時にすべてのパーティションのパスワードを入力する必要があります。ただし、LUKSを使用すると、パスワードの代わりにパーティションのロックを解除するために使用できるキーファイルを追加できます。これらのキーファイルを暗号化された_/_パーティションに保存し、それを使用して後続のキーファイルのロックを解除できます。

ランダムなキーファイルを作成します。

_dd if=/dev/urandom of=/luks.key bs=4096 count=1
_

ルート以外のパーティションに追加します。

_cryptsetup luksAddKey /dev/sda3 /luks.key
_

crypttabエントリを追加します:

_home /dev/sda3 /luks.key luks
_

Initramfsを再構築します:

_update-initramfs -u -k all
_

1 個別の_/boot_を使用する理由:

  • この方法の方が簡単です;)
  • GRUBはまだLUKS2をサポートしていないため、_/boot_はLUKS2暗号化パーティションに存在してはなりません
  • LUKS-encrypt _/boot_およびLUKS2-encrypt _/_を使用する場合は、パスワードを2回入力するか、 キーファイルをinitramfsに埋め込む -面倒なIMOが多すぎるためです。 ...。
  • 暗号化された_/boot_だけでは、脆弱性が低下することはありません。_/boot_が暗号化されていても、EFIシステムパーティションを暗号化できないため、攻撃者がそれを改ざんする可能性があります。 _/boot_からのものではなく、カスタムの悪意のあるカーネル/ initramfsを使用します。 (これを修正するには、 セルフコンテナを構築するGRUBバイナリを作成し、秘密鍵で署名する 、UEFIセキュアブートを使用して検証する必要があります)

独自の脅威モデルを定義し、必要なセキュリティのレベル(およびそれに対する)を決定します。

2 他のUbuntuバージョンや [〜#〜] grml [〜#〜] などのレスキューCDで運試しをすることもできますが、マイレージは異なる場合があります。ライブメディアがシステムと一致しなかったという理由だけで、この手順が失敗するのを経験しました。

1
gronostaj

ルートパーティションをイメージ化し、LUKSでフォーマットし、マウントして、イメージで上書きすることができます。次に、GRUBを起動時に復号化するために、いくつかの変更が必要になります。以下の手順はテストしていません、これらは単なるリードです。

/bootsdb1にあり、ルートパーティションはsdb2にあり、/media/hddは外付けドライブであると想定しました。管理者プロンプトでライブUSBを使用しています。

ルートパーティションを暗号化する

dd if=/dev/sdb2 of=/media/hdd/diskimg bs=1M
cryptsetup luksFormat /dev/sdb2
cryptsetup luksOpen /dev/sdb2 enc_root
dd if=/media/hdd/diskimg of=/dev/mapper/enc_root

パーティションをマウントします

mount /dev/sdb2 /mnt
mount /dev/sdb1 /mnt/boot

GRUBを構成する

次のコマンドを実行して、パーティションのUUIDに注意してください。

blkid /dev/sdb2

/mnt/etc/default/grubを編集し、GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"という行を見つけます。これを次のように変更し、device-UUIDを前の手順でメモしたUUIDに置き換えます。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cryptdevice=UUID=device-UUID:enc_root root=/dev/mapper/enc_root"

次に、GRUB config:

mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
chroot /mnt
update-grub
exit

そして、すべてをアンマウントします。

umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt/boot
umount /mnt

そして再起動します。いくつかの落とし穴:

  • 私はこれをテストしたことがなく、Linuxパーティションでしばらく遊んだことがないので、何かを忘れたり、台無しにしたことはほぼ間違いありません。人々が校正して修正するのを待ちます。
  • これは、/bootが別のパーティションにあることを前提としています。すべてが同じパーティションにあると、機能しません。
  • UEFIシステムでは、EFIパーティションが属する場所にもマウントすることを忘れないでください。
  • ddはコピーしますすべて空き領域を含めて、より迅速な方法は、パーティション内のファイルのみをコピーすることです。

幸運を!

1
Hey