dm-crypt/root 以外のファイルシステムの暗号化
dm-crypt に戻る。
以下は dm-crypt で root 以外のファイルシステムを暗号化するサンプルです。
目次
概要
セカンダリファイルシステムの暗号化は基本的に重要なデータだけを保護します。オペレーティングシステムやプログラムファイルは暗号化されないままです。USB ドライブなどの外部メディアを暗号化したいときは、別のコンピュータに安全に持っていけるようになるので便利です。また、アクセスする人ごとに暗号化するデータを選択することもできます。
dm-crypt はブロックレベルの暗号化レイヤーなので、完全なデバイスやパーティション、loop デバイスなどしか暗号化できません。個別のファイルを暗号化するには、eCryptfs や EncFS などのファイルシステムレベルの暗号化レイヤーが必要です。個人データを守る方法に関する一般的な情報はディスク暗号化を見て下さい。
パーティション
この例では /home
パーティションの暗号化を説明しますが、root 以外の同じようなパーティションなら同じ方法で暗号化できます。
まず、パーティションを完全に消去することでパーティションの準備をしてください。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
ロック解除とマウントの自動化
パーティションのロックの解除とファイルシステムのマウントを自動化する方法は2つあります。
Crypttab
/etc/crypttab
設定ファイルを使用することで、起動時に systemd によって自動的にファイルが読み取られロックが解除されます。全てのユーザーの home パーティションに共通のパーティションを使用する場合や、他の暗号化ブロックデバイスを自動的にマウントしたい場合に推奨される方法です。
詳しくは Dm-crypt/システム設定#crypttab を見て下さい。設定例は Dm-crypt/システム設定#起動時にマウント を見て下さい。
Pam mount
Pam mount を使うことでユーザーのログイン時に解錠できます: パーティションに誰か一人のホームディレクトリがある場合に推奨される方法です。
Pam mount を見て下さい。
Loop デバイス
ループデバイスを使って util-linux の標準ツール losetup
でファイルにブロックデバイスをマップすることができます。ファイルにはファイルシステムが含まれ、他のファイルシステムと同じように使うことが可能です。暗号化されたコンテナを作成するツールとしては TrueCrypt が有名ですが、ループデバイスファイルシステムを使って LUKS で暗号化することで同じような機能が実現できると考えてください。
まず、適切な乱数生成器を使用して、暗号化するコンテナを作成します:
# dd if=/dev/urandom of=/bigsecret bs=1M count=10
このコマンドで10メガバイトの容量の bigsecret
ファイルが作成されます。
次にデバイスノード /dev/loop0
を作成して、コンテナをマウント・利用できるようにします:
# losetup /dev/loop0 /bigsecret
ここからの作業は #パーティション と同じです。違うのはコンテナは既にランダム化されており消去する必要がないということだけです。
手動でマウント・アンマウント
コンテナをアンマウントするには:
# 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
loopback ファイルシステムのサイズの変更
まず暗号化されたコンテナをアンマウントします:
# umount /mnt/secret # cryptsetup close secret # losetup -d /dev/loop0
次に、追加したいデータ容量を決めてコンテナファイルを拡張します:
# dd if=/dev/urandom bs=1M count=1024 | cat - >> /bigsecret
ループデバイスにコンテナをマップ:
# losetup /dev/loop0 /bigsecret # cryptsetup --type luks open /dev/loop0 secret
その後、コンテナの暗号化された部分をコンテナファイルの最大サイズまでリサイズ:
# cryptsetup resize secret
最後に、ファイルシステムのチェックを実行して、問題なければ、リサイズを行います (例: ext2/3/4):
# e2fsck -f /dev/mapper/secret # resize2fs /dev/mapper/secret
またコンテナをマウントすることができます:
# mount /dev/mapper/secret /mnt/secret