dm-crypt/root 以外のファイルシステムの暗号化

提供: ArchWiki
移動先: 案内検索

dm-crypt に戻る。

以下は dm-crypt で root 以外のファイルシステムを暗号化するサンプルです。

概要

セカンダリファイルシステムの暗号化は基本的に重要なデータだけを保護します。オペレーティングシステムやプログラムファイルは暗号化されないままです。USB ドライブなどの外部メディアを暗号化したいときは、別のコンピュータに安全に持っていけるようになるので便利です。また、アクセスする人ごとに暗号化するデータを選択することもできます。

dm-crypt はブロックレベルの暗号化レイヤーなので、完全なデバイスやパーティションloop デバイスなどしか暗号化できません。個別のファイルを暗号化するには、eCryptfsEncFS などのファイルシステムレベルの暗号化レイヤーが必要です。個人データを守る方法に関する一般的な情報はディスク暗号化を見て下さい。

パーティション

この例では /home パーティションの暗号化を説明しますが、root 以外の同じようなパーティションなら同じ方法で暗号化できます。

ヒント: 特定のユーザーの /home ディレクトリをパーティション上に配置することも、全てのユーザーの /home ディレクトリで共通のパーティションを作成することもできます。

まず、パーティションを完全に消去することでパーティションの準備をしてください。Dm-crypt/ドライブの準備#ハードディスクドライブの完全消去 を参照。

そして次のコマンドで LUKS ヘッダーを設定:

# cryptsetup options luksFormat device

device は先に作成したパーティションに置き換えて下さい。options に利用できるオプションなどは Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション を見て下さい。

暗号化されたパーティションにアクセスできるようにするには、デバイスマッパーでロックを解除します:

# cryptsetup open device name

パーティションを解錠した後は /dev/mapper/name から利用できるようになります。お好きなファイルシステムを作成してください:

# mkfs.fstype /dev/mapper/name

ファイルシステムを /home にマウントするか、誰か一人のユーザーにだけアクセス可能にしたい場合は /home/username にマウントします。#手動でマウント・アンマウント を見て下さい。

ヒント: 一度アンマウントしてからマウントしてみて、正しくマッピングされているか確認してください。

手動でマウント・アンマウント

パーティションをマウントするには:

# cryptsetup --type luks open device name
# mount -t ext4 /dev/mapper/name /mnt/home

パーティションをアンマウントするには:

# umount /mnt/home
# cryptsetup close name
ヒント: GVFS でも暗号化パーティションをマウントできます。GVFS に対応しているファイルマネージャ (例: Thunar) を使ってパーティションをマウントすると、パスワードダイアログが表示されます。他のデスクトップを使用している場合、zulucryptAUR で GUI が利用できます。

ロック解除とマウントの自動化

パーティションのロックの解除とファイルシステムのマウントを自動化する方法は複数あります。

起動時

/etc/crypttab 設定ファイルを使用することで、起動時に systemd によって自動的にファイルが読み取られロックが解除されます。全てのユーザーの home パーティションに共通のパーティションを使用する場合や、他の暗号化ブロックデバイスを自動的にマウントしたい場合に推奨される方法です。

詳しくは Dm-crypt/システム設定#crypttab を見て下さい。設定例は Dm-crypt/システム設定#起動時にマウント を見て下さい。

ユーザーのログイン時

pam_exec を使って、ユーザーのログイン時にパーティションを解錠できます (cryptsetup open): 特定のユーザーのホームディレクトリだけがパーティションにある場合に推奨される方法です。dm-crypt/ログイン時にマウントを見てください。

pam_mount を使ってユーザーのログイン時に解錠することもできます。

Loop デバイス

ループデバイスを使って util-linux の標準ツール losetup でファイルにブロックデバイスをマップすることができます。ファイルにはファイルシステムが含まれ、他のファイルシステムと同じように使うことが可能です。暗号化されたコンテナを作成するツールとしては TrueCrypt が有名ですが、ループデバイスファイルシステムを使って LUKS で暗号化することで同じような機能が実現できると考えてください。

まず、適切な乱数生成器を使用して、暗号化するコンテナを作成します:

# dd if=/dev/urandom of=/bigsecret bs=1M count=10

このコマンドで10メガバイトの容量の bigsecret ファイルが作成されます。

ノート: 後でコンテナの大きさを変更しなくてもよいように、暗号化するファイルの合計容量も大きいサイズを割り当ててください。内部ファイルシステムによって関連付けられるメタデータも保存する必要があるためです。LUKS モードを使用する場合、メタデータヘッダーは1〜2メガバイトも必要になります。

次にデバイスノード /dev/loop0 を作成して、コンテナをマウント・利用できるようにします:

# losetup /dev/loop0 /bigsecret
ノート: /dev/loop0: No such file or directory というエラーが吐かれる場合、先に modprobe loop でカーネルモジュールをロードしてください。最近は (カーネル 3.2) ループデバイスは必要に応じて作成されるようになっています。新しいループデバイスの作成は # losetup -f で出来ます。

ここからの作業は #パーティション と同じです。違うのはコンテナは既にランダム化されており消去する必要がないということだけです。

ヒント: dm-crypt のコンテナは高い柔軟性を持っています。Tomb の特徴とドキュメントを見てください。Tomb は高速かつ柔軟な管理ができる dm-crypt スクリプトラッパーです。

手動でマウント・アンマウント

コンテナをアンマウントするには:

# umount /mnt/secret
# cryptsetup close secret
# losetup -d /dev/loop0

コンテナをマウントするには:

# losetup /dev/loop0 /bigsecret
# cryptsetup --type luks open /dev/loop0 secret
# mount -t ext4 /dev/mapper/secret /mnt/secret