私の会社では、いくつかの新しいテスト作業に Ubuntu システムを実装する作業に取り組んでおり、私はそれらの暗号化ソリューションを担当しています。私は主に Windows ユーザーで、Ubuntu と Linux/Unix 全般について実用的な知識しか持っていないため、これは少し難しいですが興味深い作業です。Windows では多くの暗号化サービスが機能することは知っていますが、Ubuntu ではそうしたサービスが不足していることに気付き、ここで 20 件以上の投稿を読んで、フルディスク暗号化による新規インストールが唯一の現実的なオプションであると判断しました。とはいえ、一部のシステムはすでに使用されており、暗号化による新規インストールを単に消去して行うことはできません。すべての設定と変更、および既存のファイルをコピー/バックアップする必要があります。したがって、/home にコピーするほど簡単ではありません。私にとって最善の行動方針は何か知りたかったのですが、テスト マシン用にパーティションの完全なコピー (外部へのクイック コピーを作成するために gparted を使用) と LUKS による Ubuntu の新規インストールがあります。私は clonezilla の基本についてはよく知っていますが、私が収集した情報から判断すると、それがここで役立つとは思えません。
要約: Ubuntu 16.04 のフルインストールを暗号化されたディスクに移動する必要があります。一部のマシンでは TPM が有効になっていますが、一部のマシンでは有効になっていません。それぞれのマシンに最適な対処方法を知る必要があります。新しい管理者を助けてくれてありがとうございます。
外部ネットワーク アクセスを必要としないが必須ではない方法を説明できる場合はボーナスです。つまり、パッケージが必要な場合は、テスト PC で USB/CD/DVD にダウンロードし、パッケージをオフラインでインストールできます。
答え1
以下に説明する手順は、私が何度も使用して成功したものです。Ubuntu 16.04 および 18.04 で機能します。@Arno が回答で提案したソリューションとは異なり、カーネル ブート オプションを手動で編集する必要はありません。代わりに、 Ubuntu がデフォルトの LVM ベースの暗号化を使用してインストールするときにも使用する、より標準的な (意図しないしゃれ) ソリューションupdate-grub
に基づいて適切な構成を生成することに/etc/crypttab
依存しています。(このソリューションは LVM も暗号化も使用しません/boot
)
このガイドに従うことで生じるデータ損失やその他の潜在的な不快な結果については、私は責任を負いません。何かを行う前に、信頼できるバックアップがあることを確認してください。
これを書いている間、このガイドをテストしているわけではありません。これは(テスト済み)に基づいています。私自身のブログ投稿似たようなケースと私が覚えているいくつかの詳細について。
このガイドでは、次のことを前提としています。
- Ubuntuはすでにインストールされています
- システムはBIOS/CSMではなく(U)EFIで起動します
/boot
別のパーティション1にある- Ubuntu 16.04/18.04またはPop!_OS 18.04のライブメディアを起動できます(USB、PXE、DVDなどから)2
/boot
が別のパーティション上にない場合、抽出は非常に簡単です。任意の場所に 200 ~ 500 MB のパーティションを作成し、ext4 にフォーマットし、現在の/boot
コンテンツをコピーし、/etc/fstab
エントリを追加しupdate-grub
、再起動します。
1. バックアップ
現在のシステム パーティションをバックアップする必要があります。これを行う最も簡単な方法は、Clonezilla を使用することです。これはユーザー プルーフであり、マニュアルは不要です。指示に従うだけです。
2. パーティションの縮小
LUKS ヘッダーはパーティション上のスペースをいくらか占有します。Clonezilla/partclone はソースデバイスよりも小さいデバイスにイメージを復元できないため、暗号化されていないパーティションのイメージを暗号化されたコンテナーに復元することはできません。暗号化されたコンテナーの方が少し小さいためです。
次に、暗号化するパーティションを少し縮小する必要があります。安全のため、10 MB 以上縮小してください。これを行う最も簡単な方法は、GParted を使用することです。これは、Ubuntu ライブ メディアで利用できます。
3. 縮小したパーティションのイメージを作成する
これをもう一度Clonezillaで実行するか、すでにパートクローンClonezilla はこれをデフォルトとして使用しています。後ほど partclone を使用して手動でイメージを復元します。
partclone を使用してイメージにクローンする:
sudo partclone.ext4 -c -s /dev/sda2 | pigz -0 > /mnt/backup/sda2.ext4.ptcl.gz
partclone.ext4
ext4 で動作するように専用化された partclone バイナリの 1 つです。サポートされている各ファイルシステムには、独自の partclone バイナリが用意されています。/dev/sda2
明らかに、クローンを作成するパーティションです。私はパーティションをパートラベルで参照することを好みます。たとえば、/dev/disk/by-partlabel/os
- IMO の方がずっとわかりやすいです。/dev/sda2
の方が認識しやすいですが。ピグズマルチコア gzip です。
-0
効果的な圧縮よりも速度を優先するように指示します。/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 を使って「縮小」バックアップを作成した場合、その出力ファイルを見ると、どのバックアップが partclone ソースであるかが簡単にわかります。大きなチャンク サイズを設定しない限り、それらは断片化されるため、cat
pigz にパイプする前にそれらをまとめる必要があります。
パーティション全体に収まるようにファイルシステムのジオメトリも調整する必要があります。
sudo resize2fs /dev/mapper/os
7. 暗号化サポートを有効にする
まず、復元したばかりの OS に chroot します。
mkdir /mnt/os
sudo mount /dev/mapper/os /mnt/os
cd /mnt/os
mount --bind /etc/resolv.conf etc/resolv.conf
mount --bind /dev dev
mount -t tmpfs tmpfs tmp
mount -t sysfs sys sys
mount -t proc proc proc
sudo chroot .
mount -a
このターミナルは現在、ライブインスタンスではなく、インストールされた Ubuntu インスタンスで動作しています。
インストール暗号セットアップ:
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 で暗号化されたパーティション上には配置できません。 /boot
LUKS暗号化とLUKS2暗号化を行う場合は/
、パスワードを2回入力するか、initramfsにキーファイルを埋め込む- 私の意見では面倒すぎるので...- 暗号化
/boot
だけでは脆弱性が軽減されません。たとえ が/boot
暗号化されていても、EFI システムパーティションは暗号化できないため、攻撃者はそれを改ざんして、たとえば のカーネル/initramfs の代わりに悪意のあるカスタムカーネル/initramfs を使用する可能性があります/boot
。(これを修正するには、自己コンテナGRUBバイナリを構築し、秘密鍵で署名するUEFIセキュアブートを使用して検証します)
独自の脅威モデルを定義し、必要なセキュリティのレベル(および対象)を決定します。
2他のUbuntuバージョンやレスキューCDで運を試すこともできます。GRMLただし、状況は異なる場合があります。ライブ メディアがシステムと一致しなかったために、この手順が失敗した経験があります。
答え2
ルート パーティションをイメージ化し、LUKS でフォーマットし、マウントしてイメージで上書きすることができます。その後、起動時に復号化できるように GRUB にいくつかの変更を加える必要があります。以下の手順はテストしていません、それらは単なる手がかりに過ぎません。
/boot
がオンでsdb1
、ルート パーティションがオンでsdb2
、外付けドライブであると想定しました/media/hdd
。管理者プロンプトで Live 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 設定を更新します。
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
コピーしますすべて空き領域を含め、パーティション内のファイルのみをコピーする方が速い方法です。
幸運を!