pam_mountは、ログイン時に自動的に暗号化ファイルシステムをアンロックしてくれる。ログインに使用するパスワードと同じパスワードで、暗号化ファイルシステムをアンロックするため、パスワードの入力は1回でよい。これを用いれば、ノートPCの共有が容易になる。ログイン時にそのユーザーのホームディレクトリのみをアンロックしてマウントしてくれるからだ。またpam_mountは、暗号化ファイルシステムだけでなく、任意のファイルシステムをマウントすることができるため、たとえば、使用したいが自分がログインしていないときにはマウントしたままにしておきたくないNFS共有などに適用することができる。
これまでEncFSとLoop-AES、dm-crypt(翻訳記事)、Cryptmount(翻訳記事)など、暗号化ファイルシステムを提供するための他の方法に関する記事を掲載したことがあるが、pam_mountではそのプロセス全体がシームレスに行われる。
pam_mountは先月、0.49から1.2へのメジャーバージョンアップを果たしたばかりであるため、使用中のディストリビューションで提供されているのがまだ旧版であるからといってそれほど心配する必要はない。pam_mountは、Fedora 9のディストリビューションリポジトリに含まれており、openSUSE 11向けには1クリックインストールとして提供されている。Ubuntu Hardyではlibpam-mountというパッケージで提供されている。私はFedoraリポジトリからのバージョン0.48を、64ビットのFedora 9搭載マシンにインストールしたが、バージョン1.2も試用した。どちらも動作はまったく同じであった。変更点(以下参照)は、mount.cryptで、使用されている暗号(cipher)を指定しなければならないという点だけである。
# vi /etc/security/pam_mount.conf.xml
...
<cryptmount>mount.crypt -o cipher=aes "%(ifnempty=\"-o\" OPTIONS)" %(OPTIONS)
%(VOLUME) %(MNTPT)</cryptmount>
本記事ではpam_mountを使用する例として、LUKS暗号化ボリュームを用いる。ここでは暗号化ファイルシステムを格納するために1つのパーティションを使用するが、余分のパーティションがない場合は、ループバックデバイスを介してマウントされた単一のファイルを用いることもできる。
以下のコードに示すように、まず初めに/dev/sdc1をフォーマットし、そのパーティションにあるすべてのデータを削除して新しい暗号化ボリュームを作成した。この暗号化ボリュームをmyencryptedstuffと名づけ、そこにext3ファイルシステムを作成した。このファイルシステムをマウントし、あるファイル(何でもよい)を作成してから、再びアンマウントして、暗号化ボリュームをロックした。ここでpam_mountパッケージのmount.cryptを用いて、暗号化ボリュームをアンロックし、/mnt/tにマウントした。mount.cryptは、pam_mountがファイルシステムをマウントするために用いるコマンドであるため、まずコマンドラインからこのコマンドを実行し、その動作を検証してみるとよい。最後にumount.cryptを実行して、ファイルシステムをアンマウントし、暗号化ボリュームを再びロックした。上記の2つの操作は、umountとcryptsetup luksCloseを実行するのと同じである。
# cryptsetup luksFormat /dev/sdc1 WARNING! ======== This will overwrite data on /dev/sdc1 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: Command successful. # cryptsetup luksOpen /dev/sdc1 myencryptedstuff Enter LUKS passphrase for /dev/sdc1: key slot 0 unlocked. Command successful. # mkfs.ext3 /dev/mapper/myencryptedstuff mke2fs 1.41.0 (10-Jul-2008) ... # mount /dev/mapper/myencryptedstuff /mnt/t # date > /mnt/t/df1.txt # cat /mnt/t/df1.txt Mon Oct 27 09:20:22 EST 2008 # umount /mnt/t # cryptsetup luksClose myencryptedstuff # mount.crypt -o cipher=aes /dev/sdc1 /mnt/t # umount.crypt /mnt/t
