DM-Cryptを使用してUbuntuVPSで暗号化されたボリュームを作成する方法

提供:Dev Guides
移動先:案内検索

ステータス:非推奨

この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。

理由: Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達しました and no longer receives security patches or updates. This guide is no longer maintained.

代わりに参照してください:このガイドは参照として役立つ場合がありますが、他のUbuntuリリースでは機能しない場合があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。


序章

インターネットにアクセス可能なコンピュータに保存されているあらゆる種類のデータの主な関心事はセキュリティです。 すべてのストレージプロバイダーは、データを自分の側から保護するように注意する必要がありますが、これは、サーバー上のサービスのソフトウェアの欠陥、ソーシャルエンジニアリング、およびその他の多くの手段を通じて不正アクセスが発生する可能性がある場合に限ります。 つまり、悪意のある人の手に渡ることができないデータの暗号化とセキュリティの所有権を取得する必要があります。

Linuxシステムでコンテンツを暗号化する方法はたくさんあります。 これらのオプションの多くは、個別のパーティション、デバイス、またはファイルシステムの暗号化に依存しています。 VPSのようなシステムを扱っている場合、これはオプションではないかもしれません。 ただし、暗号化されたデータを保存するためのデバイスとして動作するファイルを作成するなど、他のオプションもあります。

このガイドでは、dm-cryptツールを使用して、機密データの保存に使用できる大きな暗号化ファイルを作成します。 その後、このファイルを通常のパーティションであるかのようにマウントできます。 これはUbuntu12.04VPSインスタンスでデモンストレーションしますが、他のディストリビューションでも同様の手順で機能するはずです。

基本的な考え方

dm-cryptは、透過的なディスク暗号化を提供するカーネルレベルの暗号化メカニズムです。 これは、マウント後に追加の操作を行うことなく、ファイルをすぐに利用できることを意味します。

ほとんどの暗号化スキームはパーティションレベルでの暗号化に依存していますが、デバイスマッピングターゲットとしてマウントするファイルを使用することでこれを回避できます。 これを行うには、ファイルをループデバイスとしてマウントします。 その後、他のパーティションやデバイスと同じように、このマウントされた「デバイス」にデータを保存できます。

あらゆる種類の暗号化の実装を検討するときは、いくつかの長所と短所を比較検討する必要があります。 まず第一に、暗号化には常にパフォーマンスのオーバーヘッドが伴います。 これは重要な場合と重要でない場合があります。これを大規模に実装する前に、最初に小さなファイルを作成してテストを実行することをお勧めします。

もう1つの考慮事項は、回復です。 暗号化は、その主要な機能により、回復をより困難にします。 パスワードを忘れると、データは事実上永久に失われます。 LUKSヘッダーが上書きまたは破損した場合、データも永久に失われます。 システムが起動しておらず、暗号化されたファイルの情報にアクセスする必要がある場合は、アクセスするために、より複雑なプロセスを実行する必要があります。

データを暗号化することを決定するときは、何か問題が発生した場合にそのデータが失われる可能性があることに注意する必要があります。 必ずデータをバックアップする必要があります。dm-cryptはその方法に関する多くの情報をここに提供します。

dm-cryptツールのインストール

カーネルレベルの機能はディストリビューションで利用できるはずですが、実際のフロントエンドツールはおそらくデフォルトではインストールされていません。 このガイドのすべてのコマンドは、rootとして実行されます。

ローカルパッケージインデックスを更新し、dm-cryptツールをインストールすることで、必要なツールを入手できます。

apt-get update
apt-get install cryptsetup

これにより、dm-cryptボリュームを操作するために必要なすべての依存関係とヘルパーユーティリティが取り込まれます。

スパースでない空のファイルを作成する

暗号化されたデータを保存するには、ストレージデバイスとして機能するファイルを作成する必要があります。

空のファイルを作成したいのですが、それをスパースファイルにすることはできません。スパースファイルは、作成時に実際には完全なファイルサイズを割り当てません。 これはさまざまな方法で実行できます。

この操作を実行する最も簡単で迅速な方法は、fallocateコマンドを使用することです。 これにより、ファイルに必要な量のディスクが即座に割り当てられ、指定したファイル名が割り当てられます。

たとえば、rootユーザーのホームディレクトリに512MBのファイルを作成するには、次のように入力します。

fallocate -l 512M /root/test1

これは信じられないほど高速ですが、これらのブロックで使用されていた古い削除済みデータをゼロまたはランダムデータで上書きしないという欠点があります。 ファイルのどの部分に暗号化されたデータが書き込まれているかを他の人に知られたくないので、これはおそらくあなたの目的には望ましくありません。

もう1つの方法は、ユビキタスなddコマンドを使用することです。 /dev/zero疑似デバイスを使用して、ファイルにプロビジョニングしている領域全体にゼロを書き込むことができます。 次のように入力すると、上記のファイルと同様のファイルを作成できます。

dd if=/dev/zero of=/root/test2 bs=1M count=512

代わりに、実際に書き込まれる暗号化されたデータを模倣するランダムデータを書き込みたい場合は、代わりにランダム疑似デバイスの1つを使用できます。 特に大きなファイルを割り当てる場合は、これにはかなり時間がかかりますが、この目的でファイルをプロビジョニングするには、ランダムデバイスを使用するのがおそらく最善の方法です。

dd if=/dev/urandom of=/root/test3 bs=1M count=512

/dev/random疑似デバイスを使用することは、これを行うためのさらに安全な方法ですが、これも時間を犠牲にします。

dd if=/dev/random of=/root/test4 bs=1M count=512

ファイルにdm-cryptLUKSコンテナを作成する

作成したファイルをフォーマットする前に、ファイル内にLUKSパーティションを作成する必要があります。 LUKS 、またはLinux Unified Key Setupは、ディスク暗号化の標準です。 これは、他のすべてのデータが上に配置される基本的なレイヤーです。

dm-cryptツールは、このレイヤーを作成するための非常に簡単な方法を提供します。 このコマンドでコンテナを作成できます。

cryptsetup -y luksFormat /root/test1

ファイルの内容を上書きすることを確認する必要があります。 誤って間違ったファイルを上書きしないように、参照しているファイルを再確認してください。 確認したら、「はい」と入力して続行します。

次に、データを復号化するために必要なパスワードを設定するように求められます。 覚えておいてください:このパスワードを紛失すると、作成するファイルシステムに保存されているデータはすべて失われます。 このパスワードは、紛失しない場所に安全に保管するか、忘れないようにしてください。 -yオプションを使用すると、パスワードを確認して、間違いがないことを確認できます。

ここでファイルをチェックアウトすると、LUKS暗号化ファイルとして知られていることがわかります。

file /root/test1

test1: LUKS encrypted file, ver 1 [aes, cbc-essiv:sha256, sha1] UUID: 1851db36-3223-4ee1-8e3e-cc65c49e05f3

ファイルの上にコンテナが構築されたので、次のようにコンテナを開くことができます。

cryptsetup luksOpen / path / to / LUKS / file Mapping_name

この例では、/root/test1ファイルを使用して、volume1という名前を付けます。

cryptsetup luksOpen /root/test1 volume1

ファイルに設定したパスワードを入力する必要があります。これは、ファイルを復号化するために必要です。

これにより、LUKSデバイスが開き、指定した名前にマップされます。この場合、/dev/mapper/volume1にファイルが作成されます。 これにより、基本的にファイルがローカルループバックデバイスとして開かれ、システムの残りの部分が実際のデバイスであるかのようにファイルを処理できるようになります。

ファイルシステムの作成とマウント

LUKSコンテナが作成され、システムで通常のデバイスとして開かれたので、通常のデバイス操作を開始できます。

まず、デバイス上でファイルシステムをフォーマットして作成する必要があります。 好きなファイルシステムを選択できます。 標準のExt4ファイルシステムを使用しますが、サーバーが正常に処理するように構成されている任意のファイルシステムを使用できます。

私たちの目的のために、私たちが使用したいコマンドは次のとおりです。

mkfs.ext4 -j /dev/mapper/volume1

これで、ファイルに含まれているLUKSコンテナの上にファイルシステムが書き込まれました。 デバイスのように扱われるため、次のステップは論理的にデバイスをマウントすることです。

意味のあるマウント場所を作成しましょう。

mkdir /mnt/files

ここで、ファイルシステムをマウントする必要があります。

mount /dev/mapper/volume1 /mnt/files

これで、使用可能なファイルシステムの一部としてファイルを表示できます。

df -h

Filesystem           Size  Used Avail Use% Mounted on
/dev/vda              59G  2.7G   54G   5% /
udev                 2.0G   12K  2.0G   1% /dev
tmpfs                791M  216K  791M   1% /run
none                 5.0M     0  5.0M   0% /run/lock
none                 2.0G     0  2.0G   0% /run/shm
/dev/mapper/volume1  486M  2.3M  459M   1% /mnt/files

ファイル内の使用可能なスペースの一部が、暗号化のオーバーヘッドとファイルシステムのオーバーヘッドによって占められていることがわかります。 しかし、私たちはまだほとんどのスペースを持っています。

ファイルをマウントした場所を確認すると、他のExt4ファイルシステムとまったく同じようにプロビジョニングされていることがわかります。

cd /mnt/files
ls

lost+found

通常のlost+foundリカバリディレクトリが作成されました。 これで、この場所にデータを書き込むことができ、ファイルに暗号化されて配置されます。 たとえば、/etcディレクトリを取得して、マウント場所にコピーするだけです。

cp -r /etc/* /mnt/files

ファイルシステムのアンマウントとLUKSコンテナのクローズ

データの書き込みまたは読み取りが終了したら、通常の方法を使用してファイルシステムをアンマウントします。

cd
umount /mnt/files

これにより、/dev/mapper/volume1の場所が/mnt/filesのマウントポイントから切り離されます。

df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  2.7G   54G   5% /
udev            2.0G   12K  2.0G   1% /dev
tmpfs           791M  216K  791M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm

ただし、ファイルはまだ開いており、/dev/mapper/volume1としてシステムで使用できます。

ls /dev/mapper/

control  volume1

controlデバイスは、他のマップされたデバイスを作成するために使用されるデバイスです。 ここにあるはずなので、これは無視しても問題ありません。

volume1ファイルを閉じてその内容を保護するには、ファイルを閉じる必要があります。基本的に、ファイルからデバイスマッピングを削除します。 これは、パスワードを再度入力するまで、ファイルのコンテンツにアクセスできなくなることを意味します。

cryptsetup luksClose volume1

デバイスマッピングディレクトリを確認すると、volume1デバイスが削除されていることがわかります。

ls /dev/mapper

control

これでボリュームがマウント解除され、LUKSコンテナーが閉じられ、データが完全に暗号化され、パスワードの背後で保護されます。

簡単な使用手順

最初の作成手順を日常の使用から分離するために、ファイルを使用するために必要なプロセスをすばやく実行します。

LUKSファイルができたので、それを使用したいときは、LUKSファイルを開くだけです。

cryptsetup luksOpen /root/test1 volume1

ここでは、最初に使用した名前とは異なる名前を選択できます。ファイルが開いている間だけ問題になります。 ボリュームのパスワードを入力します。

その後、マップされたデバイスをマウントします。

mount /dev/mapper/volume1 /mnt/files

これで、ファイルの内容にアクセスして読み取りまたは書き込みを行うことができます。

終了したら、デバイスを再度アンマウントする必要があります。

umount /mnt/files

デバイスがマウント解除されたら、LUKSファイルを再度閉じてデータを暗号化できます。

cryptsetup luksClose volume1

結論

これで、機密データを保存するための暗号化ファイルを作成できるようになります。 多くの場合、パフォーマンスと使いやすさおよびセキュリティの間にはトレードオフがあることを忘れないでください。 また、パスワードを復元する方法は絶対にないため、設定したパスワードを紛失してはならないことに注意してください。

データを保護するために必要な考慮事項はこれだけではありませんが、Linuxサーバーのセキュリティを強化するために、これをツールボックスに追加できることを願っています。

ジャスティン・エリングウッド