FreeBSD10.0のPAM設定で何が間違って動作しているかを理解しようとしています
マシンは2つの異なる認証レルムで構成されています。1つはデフォルトのUnix認証で、もう1つはSystem Security Services Daemon(sssd)を使用しています。
現時点では、sshからのsssdログインを許可したいだけなので、/etc/pam.d/sshd
でこの構成を使用しています。
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient /usr/local/lib/pam_sss.so
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth sufficient pam_ssh.so no_warn try_first_pass
auth required pam_unix.so no_warn use_first_pass
# account
account required pam_nologin.so
#account required pam_krb5.so
account required pam_login_access.so
account required /usr/local/lib/pam_sss.so ignore_unknown_user
account required pam_unix.so
# session
#session optional pam_ssh.so want_agent
session optional /usr/local/lib/pam_sss.so
session optional /usr/local/lib/pam_mkhomedir.so mode=0700
session required pam_permit.so
# password
password sufficient /usr/local/lib/pam_sss.so use_authtok
#password sufficient pam_krb5.so no_warn try_first_pass
password required pam_unix.so no_warn try_first_pass
私が正しく理解していれば、sssdユーザーがマシンにログオンすると、auth sufficient /usr/local/lib/pam_sss.so
行に到達し、これはsufficient
なので、問題なくログインします。ローカルユーザーアカウントがログインしようとすると、sssdチェックに失敗しますが、パスワードを再度要求することなく、最初に入力したパスワードを使用してpam_unix.so
に成功します。
しかし、それは何が起こっているのかではありません。ローカルアカウントとして正常にログインするには、認証レルムのuse_first_pass
オプションからpam_unix.so
を削除する必要があります。ユーザーがログインすると、システムは最初にsssdアカウントを要求しますが、ローカルユーザーが存在しないため失敗します。外部認証サービスで。次に、システムは同じパスワードを再度要求しますが、pam_unix.so
モジュールで認証します。そして最後にアクセスが許可されます。
例として、次のように動作します。
ssh sssd-test.example.com -l local-user-account
Password:
Password for [email protected]:
Last login: Sat May 24 16:22:40 2014 from 192.168.1.100
FreeBSD 10.0-RELEASE-p1 (GENERIC) #0: Tue Apr 8 06:45:06 UTC 2014
Welcome to FreeBSD!
$
なぜこれが発生するのか、またはaccount
セッションと関係があるのかどうかは正確にはわかりません。 PAMについての私の理解としては、構成は正しいはずです。
前もって感謝します、
さて、PAMの働きについての私の前提は正しかった。
pam_sss.so
モジュールは、引数forward_pass
がpam_unix.so
moduleとして他のPAMモジュールのパスワードに中継することを期待していました。したがって、このオプションを配置するだけで機能します。結果の行は次のとおりです。
auth sufficient /usr/local/lib/pam_sss.so forward_pass
それは別の問題で終わった。 sssdまたはsssdの認証レルムがダウンしている場合、pam_sss.so
モジュールが機能せず、その結果、パスワードが転送されないため、ログインできなくなります。
したがって、明らかな選択は、pam_unix.so
の前にpam_sss.so
を置き、最後にpam_deny.so
を付けてすべてを「十分」にすることでした。これはLinuxで問題を解決する方法ですが、これはFreeBSDでは機能しないようです。
メーリングリストを調べた後、FreeBSDでこれを行う適切な方法は、PAMで奇妙な順序を使用することです。
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient pam_unix.so no_warn
auth sufficient /usr/local/lib/pam_sss.so use_first_pass
auth required pam_unix.so no_warn use_first_pass
したがって、pam_unix.so
をPAMに2回入れて、最初の1つをsufficient
として、最後の1つをrequired
として配置するとうまくいきます。なぜこれが起こるのかわかりませんが、機能しており、正しい方法のようです。