私の会社は、いくつかの新しいテスト作業でいくつかのUbuntuシステムの実装に取り組んでおり、それらの暗号化ソリューションを担当しています。 UbuntuとLinux/Unix全般についての実用的な知識を持つ主にWindowsユーザーであったため、これは少しやりがいがありますが、興味をそそられます。多くのインプレース暗号化サービスがWindowsで機能することは知っていますが、Ubuntuでこれらが不足していることに気付き、ここで20以上の投稿を読んだ後、フルディスク暗号化を使用した新規インストールが唯一の現実的なオプションであると判断しました。そうは言っても、一部のシステムはすでに使用されており、暗号化を使用してワイプして新たにインストールすることはできません。すべての設定と変更、および既存のファイルをコピー/バックアップする必要があります。そのため、/ homeをコピーするほど簡単ではありません。私にとって最善の行動は何であるか興味がありました。テストマシン用のパーティションの完全なコピー(gpartedを使用して外部にすばやくコピーするために使用)とUbuntu w/LUKSの新規インストールがあります。私はclonezillaの基本に精通していますが、それが私が集めたものからここで私を助けるとは思いません。
tldr:Ubuntu16.04のフルインストールを暗号化されたディスクに移動する必要があります。一部のマシンではTPMが有効になり、一部のマシンではTPMが有効になりません。それぞれについて、最善の行動方針を知る必要があります。新しい管理者を助けてくれてありがとう。
外部ネットワークアクセスを必要としないが、必要ではない方法を説明できる場合はボーナス。つまりパッケージが必要な場合は、テストPCでUSB/CD/DVDにダウンロードして、パッケージをオフラインでインストールできます。
以下に説明するのは、私が何度も成功裏に使用した手順です。 Ubuntu16.04および18.04で動作します。 @Arnoが回答で提案したソリューションとは異なり、カーネルブートオプションを手動で編集する必要はありません。代わりに、_update-grub
_に依存して_/etc/crypttab
_に基づいて適切な構成を生成します。これは、デフォルトのLVMベースの暗号化でインストールするときにUbuntuでも使用されるより標準的な(しゃれの意図しない)ソリューションです。 (このソリューションはLVMも暗号化も使用しません_/boot
_)
私は、このガイドに従うことによるデータの損失またはその他の潜在的な不快な結果について責任を負いません。何かをする前に、信頼できるバックアップがあることを確認してください。
これを入力している間、このガイドをテストしていません。これは(テスト済み) 自分でブログ投稿 似たようなケースと私が覚えているいくつかの詳細に基づいています。
このガイドでは、次のことを前提としています。
/boot
_は別のパーティションにあります1_/boot
_が別のパーティションにない場合、それを抽出するのは非常に簡単です。任意の場所に200〜500 MBのパーティションを作成し、ext4にフォーマットし、現在の_/boot
_コンテンツをコピーし、_/etc/fstab
_エントリを追加します。 、_update-grub
_、再起動します。
現在のシステムパーティションをバックアップする必要があります。これを行う最も簡単な方法は、Clonezillaを使用することです。それはユーザープルーフであり、マニュアルは必要ありません-指示に従うだけです。
LUKSヘッダーは、パーティション上のスペースの一部を占有します。 Clonezilla/partcloneは、ソースデバイスよりも小さいデバイスにイメージを復元できないため、暗号化されていないパーティションのイメージは少し小さいため、暗号化されたコンテナーに復元できません。
次に、パーティションを縮小して暗号化する必要があります。安全のために、10MB以上縮小してください。これを行う最も簡単な方法は、GPartedを使用することです。 Ubuntuライブメディアで入手できます。
これをClonezillaで再度行うか、Clonezillaがデフォルトで使用しているpartcloneに既に慣れてください。後でpartcloneを使用して手動で画像を復元します。
Partcloneを使用した画像へのクローン作成:
_Sudo partclone.ext4 -c -s /dev/sda2 | pigz -0 > /mnt/backup/sda2.ext4.ptcl.gz
_
_partclone.ext4
_は、ext4の操作専用のpartcloneのバイナリの1つです。サポートされている各ファイルシステムは、独自のパートクローンバイナリを取得します。
_/dev/sda2
_は、明らかにクローンを作成するパーティションです。私はパーティションをpartlabelで参照することを好みます。 _/dev/disk/by-partlabel/os
_-はるかにクリーンなIMO。ただし、_/dev/sda2
_の方が認識しやすくなります。
pigzはマルチコアgzipです。 _-0
_は、効果的な圧縮よりも速度を優先するように指示します。
_/mnt/backup
_ここでは、画像を保存する外部の場所を表します。以前にClonezillaを使用したことがある場合でも、_/home/partimag
_の下にマウントできます。 SMB共有:_Sudo mount -t cifs -o username=gronostaj //192.168.1.90/Backup /mnt/backup
_(インタラクティブにパスワードを要求する)をマウントする場合
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
_
(これにより、コンテナーの復号化されたコンテンツがゼロで上書きされますが、暗号化されたコンテンツはランダムなゴミのように見えます)
手動で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
_
まず、復元したばかりの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
_
暗号化されたパーティションが複数ある場合は、起動時にすべてのパーティションのパスワードを入力する必要があります。ただし、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
_を使用する理由:
/boot
_はLUKS2暗号化パーティションに存在してはなりません/boot
_およびLUKS2-encrypt _/
_を使用する場合は、パスワードを2回入力するか、 キーファイルをinitramfsに埋め込む -面倒なIMOが多すぎるためです。 ...。/boot
_だけでは、脆弱性が低下することはありません。_/boot
_が暗号化されていても、EFIシステムパーティションを暗号化できないため、攻撃者がそれを改ざんする可能性があります。 _/boot
_からのものではなく、カスタムの悪意のあるカーネル/ initramfsを使用します。 (これを修正するには、 セルフコンテナを構築するGRUBバイナリを作成し、秘密鍵で署名する 、UEFIセキュアブートを使用して検証する必要があります)独自の脅威モデルを定義し、必要なセキュリティのレベル(およびそれに対する)を決定します。
2 他のUbuntuバージョンや [〜#〜] grml [〜#〜] などのレスキューCDで運試しをすることもできますが、マイレージは異なる場合があります。ライブメディアがシステムと一致しなかったという理由だけで、この手順が失敗するのを経験しました。
ルートパーティションをイメージ化し、LUKSでフォーマットし、マウントして、イメージで上書きすることができます。次に、GRUBを起動時に復号化するために、いくつかの変更が必要になります。以下の手順はテストしていません、これらは単なるリードです。
/boot
はsdb1
にあり、ルートパーティションは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
次のコマンドを実行して、パーティションの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
そして再起動します。いくつかの落とし穴:
/boot
が別のパーティションにあることを前提としています。すべてが同じパーティションにあると、機能しません。dd
はコピーしますすべて空き領域を含めて、より迅速な方法は、パーティション内のファイルのみをコピーすることです。幸運を!