我在RHEL5盒子的/etc/pam.d/sshd文件中有下面的指令,我有点困惑。 这些指令在那里使LDAP + RADIUS + OTP工作。 我想要做的是告诉pam不要检查用户UID <499的LDAP + RADIUS + OTP,也排除UID = 30027被检查相同。
该指令按预期工作。 它检查UID> = 499,如果是,则跳过(auth足够的pam_unix.so nullok_secure)。
auth [success=1 default=ignore] pam_succeed_if.so uid >= 499 quiet
我很困惑 这应该做LDAP + RADIUS + OTP成功= 1,但不知何故,它仍然工作。 如果是真的,它不应该跳过下一个规则吗?
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
虽然我已经得到了想要的东西,但是我对它的逻辑背后感到困惑。
好的,这是我在/ var / log / secure中得到的,当我使用一个uid为30327的本地用户ssh时 –
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)
这是我得到ssh使用root的谁有一个0(<499)。
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)
所以你是对的 – pam_unix对LDAP用户来说是失败的,但是因为它被设置为“足够”,所以它不是terminal。 感谢您清理那个。
至于你的另一点 –
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开始的,因此应该跳过第二行。 我可以看到这个工作的唯一原因,如果PAM一些如何增加了前两行之间的隐式OR。
更新2
啊,我看到发生了什么。 这条线实际上只是一个占位符。 我把那个UID改成一些不存在的随机UID,它仍然工作。 所以我理解这个逻辑 –
所以实际上,我做错了事情使它工作。 我得到了我需要做的,这对我有用。
我不希望本地用户通过LDAP + RADIUS + OTPvalidation,所以这三行应该为我做这个工作。 他们正在工作,但我只想确认他们是对的 –
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是失败的“非terminal”行为。 即使pam_unix.so检查失败,身份validation也会继续尝试pam_radius_auth.so。
我的解释是:
uid eq 30027检查将永远不会返回true。 只有当uid小于499时,testing才会运行,这使得uid eq 30027的条件无法成立。 pam_unix.so将在所有情况下尝试,如果失败, pam_radius_auth.so尝试pam_radius_auth.so 。 pam_google_authenticator.so 。 再次检查您的日志。 半径login可能不会失败,但是pam_unix.so检查可能正在logging失败。 这只是不妨碍您的login。
这个答案准确地涵盖了原始问题的范围。 通过更新或评论提出的任何其他问题都不会被覆盖。