RHEL5ボックスの/etc/pam.d/sshd
ファイルに次のディレクティブがあり、少し混乱しています。これらのディレクティブは、LDAP + RADIUS + OTPを機能させるためにあります。私がやろうとしているのは、LDAP + RADIUS + OTPのユーザーUID <499をチェックしないように、またUID = 30027をチェックから除外するようにpamに指示することです。
このディレクティブは意図したとおりに機能します。 UID> = 499かどうかをチェックし、そうである場合はスキップします(auth十分なpam_unix.so nullok_secure)。
auth [success=1 default=ignore] pam_succeed_if.so uid >= 499 quiet
私はここで混乱しています。これはsuccess = 1なのでLDAP + RADIUS + OTPを実行するはずですが、どういうわけかそれでも機能します。 trueの場合、次のルールをスキップするべきではありませんか?
auth [success=1 default=ignore] pam_succeed_if.so uid eq 30027 quiet
auth sufficient pam_unix.so nullok_secure
auth sufficient pam_radius_auth.so
auth required /lib/security/pam_google_authenticator.so forward_pass
思い通りに動作するようになりましたが、そのロジックの背後で混乱しています。
わかりました。これは、uidが30327のローカルユーザーを使用してsshを実行したときに/ var/log/secureに表示されるものです-
Aug 8 08:21:30 journey sshd[9357]: Accepted keyboard-interactive/pam for sidd from 10.1.1.178 port 51242 ssh2
Aug 8 08:21:30 journey sshd[9357]: pam_unix(sshd:session): session opened for user sidd by (uid=0)
これは、uidが0(<499)のrootを使用してsshを取得するものです。
Aug 8 08:25:51 journey sshd[9402]: Accepted keyboard-interactive/pam for root from 10.1.1.178 port 51246 ssh2
Aug 8 08:25:51 journey sshd[9402]: pam_unix(sshd:session): session opened for user root by (uid=0)
これは、LDAPパスワードのみでOTPなしのLDAPユーザーを使用したときに得られるものです-
Aug 8 08:27:04 journey sshd[9447]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=journey user=schoure
Aug 8 08:27:05 journey sshd(pam_google_authenticator)[9447]: Failed to read "/home/schoure/.google_authenticator"
Aug 8 08:27:07 journey sshd[9445]: error: PAM: Cannot make/remove an entry for the specified session for schoure from journey
これは、LDAP + OTPでLDAPユーザーを使用したときに得られるものです-
Aug 8 08:28:13 journey sshd[9452]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=journey user=schoure
Aug 8 08:28:13 journey sshd[9450]: Accepted keyboard-interactive/pam for schoure from 10.1.1.178 port 43068 ssh2
Aug 8 08:28:13 journey sshd[9450]: pam_unix(sshd:session): session opened for user schoure by (uid=0)
つまり、その通りです。SMTPユーザーの場合、pam_unixは失敗しますが、「十分」に設定されているため、ターミナルではありません。それを片付けてくれてありがとう。
あなたの他のポイントに関して-
auth [success=1 default=ignore] pam_succeed_if.so uid eq 30027 quiet
評価されていない、評価されているようです。そのディレクティブをコメントアウトすると、
Aug 8 08:34:39 journey sshd(pam_google_authenticator)[9537]: Failed to read "/home/sidd/.google_authenticator"
Aug 8 08:34:42 journey sshd[9535]: error: PAM: Cannot make/remove an entry for the specified session for sidd from journey
したがって、明らかに30327> 499であるため、これがどのように機能するかについてはまだ混乱しています。したがって、2行目をスキップする必要があります。 PAMが最初の2行の間に暗黙のORを追加する場合、これが機能していることがわかる唯一の理由。
更新2
ああ、何が起こっているのかわかります。事実上、その行は単なるプレースホルダーです。そのUIDを、存在しないランダムなUIDに変更しましたが、それでも機能しました。だから私は論理を理解しています-
だから事実上、私が何か間違ったことをしたことでそれはうまくいった。私は私がする必要があることを手に入れました、そしてそれは私のために働いています。
ローカルユーザーがLDAP + RADIUS + OTPを介して認証されることを望まないので、これらの3行で問題は解決します。これらは機能していますが、正しいことを確認したいだけです。 -
auth sufficient pam_unix.so nullok_secure
auth sufficient pam_radius_auth.so
auth required /lib/security/pam_google_authenticator.so forward_pass
pam_unix.so
をスキップしてもよろしいですか?
sufficient
は、障害時の「非終端」動作です。 pam_unix.soチェックが失敗した場合でも、認証は引き続きpam_radius_auth.soを試行します。
私の解釈は:
uid eq 30027
チェックがtrueを返すことはありません。テストは、uidが499未満の場合にのみ実行されるため、uid eq 30027
の条件を真にすることはできません。pam_unix.so
はallシナリオで試行され、失敗した場合はpam_radius_auth.so
が試行されます。pam_google_authenticator.so
が試行されます。ログをもう一度確認してください。 radiusログインは失敗していない可能性がありますが、pam_unix.so
チェックはおそらくisが失敗をログに記録しています。それはあなたのログインを妨げているだけではありません。
この回答は、元の質問の範囲を正確にカバーしています。更新またはコメントを通じて提起された追加の質問はカバーされません。