Ubuntu VPS上で暗号化ボリュームを作成するためのDM-Cryptの使用方法
ステータス: 廃止された
この記事は、もはやサポートされていないUbuntuのバージョンについて説明しています。現在、Ubuntu 12.04を実行しているサーバーを運営している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。
- Ubuntu 14.04にアップグレードします。
- Ubuntu 14.04からUbuntu 16.04へのアップグレード
- サーバーデータをサポートされているバージョンに移行する
理由: Ubuntu 12.04は2017年4月28日にサポートが終了(EOL)し、もはやセキュリティパッチやアップデートを受けることはありません。このガイドはもはや維持されていません。
代わりに見る: このガイドは参考としてまだ役立つかもしれませんが、他のUbuntuリリースでは機能しない可能性があります。もし可能であれば、使用しているUbuntuのバージョンに対して書かれたガイドを使用することを強くお勧めします。最新のバージョンを見つけるには、ページ上部の検索機能を利用できます。
紹介
インターネットにアクセス可能なコンピュータに保存されているデータのセキュリティは、最優先の懸念事項であるべきです。すべてのストレージプロバイダーが自分たちの側からデータを保護するために注意を払うべきですが、これはサーバー上のサービスのソフトウェアの欠陥やソーシャルエンジニアリング、その他多くの手段を通じて不正アクセスが発生する可能性があるため、限界があります。要するに、あなたが間違った手に渡ることを許せないデータの暗号化とセキュリティについては、自分自身で責任を持つべきです。
Linuxシステム上でコンテンツを暗号化する方法は多くあります。これらのオプションの多くは、別々のパーティション、デバイス、またはファイルシステムを暗号化することに依存しています。VPSのようなシステムを扱っている場合、これは選択肢ではないかもしれません。しかし、暗号化されたデータを保存するためにデバイスとして機能するファイルを作成するなど、他の選択肢もあります。
このガイドでは、dm-cryptツールを使用して、大きな暗号化ファイルを作成し、そのファイルを使って機密データを保存します。次に、このファイルを通常のパーティションのようにマウントできます。これはUbuntu 12.04のVPSインスタンスでデモンストレーションを行いますが、他のディストリビューションでも同様の手順が機能するはずです。
基本的なアイデア
dm-cryptは、透明なディスク暗号化を提供するカーネルレベルの暗号化メカニズムです。つまり、マウント後に追加の操作なしですぐにファイルが利用可能になります。
ほとんどの暗号化スキームがパーティションレベルでの暗号化に依存している一方で、デバイスマッピングターゲットとしてマウントするファイルを使用することでこれを回避できます。これは、ファイルをループデバイスとしてマウントすることで実現します。それから、このマウントした「デバイス」にデータを保存することができ、他のパーティションやデバイスと同様に扱うことができます。
暗号化を実装することを検討する際には、いくつかの利点と欠点を考慮する必要があります。まず第一に、暗号化には常にパフォーマンスオーバーヘッドが伴います。これは重要である場合もそうでない場合もありますので、まずは小さなファイルを作成してテストを行い、その後に大規模での実装を行うことをお勧めします。
別の考慮事項は回復です。暗号化はその主な機能により、回復をより困難にします。パスワードを忘れると、データは実質的に永遠に失われます。LUKSヘッダーが上書きされるか、損傷するとデータも永遠に失われます。システムが起動しない場合に暗号化されたファイル内の情報にアクセスする必要があるときは、アクセスを得るためにより複雑なプロセスを経なければなりません。
データを暗号化する決定を下す際には、何か問題が発生した場合にそのデータを失う可能性があることを認識しておく必要があります。データのバックアップを確実に行うべきであり、dm-cryptはその方法について多くの情報をここで提供しています。
dm-cryptツールのインストール
カーネルレベルの機能はあなたのディストリビューションに利用できるはずですが、実際のフロントエンドツールはデフォルトではインストールされていない可能性があります。このガイドのすべてのコマンドはrootとして実行されます。
必要なツールは、ローカルパッケージインデックスを更新し、dm-cryptツールをインストールすることで入手できます:
apt-get update
apt-get install cryptsetup
これにより、dm-crypt ボリュームを操作するために必要なすべての依存関係と補助ユーティリティが取り込まれます。
非スパースの空ファイルを作成する
暗号化されたデータを保存するために、ストレージデバイスとして機能するファイルを作成する必要があります。
私たちは空のファイルを作成したいのですが、それがスパースファイルであることはできません。スパースファイルは作成時に実際のファイルサイズを完全に割り当てないからです。これをさまざまな方法で行うことができます。
この操作を行う最も簡単で迅速な方法は、fallocate コマンドを使用することです。このコマンドは、ファイル用に希望するディスクの量を即座に割り当て、そのファイル名を指定します。
例えば、ルートユーザーのホームディレクトリに512MBのファイルを作成するには、次のように入力します:
fallocate -l 512M /root/test1
これは非常に速いですが、これらのブロックで以前使用されていた古い削除データをゼロやランダムデータで上書きしないという欠点があります。おそらくこれはあなたの目的には望ましくないでしょう。なぜなら、私たちは人々がファイルのどの部分に暗号化データが書き込まれているかを判断できるようにしたくないからです。
別の選択肢は、普遍的な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-crypt LUKSコンテナを作成する
私たちが作成したばかりのファイルをフォーマットする前に、そのファイル内にLUKSパーティションを作成するべきです。LUKS、つまりLinux Unified Key Setupは、ディスク暗号化の標準です。これは私たちの他のデータがその上に存在するための基本的なレイヤーです。
dm-cryptツールは、この層を作成する非常に簡単な方法を提供します。このコマンドでコンテナを作成できます。
cryptsetup -y luksFormat /root/test1
ファイルの内容を上書きすることを確認する必要があります。誤って別のファイルを上書きしないように、参照しているファイルを再確認してください。確認ができたら、「YES」と入力して続行してください。
次に、データを復号化するのに必要なパスワードを設定するよう求められます。覚えておいてください: このパスワードを失うと、私たちが作成するファイルシステムに保存されたデータは失われます。このパスワードを失われない場所に安全に保管するか、必ず覚えておいてください。-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
これにより、/mnt/filesのマウントポイントから/dev/mapper/volume1の場所が切り離されます:
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
コントロールデバイスは、他のマッピングされたデバイスを作成するために使用されるデバイスです。これはここにあるべきものであるため、安全に無視できます。
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サーバーのセキュリティを強化できることを願っています。
