GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでルートファイルシステムを暗号化する方法

システム管理者は、ディスクを暗号化することがいかに重要かをすでにご存知でしょう。 。

ラップトップが盗まれた場合、初心者のハッカーでさえ、ディスクに含まれている情報を抽出することができます。

必要なのは、LiveCDが付いたシンプルなUSBスティックだけで、すべてが盗まれます。

幸いなことに、これを防ぐ方法がいくつかあります。ディスクに保存されているデータを暗号化することによって。

このチュートリアルでは、完全なシステム暗号化を実行するために必要な手順を確認します。 。たとえば、ファイルやホームパーティションのみの暗号化に焦点を当てた他のチュートリアルをオンラインで見つけることができます。

この場合、システム全体を暗号化しています ルートパーティション全体とブートフォルダを意味します。ブートローダーの一部を暗号化します。

準備はいいですか?

前提条件

このガイドで詳しく説明されているすべての操作を実行するには、明らかにシステム管理者権限が必要です。

これが当てはまるかどうかを確認するには、「 sudo」に属していることを確認してください 「グループ(Debianベースのディストリビューションの場合)」または「ホイール 「(RedHatベースのもの)。

次の出力が表示された場合は、問題ないはずです。

続行する前に、ディスクの暗号化にはリスクがないわけではないことを知っておくことが重要です。

このプロセスには、ディスク全体のフォーマットが含まれます。 これは、データが失われることを意味します バックアップしない場合。結果として、外付けドライブまたはオンラインクラウドのどちらでバックアップするかに関わらず、ファイルをバックアップすることをお勧めします。

システム全体をバックアップするために必要な手順がわからない場合は、明確な用語で説明されている次のチュートリアルを読むことをお勧めします。

すべてが設定されたので、システム全体の暗号化を開始できます。

現在の状況を特定する

このチュートリアルは3つの部分に分かれています。直面している可能性のあるシナリオごとに1つです。

現在の状況を特定したら、関心のある章に直接移動できます。

暗号化されていないデータがすでに含まれているシステムを暗号化する場合は、2つの選択肢があります:

  • コンピュータまたはサーバーにディスクを追加して、起動可能なディスクになるように構成することができます。 :パート1に進むことができます。
  • 追加できません コンピュータへの追加ディスク(たとえば、保証期間中のラップトップ):パート2で必要な情報を見つけることができます。

まったく新しいシステムをインストールする場合、つまりディストリビューションを最初からインストールする場合は、グラフィカルインストーラーからディスク全体を直接暗号化できます。 。結果として、パート3に進むことができます。

ハードディスクレイアウトの設計

暗号化されているかどうかに関係なく、新しいパーティションを作成するときは常に、ハードディスクの設計を選択することが非常に重要です。 事前に。

この場合、MBRレイアウトを使用してディスクを設計します。 :ブータブルディスクの最初の512バイトは、GRUBの最初のステージ用に予約されます。 (およびパーティションのメタデータ)

最初のパーティションは、EFIを使用するシステム用に予約された空のパーティションになります。 (またはUEFI)起動ファームウェアとして。将来Windows10をインストールすることを選択した場合、そのためのパーティションがすでに利用可能になります。

ディスクの2番目のパーティションはLUKS-LVMとしてフォーマットされます 1つの物理ボリューム(ディスクパーティション自体)を含むパーティションと、2つの論理ボリュームを含む1つのボリュームグループ(1つはルートファイルシステム用、もう1つは小さなスワップパーティション用)。

ご覧のとおり、GRUBの第2段階 暗号化も行われます。これは、ブートフォルダを同じパーティションに保存することを選択したためです。

もちろん、ここで提供される設計に限定されるものではありません。たとえば、ログ用に論理ボリュームを追加できます。

この設計は、このチュートリアルのロードマップになります。新しいディスクから始めて、すべてのパーツを一緒に実装します。

保存データの暗号化

このチュートリアルは、保存データの暗号化に焦点を当てています 。その名前が示すように、保存データの暗号化 これは、システムが暗号化されていることを意味します。つまり、システムが休止しているときや電源がオフになっているときは、誰もシステムから読み取ることができません。

この暗号化は、コンピュータが盗まれた場合に非常に役立ちます。ハッカーは、次のセクションで選択するパスフレーズを知らない限り、ディスク上のデータを読み取ることができません。

ただし、データが永久に消去されるリスクは依然としてあります。ディスクへの読み取りアクセス権がないからといって、ディスク上のパーティションを単純に削除できないわけではありません。

結果として、重要なファイルのバックアップを安全な場所に保管するようにしてください。

新しいディスク上のルートファイルシステムの暗号化

導入時に詳しく説明したように、ルートファイルシステムを暗号化する データがまったく含まれていない新しいディスクから。暗号化されたディスクはプロセスでフォーマットされるため、これは非常に重要です。

暗号化するシステムに移動して、新しいディスクを接続します。まず、現在のディスクを特定します 、おそらく「/ dev / sda」という名前で、接続したばかりのディスク(おそらく「/ dev / sdb」という名前)

名前とディスクシリアルの対応に疑問がある場合は、lsblkの「-o」オプションを使用してベンダーとシリアルを追加できます。

$ lsblk -do +VENDOR,SERIAL

この場合、データを含むディスクの名前は「/ dev / sda」で、新しいディスクの名前は「/ dev/sdb」です。

まず、はじめに指定したレイアウトを作成する必要があります。つまり、 EFIとなる1つのパーティションを作成する必要があります。 1つ1つのLUKS-LVM パーティション。

基本的なディスクレイアウトの作成

フルディスク暗号化への道のりの最初のステップは、2つの単純なパーティションから始まります:1つのEFI (MBRを使用している場合でも、将来変更したい場合に備えて)1つは私たちのLVM 用です 。

ディスクに新しいパーティションを作成するには、「fdisk」コマンドを使用します フォーマットするディスクを指定します。

$ sudo fdisk /dev/sdb

はじめに説明したように、最初のパーティションは 512 Mb になります 一方と他方はディスク上の残りのスペースを占有します。

「fdisk」ユーティリティでは、「n」オプションを使用して新しいパーティションを作成し、「 + 512M」を使用して512メガバイトのサイズを指定できます。 「。

必ずパーティションタイプをW95FAT32に変更してください。 「t」オプションを使用し、タイプとして「b」を指定します。

すばらしいです。最初のパーティションができたので、関心のあるパーティションを作成します。

2番目のパーティションの作成はさらに簡単です。

fdiskユーティリティで、「 n」を使用します 」を押して、新しいパーティションを作成し、デフォルトを維持します。つまり、「 Enter」を押すことができます。 」すべてのステップで。

完了したら、「w」を押すだけです。 変更をディスクに書き込むため。

ここで、「fdisk」コマンドを再度実行すると、ディスクで実行した変更がわかります。

$ sudo fdisk -l /dev/sdb

すばらしい!

2番目のパーティションをフォーマットする準備ができたので、それに向かいましょう。

ディスク上にLUKSとLVMパーティションを作成する

ディスクを暗号化するために、 LUKSを使用します 、の略 Linuxユニファイドキーのセットアップ 事業。

LUKSは仕様です Linuxカーネルのいくつかのバージョンに実装されているいくつかのバックエンド用。

この場合、「dm-crypt」サブモジュラーを使用します。 Linuxストレージスタックのe。

その名前が示すように、「dm-crypt」 は、物理ディスクとストレージスタックの設計方法の間に抽象化レイヤーを作成することを目的としたデバイスマッパーモジュールの一部です。

この情報は、「dm-crypt」を使用してほぼすべてのデバイスを暗号化できることを意味するため、非常に重要です。 バックエンド。

この場合、LVMパーティションのセットを含むディスクを暗号化しますが、USBメモリスティックまたはフロッピーディスクの暗号化を選択できます。

「dm-crypt」モジュールと対話するために、「 cryptsetup」を使用します。 " 指図。

もちろん、まだインストールしていない場合は、サーバーにインストールする必要があるかもしれません。

$ sudo apt-get instal cryptsetup

$ which cryptsetup

コンピュータでcryptsetupが利用できるようになったので、最初のLUKS形式のパーティションを作成します。 。

LUKSパーティションを作成するには、「 cryptsetup」を使用します。 」コマンドの後に「luksFormat ”指定されたパーティション(またはディスク)をフォーマットするコマンド。

 $ sudo cryptsetup luksFormat --type luks1 /dev/sdb2

:では、なぜ LUKS1を指定するのですか フォーマットタイプ? 2021年1月の時点で、GRUB(ブートローダー)はLUKS2暗号化をサポートしていません。 LUKS2がGRUBブートローダー用にリリースされたことに気付いた場合は、必ずコメントを残してください。

ご覧のとおり、この操作により、ディスクに保存されているすべてのデータが消去されることが通知されます。最後にフォーマットするディスクを確認し、「はい」と入力します 」準備ができたら。

直後に、パスフレーズが表示されます。 LUKSは2つの認証方法を使用します:パスフレーズ 基本的に、復号化時に入力するパスワードに基づいています。

LUKSはキーも使用できます 。キーの使用 、たとえば、ディスクの一部に保存すると、システムが自動的に処理できるようになります。

強力なパスフレーズを選択し、もう一度入力して、ディスクの暗号化が完了するまで待ちます。

完了したら、「 lsblk」で確認できます。 」コマンドを使用して、パーティションがLUKSパーティションとして暗号化されます。

素晴らしい !これで、暗号化されたパーティションができました。

$ lsblk -f 

パーティションが正しくフォーマットされていることを確認するには、「 cryptsetup」を使用できます。 」コマンドの後に「luksDump 」オプションを選択し、暗号化されたデバイスの名前を指定します 。

$ sudo cryptsetup luksDump /dev/sdb2

LUKS1」のバージョンは「1」に設定する必要があります 」形式で、キースロットの1つに暗号化されたパスフレーズが表示されます。

ディスク上に暗号化されたLVMを作成する

LUKS暗号化パーティションの準備ができたので、それを「開く」ことができます。暗号化されたパーティションを「開く」とは、単にディスク上のデータにアクセスすることを意味します。

暗号化されたデバイスを開くには、「cryptsetup」コマンドに続いて「luksOpen」、暗号化されたデバイスの名前、および名前を使用します。

$ sudo cryptsetup luksOpen <encrypted_device> <name>

この場合、デバイスに「 cryptlvm」という名前を付けることにしました。 「。

結果として、「 lsblk」を使用します 」コマンドを再度実行すると、新しいデバイスが既存のデバイスリストに追加されたことがわかります。 2番目のパーティションには、復号化されたパーティションである「cryptlvm」という名前のデバイスが含まれています。

すべての準備が整ったので、2つのLVMの作成を開始できます。1つはルートパーティション用、もう1つはスワップ用です。

まず、「 pvcreate 」を使用して、新しいディスクの物理ボリュームを作成します。 」コマンド。

# Optional, if you don't have LVM commands : sudo apt-get install lvm2

$ sudo pvcreate /dev/mapper/cryptlvm

物理ボリュームの準備ができたので、これを使用して「 cryptvg」という名前のボリュームグループを作成できます。 「。

$ sudo vgcreate cryptvg /dev/mapper/cryptlvm

ボリュームグループの準備ができたので、2つの論理ボリュームを作成できます。

この場合、最初のパーティションは13Gbのパーティションであり、スワップパーティションが残りのスペースを占有します。 特定のケースに合わせて、これらの番号を変更してください。

ルートファイルシステムをホストするために、EXT4ファイルシステムを作成します 論理ボリューム上。

$ sudo lvcreate -n lvroot -L 13G cryptvg

$ sudo mkfs.ext4 /dev/mapper/cryptvg-lvroot

スワップパーティションの作成 「lvcreate」と「mkswap」を使用して、同じ手順を使用して実現できます。

$ sudo lvcreate -n lvswap -l 100%FREE cryptvg

$ sudo mkswap /dev/mapper/cryptvg-lvswap

すごい! パーティションが作成されたので、次に、既存のルートファイルシステムを新しく作成したルートファイルシステムに転送します。

ファイルシステム全体を暗号化されたディスクに転送する

ファイルシステム全体を転送する前に、十分なスペースがあることを確認することをお勧めします。 宛先ドライブ上。

$ df -h 

ファイルシステム全体を新しく作成したパーティションに転送するには、「 rsync」を使用します 」コマンド。

新しく作成した論理ボリュームをマウントします ファイルとフォルダを宛先ドライブに再帰的にコピーし始めます。

$ sudo mount /dev/mapper/cryptvg-lvroot /mnt

$ sudo rsync -aAXv / --exclude="mnt" /mnt --progress

転送する必要のあるデータの量によっては、このプロセスにかなりの時間がかかる場合があります。

しばらくすると、ファイルシステム全体が暗号化されたドライブにコピーされます。これで、「/boot」 が暗号化されている場合は、それに応じてGRUBのステージ1を再インストールする必要があります。

GRUBブートローダーのインストールと構成

では、なぜそれに応じてGRUBを再インストールして再構成する必要があるのでしょうか?

この質問に答えるには、 BIOS/MBRの従来の起動プロセスを使用する場合のシステムの起動方法に関する基本的な考え方が必要です。

はじめに説明したように、GRUBは2つ(場合によっては3つ)の部分に分かれています:GRUBステージ1とGRUBステージ2 。ステージ1は、ステージ2の場所のみを検索します。多くの場合、「/boot」にあります。 ファイルシステムのフォルダ。

ステージ2は、多くのタスクを担当します。必要なモジュールのロード、カーネルのメモリへのロード、およびinitramfsプロセスの開始。

ご存知のとおり、ここではステージ2が暗号化されているため、ステージ1(ディスクの最初の512バイトにある)に最初に復号化する必要があることを通知する必要があります。

GRUB Stage 1&2を再インストールします

GRUBの最初のステージを再インストールするには、最初に「 cryptomount」を有効にする必要があります 」を使用すると、GRUB環境で暗号化されたデバイスにアクセスできます。

これを実現するには、「/ etc / default/grub」を編集する必要があります。 ファイルを作成し、「GRUB_ENABLE_CRYPTODISK=y」を追加します オプション。

ただし、現在、暗号化しようとしているシステムに座っています。結果として、コマンドを正しく実行するには、新しいドライブにchrootする必要があります。

暗号化されたドライブのChroot

暗号化されたドライブにchrootするには、次のコマンドを実行する必要があります。

$ sudo mount --bind /dev /mnt/dev
$ sudo mount --bind /run /mnt/run

$ sudo chroot /mnt/

$ sudo mount --types=proc proc /proc
$ sudo mount --types=sysfs sys /sys

これらのコマンドを実行したので、暗号化されたドライブのコンテキストにいるはずです。

$ vi /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y

GRUBのドキュメントに記載されているように、このオプションは、暗号化されたデバイスを検索し、それらを復号化するためにコマンドを追加するようにGRUBを構成します。

ステージ1が構成されたので、grub-installコマンドを使用してステージ1をMBRにインストールできます。 。

$ grub-install --boot-directory=/boot /dev/sdb

:注意してください。「 / dev / sdb」を指定する必要があります 」であり、「/ dev/sdb1」ではありません。

お気づきかもしれませんが、GRUBのインストールにオプションを提供しない場合、デフォルトで「 i386-pc」が使用されます。 」インストール(BIOSベースのファームウェア用に設計されています)。

GRUBStage2を再インストールします

上記の手順を使用して、ステージ1が更新されましたが、暗号化されたディスクを処理していることをステージ2に通知する必要もあります。

これを実現するには、「/ etc / default / grub」に移動して、GRUBステージ2に別の行を追加します。

GRUB_CMDLINE_LINUX="cryptdevice=UUID=<encrypted_device_uuid> root=UUID=<root_fs_uuid>"

これは、暗号化されたドライブがどこにあり、ルートパーティションがどこにあるかをGRUBの第2ステージに伝えるため、重要な行です。

必要なUUIDを特定するには、「-f」オプションを指定して「lsblk」コマンドを使用できます。

$ lsblk -f 

これらのUUIDを使用して、GRUB構成ファイルに次の行を追加します。

GRUB_CMDLINE_LINUX="cryptdevice=UUID=1b9a0045-93d5-4560-a6f7-78c07e1e15c4 root=UUID=dd2bfc7f-3da2-4dc8-b4f0-405a758f548e"

現在のGRUBインストールを更新するには、「 update-grub2」を使用できます chrootされた環境での「」コマンド。

$ sudo update-grub2

GRUBのインストールを更新したので、GRUBメニュー(つまり、ステージ2)を変更する必要があります。「/ boot / grub / grub.cfg」を調べると、次の内容が表示されます。 ファイル。

ご覧のとおり、GRUB構成ファイルが変更され、システムは暗号化されたドライブを見つけるために「cryptomount」を使用しています。

システムを正しく起動するには、次のことを確認する必要があります:

  • cryptodisk、luks、lvmなどの正しいモジュールをロードしています;
  • cryptomount 」命令が正しく設定されている;
  • カーネルは「cryptdevice」を使用してロードされます 」前のセクションで設定した命令。
  • 指定されたUUIDは正しいです:「 cryptdevice 」1つはLUKS2暗号化パーティションを指し、「ルート」1つはext4ルートファイルシステムを指します。

crypttabおよびfstabファイルを変更する

initramfsの最初のステップの1つは、「/ etc/crypttab」を使用してボリュームをマウントすることです。 および「/etc/fstab」 ファイルシステム上のファイル。

結果として、また新しいボリュームを作成するため、正しいUUIDをファイルに配置するためにそれらのファイルを変更する必要がある場合があります。

まず、「/ etc/crypttab」にアクセスします。 ファイル(まだ存在しない場合は作成できます)を作成し、次のコンテンツを追加します

$ nano /etc/crypttab

# <target name>   <source device>        <key file> <options>
  cryptlvm        UUID=<luks_uuid>       none       luks

暗号化されたデバイスのUUIDがわからない場合は、「 blkid」を使用できます。 」を使用して情報を取得します。

$ blkid | grep -i LUKS 

これで、 crypttab ファイルが変更された場合は、それに応じてfstabを変更するだけで済みます。

$ nano /etc/fstab

# <file system>       <mount point>   <type>  <options>             <dump>    <pass>
UUID=<ext4 uuid>      /               ext4    errors=remount-ro     0         1

繰り返しになりますが、ext4ファイルシステムのUUIDがわからない場合は、「 blkid」を使用できます。 」コマンドをもう一度実行します。

$ blkid | grep -i ext4

ほぼ完了です。

GRUBと構成ファイルが正しく構成されたので、initramfsイメージを構成するだけで済みます。

initramfsイメージを再構成する

すべてのブートスクリプトの中で、initramfsは前の章で指定したルートファイルシステムを探します。

ただし、ルートファイルシステムを復号化するには、正しいinitramfsモジュール、つまり「 cryptsetup-initramfs」を呼び出す必要があります。 " 1。 chrootされた環境では、次のコマンドを実行できます:

$ apt-get install cryptsetup-initramfs 

initramfsイメージにcryptsetupモジュールを含めるには、必ず「 update-initramfs」を実行してください。 」コマンド。

$ update-initramfs -u -k all

以上です!

システム上に完全に暗号化されたディスクを作成するために必要なすべての部品を正常に組み立てました。これで、コンピュータを再起動して、新しい起動プロセスを確認できます。

暗号化されたデバイスで起動

起動時に表示される最初の画面は、GRUBの最初のステージであり、GRUBの2番目のステージを復号化しようとしています。

このパスワードプロンプトが表示された場合は、ステージ1の構成にエラーがないことを意味します。

:この画面は通常のキーボードレイアウトに従わない場合があることに注意してください 。結果として、間違ったパスワードプロンプトがある場合は、たとえばUSキーボードまたはAZERTYキーボードを使用しているふりをしてみてください。

正しいパスワードを入力すると、GRUBメニューが表示されます。

この画面が表示されている場合は、ステージ1がステージ2を開くことができたことを意味します。「Ubuntu」オプションを選択して、システムで起動できます。

次の画面で、パスフレーズをもう一度入力するように求められます。

ブートパーティションが暗号化されているため、これはごく普通のことです。結果として、ステージ2のロックを解除するには1つのパスフレーズが必要であり、ルートファイルシステム全体のロックを解除するには1つのパスフレーズが必要です。

幸いなことに、initramfsイメージにキーファイルを埋め込むことで、これを回避する方法があります:。そのために、ArchLinuxの寄稿者はを書きました このテーマに関する優れたチュートリアル

この場合、パスフレーズを入力してEnterキーを押します。

しばらくすると、初期化プロセスが完了すると、ユーザーインターフェイスのロック画面が表示されます。

おめでとうございます。Linuxでシステム全体を正常に暗号化しました!

既存のディスク上のルートファイルシステムの暗号化

場合によっては、コンピューター上のディスクの1つを削除する機能なしで、既存のディスクを暗号化する必要があります。このケースは、たとえば保証期間中のディスクがある場合に発生する可能性があります。

この場合、プロセスは非常に簡単です:

  • 起動可能なUSBを作成する (またはリムーバブルデバイス)選択したディストリビューションのISOを含みます。
  • デバイスを使用して、ディストリビューションのLiveCDを起動してログインします。
  • LiveCDから、ルートディストリビューションを含むハードディスクを特定し、バックアップを作成します。
  • 選択したフォルダにプライマリパーティションをマウントし、前の章の指示に従います。

では、リムーバブル不可能なディスクを暗号化する場合、なぜLiveCDを使用する必要があるのでしょうか。

メインのプライマリディスクを暗号化する場合は、マウントを解除する必要があります。ただし、これはシステムのルートパーティションであるため、アンマウントすることはできません 、結果として、LiveCDを使用する必要があります。

インストールウィザードからのルートファイルシステムの暗号化

場合によっては、一部のディストリビューターは暗号化プロセスをインストールウィザードに直接組み込みます。

既存のファイルシステムをあるシステムから別のシステムに転送することを考えていない場合は、このオプションを使用したくなるかもしれません。

Ubuntu 20.04を例にとると、インストールプロセスでは、ディスク構成ウィザードでディスク暗号化が提案されます。

このオプションを選択すると、前のセクションで行ったものと同様の設定になります。ただし、ほとんどのディストリビューションは、「/boot」を暗号化しないことを選択しています。 フォルダ。

「/boot」フォルダを暗号化する場合は、このチュートリアルの最初のセクションを読むことをお勧めします。

トラブルシューティング

オープンソースは絶えず変化するため、このチュートリアルの手順を注意深く実行しても、システムを起動できない可能性があります。

ただし、エラーの原因はおそらく無限であり、すべてのユーザーに固有であるため、推奨できるすべての問題を列挙しても意味がありません。

ただし、ほとんどの場合、起動プロセスのどのステップで失敗しているかを知ることは非常に重要です。

「grubrescue」プロンプトが表示された画面が表示された場合は、おそらくステージ1でスタックしているため、ブートローダーは2番目のステージを含むディスクを見つけることができませんでした。

initramfsプロンプトが表示されている場合 、おそらく初期化プロセス中に何か問題が発生したことを意味します:

  • crypttabファイルとfstabファイルにマウントするファイルシステムを指定しましたか?
  • すべてのモジュールが現在initramfsイメージにロードされていることを確認しますか? たとえば、cryptsetupまたはlvmモジュールが不足していませんか?

以下は、このチュートリアルの執筆中に興味深いと感じたいくつかのリソースです。それらはあなたの問題に対するいくつかの答えを持っているかもしれません:

  • システム全体の暗号化:ArchLinuxの同様のチュートリアル;
  • Ubuntuでの手動システム暗号化:ルートファイルシステムでchrootするために使用される手順。

結論

このチュートリアルでは、 LUKS仕様を使用して、「/boot」フォルダを使用してルートファイルシステム全体を暗号化する方法を学習しました。

また、Linuxの起動プロセスと、オペレーティングシステムを起動するためにシステムが実行するさまざまな手順についても学びました。

システム全体の暗号化を実現する 非常に長いですが、Linuxとオープンソースの世界を深く掘り下げたいと考えているユーザーにとっては非常に興味深いものです。

Linuxシステム管理に興味がある場合 、他のチュートリアルを読み、専用のセクションに移動してください。


Linux
  1. Linuxシステムリカバリにsystemd-nspawnを使用する方法

  2. Linux – Gnomeはルート権限なしでどのように再起動しますか?

  3. Linux でファイルシステムの inode 使用率を調べる方法

  1. Linuxでディスクをパーティション分割する方法

  2. Linuxでディスクiノード数を増やす方法

  3. Linuxでホスト名を変更する方法

  1. 単一のLinuxファイルシステムを暗号化する方法

  2. Linux ライブ システムから VHD ディスク イメージを作成する方法を教えてください。

  3. Linux ディスク ドライブのモデル番号を調べるには?