pam_mount
関連記事
pam_mount を使うことで (LUKS や eCryptfs などで) 暗号化したホームパーティションをログイン時に自動的にマウントすることができます。ログインマネージャを使ったりコンソールでログインしたときに /home をマウントします (マウントポイントは自由に指定できます)。ドライブを暗号化するパスフレーズは Linux ユーザーのパスフレーズと同一である必要があります。同一ならばログインに使うパスフレーズと別のパスフレーズを入力する必要がありません。
目次
設定
pam_mount パッケージをインストールします。
グローバル(システム)設定
モジュールは /etc/security/pam_mount.conf.xml
で設定されます。詳細については、pam_mount.conf(5) を参照してください。次のようにファイルを編集します。
/etc/security/pam_mount.conf.xml
<!-- Generic encrypted partition example --> <volume user="USERNAME" fstype="auto" path="/dev/sdaX" mountpoint="/home" options="fsck,noatime" /> <!-- Example using CIFS --> <volume fstype="cifs" server="server.example.com" path="share_name" mountpoint="~/mnt/share_name" uid="10000-19999" options="sec=krb5i,vers=3.0,cruid=%(USERUID)" /> <mkmountpoint enable="1" remove="true" /> </pam_mount>
注意事項
- ファイルの最後、最後の閉じタグ
</pam_mount>
の 前 に2行挿入してください。 USERNAME
はあなたのユーザー名に置き換えてください。/dev/sdaX
は、対応するデバイスまたはコンテナファイルに置き換えてください。fstype="auto"
は/usr/bin/mount.type
にある任意のtype
に変更できます。ほとんどの場合、"auto"
で問題ありません。fstype="crypt"
を使用すると、ログアウト時にループデバイスが必要なボリュームに対してクローズされます。- 必要であれば、マウントオプションを追加してください。
mount.cifs
はsmb.conf
を読み込まないので、すべてのオプションを指定する必要があることに注意してください。この例では、uid
はローカルのsmb.conf
パラメータ idmap config ... : range = にマッチするので、Unix のみのユーザに対して pam_mount が呼び出されることはありません。Kerberos は krb5 で示され、SMB3.0 が指定されているのは、相手側がデフォルトの SMB1をサポートしていない可能性があるためです。署名は krb5i の末尾の i で有効になります。詳細は mount.cifs(8) を参照。
ローカル (ユーザーごと) 設定
pam_mount は、ユーザーがログイン時にホーム ディレクトリ内のファイルに独自のマウントを定義できるようにすることもサポートしています。この変更による潜在的なセキュリティへの影響を考慮してください。これを有効にするには、次の行が /etc/security/pam_mount.conf.xml
に存在し、アクティブであることを確認します。
/etc/security/pam_mount.conf.xml
<luserconf name=".pam_mount.conf.xml" />
これにより、各ユーザーが ~/.pam_mount.conf.xml
でマウントを設定できるようになります。ユーザーごとの設定ファイルは、<volume>
キーワードのみをサポートします。例:
~/.pam_mount.conf.xml
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd"> <pam_mount> <volume user="alex" fstype="tmpfs" path="tmpfs" mountpoint="~/test" options="nodev,nosuid" /> </pam_mount>
また、選択できるマウント オプションと選択できないマウント オプションに関していくつかの制限があり、その一部は必須です (nosuid
、nodev
、size
、uid
、これらは /etc/security/pam_mount.conf.xml
) を編集することで解除できます。バインドマウントはサポートされていないようです。所有権チェックはマウントポイントでも実行されます。
LUKS ボリューム
LUKS 暗号化ボリュームは次のように簡単に構成できます。
/etc/security/pam_mount.conf.xml
<volume user="username" fstype="crypt" path="/dev/disk/by-partuuid/partition_uuid" mountpoint="~" options="crypto_name=volume_name,allow_discard,fstype=btrfs,compress=zstd" />
ボリュームはロックが解除され、mount.crypt でマウントされます。オプションの詳細については、mount.crypt(8) § マウント オプション を参照してください。
Veracrypt ボリューム
pam_mount は Veracrypt ボリュームをネイティブにサポートしていませんが、回避策 があります。
/etc/security/pam_mount.conf.xml
<volume user="username" fstype="crypt" path="/dev/disk/by-partuuid/partition_uuid" mountpoint="vcrypt"/> <volume user="username" fstype="auto" path="/dev/mapper/vcrypt" mountpoint="/media/mountpoint"/> <cryptmount>cryptsetup --veracrypt open --type tcrypt %(VOLUME) %(MNTPT)</cryptmount> <cryptumount>cryptsetup close %(MNTPT)</cryptumount>
LUKS ボリュームもある場合は、cryptmount/cryptumount
を使用する crypt
の代わりに、Veracrypt ボリュームに別の fstype を使用できます。たとえば、ncpfs
を使用します。 ncpmount/ncpumount
NCP ファイルシステムを使用しないように注意してください。
F2FS 暗号化
pam_mount に F2FS 復号化キーをセッションキーリングに追加させるトリックがあります。f2fscrypt でディレクトリを暗号化するときに選択した salt は、/etc/security/pam_mount.conf.xml
の salt (以下の例では 0x1111) と一致する必要があり、パスフレーズはユーザーのログインパスワードと一致する必要があります。この例では、pam_mount を使用して FUSE ファイルシステムをマウントしていないことを前提としています。 その場合は、<fusemount>
と <fuseumount>
の代わりに、{{ic|<ncpmount>/ などの別の <*mount>
の代わりに <fusemount>
と <fuseumount>
タグペアを追加します。
/etc/security/pam_mount.conf.xml
<fusemount>f2fscrypt add_key -S 0x1111</fusemount> <fuseumount>f2fscrypt new_session</fuseumount> <volume noroot="1" ssh="0" fstype="fuse" path="/tmp/not-a-real-path-0" mountpoint="/tmp/not-a-real-path-1"/>
<volume>
は、<fusemount>
と <fuseumount>
のコマンドをトリガーする以外は何も行いません。ログイン後、セッションキーリングに F2FS 復号キーがあることを確認できます。
$ keyctl show
Session Keyring 910133222 --alswrv 1000 100 keyring: _ses 301049775 --alswrv 1000 65534 \_ keyring: _uid.1000 013481035 --alsw-v 1000 100 \_ logon: f2fs:2e64cf4a5bafcd7
ログインマネージャの設定
通常、/etc/pam.d
の設定ファイルを編集してログイン時に pam_mount が実行されるようにする必要があります。それぞれのファイルのエントリの順番は重要です。以下に書かれているように /etc/pam.d/system-auth
を編集してください。ディスプレイマネージャを使用している場合 (例: Slim や GDM)、ディスプレイマネージャのファイルも編集してください。以下の設定例では、追加する行を太字で示しています。
/etc/pam.d/system-auth
#%PAM-1.0 auth required pam_env.so auth required pam_unix.so try_first_pass nullok auth optional pam_mount.so auth optional pam_permit.so account required pam_unix.so account optional pam_permit.so account required pam_time.so password optional pam_mount.so password required pam_unix.so try_first_pass nullok sha512 shadow password optional pam_permit.so session optional pam_mount.so session required pam_limits.so session required pam_env.so session required pam_unix.so session optional pam_permit.so
SLiM
SLiM の場合:
/etc/pam.d/slim
auth requisite pam_nologin.so auth required pam_env.so auth required pam_unix.so auth optional pam_mount.so account required pam_unix.so password required pam_unix.so password optional pam_mount.so session required pam_limits.so session required pam_unix.so session optional pam_mount.so session optional pam_loginuid.so session optional pam_ck_connector.so
GDM
GDM の場合:
/etc/pam.d/gdm-password
#%PAM-1.0 auth requisite pam_nologin.so auth required pam_env.so auth requisite pam_unix.so nullok auth optional pam_mount.so auth optional pam_gnome_keyring.so auth sufficient pam_succeed_if.so uid >= 1000 quiet auth required pam_deny.so account required pam_unix.so password required pam_unix.so password optional pam_mount.so session required pam_loginuid.so -session optional pam_systemd.so session optional pam_keyinit.so force revoke session required pam_limits.so session required pam_unix.so session optional pam_mount.so session optional pam_gnome_keyring.so auto_start