私はDebianテスト中です。/homeをdm-crypt(luks)で暗号化しました。さまざまなチュートリアルに従って、ログイン時にpam_mountを開くように設定します。しかし、gdmを使用してログインしようとすると、失敗します。ログイン画面が消え、すぐに再表示されます。 /var/log/auth.logに私は持っています:
Jul 11 00:18:20 yojik gdm-launch-environment]: pam_unix(gdm-launch-environment:session): session opened for user Debian-gdm by vic(uid=0)
Jul 11 00:18:20 yojik gdm-launch-environment]: (pam_mount.c:173): conv->conv(...): Conversation error
Jul 11 00:18:20 yojik gdm-launch-environment]: (pam_mount.c:477): warning: could not obtain password interactively either
Jul 11 00:18:20 yojik gdm-launch-environment]: (mount.c:72): Messages from underlying mount program:
Jul 11 00:18:20 yojik gdm-launch-environment]: (mount.c:76): NOTE: mount.crypt does not support utab (systems with no mtab or read-only mtab) yet. This means that you will temporarily need to call umount.crypt(8) rather than umount(8) to get crypto volumes unmounted.
Jul 11 00:18:21 yojik gdm-launch-environment]: (mount.c:76): crypt_activate_by_passphrase: Operation not permitted
Jul 11 00:18:21 yojik gdm-launch-environment]: (pam_mount.c:522): mount of /dev/disk/by-uuid/d79121a7-5fbd-4484-81d2-6cbdf1b95b5e failed
仮想端末(ctrl-alt-f1)に切り替えてそこにログインすると、/ homeボリュームが期待どおりにマウントされます。その後、gdmに戻って、通常どおりログインできます。
したがって、問題は実際にはgdmとpam_mountの相互作用にあります。さまざまなチュートリアルとスレッドに従って/etc/pam.d/gdm3を微調整しようとしましたが、成功しませんでした。ほとんどの情報はかなり古く、実際に更新されたもの(Arch Linux wiki)は、ファイルとオプションの名前がまったく異なるため、gdmの実装が異なるようです。
現在、私のファイルは次のようになっています。
vic@yojik:~$ cat /etc/pam.d/gdm3
#%PAM-1.0
auth requisite pam_nologin.so
auth required pam_succeed_if.so user != root quiet_success
@include common-auth
auth optional pam_gnome_keyring.so
auth optional pam_mount.so
@include common-account
# SELinux needs to be the first session rule. This ensures that any
# lingering context has been cleared. Without this it is possible
# that a module could execute code in the wrong domain.
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
session optional pam_mount.so
session required pam_loginuid.so
# SELinux needs to intervene at login time to ensure that the process
# starts in the proper default security context. Only sessions which are
# intended to run in the user's context should be run after this.
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
session required pam_limits.so
session required pam_env.so readenv=1
session required pam_env.so readenv=1 envfile=/etc/default/locale
@include common-session
session optional pam_gnome_keyring.so auto_start
@include common-password
質問は:ボリュームをgdmでマウントするには、ファイルをどのように変更する必要がありますか?
編集:ここにも/etc/pam.d/common-auth
(実行するように言っている上部の情報を除くpam-auth-update
ファイルを管理するために、私もしました)
# here are the per-package modules (the "Primary" block)
auth [success=1 default=ignore] pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_mount.so
auth optional pam_cap.so
# end of pam-auth-update config
問題は実際には/etc/security/pam_mount.conf.xml
にありました。いくつかのチュートリアルに続いて、私は行を挿入しました
<volume user="*" mountpoint="/home" path="/dev/disk/by-uuid/d79121a7-5fbd-4484-81d2-6cbdf1b95b5e" fstype="crypt" options="fsck" />
私の理解では、user="*"
は「すべてのユーザー」を表す正規表現のような表記でした。そのような構文はないことがわかりました。そのため、pam_mountはユーザー*のボリュームをマウントしようとしましたが、もちろん失敗しました。これは、行crypt_activate_by_passphrase: Operation not permitted
によってログに反映されました。
*をユーザーの名前に置き換えることで解決しました。必要に応じて、man pam_mount.conf
には、よりきめ細かい制御のためのオプションがあります。
したがって、pam_mount
がoperation not permitted
と言って問題が発生した場合は、まずそれを確認してください。