redhat – 需要帮助理解PAM指令

前端之家收集整理的这篇文章主要介绍了redhat – 需要帮助理解PAM指令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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

虽然,我已经按照我的要求开始工作,但我对它的逻辑感到困惑.

更新

好的,所以当我使用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)

所以你是对的 – 对于LDAP用户来说,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因此它应跳过第二行.我可以看到这个工作的唯一原因,如果PAM有些如何在前两行之间添加隐式OR.

更新2

啊,我明白发生了什么.这条线实际上只是一个占位符.我将UID更改为一些不存在的随机UID,它仍然有效.所以我理解逻辑 –

>第1行检查UID.如果它超过499,它会跳到第3行,在本地检查它.由于UID> 499不是本地的,该条件失败但是作为非终端指令,它转移到LDAP RADIUS OTP.
>如果我注释掉具有特定UID集的第2行,那么由于成功= 1,PAM会完全跳过本地身份验证.

所以实际上,我做错了什么让它发挥作用.我得到了我需要做的事情,这对我有用.

我不希望本地用户通过LDAP RADIUS OTP进行身份验证,因此这三行应该为我完成工作.他们正在工作,但我想确认他们是对的 –

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吗?

足以是失败时的“非终端”行为.即使pam_unix.so检查失败,身份验证仍将继续尝试pam_radius_auth.so.

我的解释是:

> uid eq 30027检查将永远不会返回true.只有当uid <499时才会运行测试,这使得uid eq 30027的条件无法成立.
> pam_unix.so将在所有场景中尝试,如果失败,将尝试pam_radius_auth.so.
>如果两个失败,将尝试pam_google_authenticator.so.

再次检查您的日志. radius登录可能没有失败,但是pam_unix.so检查可能是记录失败.它只是没有阻止您的登录.

这个答案准确地涵盖了原始问题的范围.通过更新或评论提出的任何其他问题将不予承保.

原文链接:https://www.f2er.com/linux/398499.html

猜你在找的Linux相关文章