Sid*_*idd 6 redhat ldap pam freeradius google-authenticator
我的指令中有以下指令 /etc/pam.d/sshdRHEL5 盒子上的文件中有点困惑。这些指令用于使 LDAP+RADIUS+OTP 工作。我想要做的是告诉 pam 不要检查用户 UID < 499 的 LDAP+RADIUS+OTP,并且还要排除 UID = 30027 进行相同的检查。
该指令按预期工作。它检查 UID 是否 >= 499,如果是,则跳过(验证足够的 pam_unix.so nullok_secure)。
auth [success=1 default=ignore] pam_succeed_if.so uid >= 499 quiet
Run Code Online (Sandbox Code Playgroud)
我在这里很困惑。这应该做 LDAP+RADIUS+OTP 因为 success=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
Run Code Online (Sandbox Code Playgroud)
虽然,我已经让事情按照我想要的方式工作,但我对它的逻辑感到困惑。
好的,这就是我在使用 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)
Run Code Online (Sandbox Code Playgroud)
这就是我使用 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)
Run Code Online (Sandbox Code Playgroud)
这就是当我使用一个只有 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
Run Code Online (Sandbox Code Playgroud)
这就是我在 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)
Run Code Online (Sandbox Code Playgroud)
所以你是对的 - pam_unix 对于 LDAP 用户来说确实失败了,但因为它被设置为“足够”,所以它不是终端。感谢您解决这个问题。
至于你的另一点——
auth [success=1 default=ignore] pam_succeed_if.so uid eq 30027 quiet
Run Code Online (Sandbox Code Playgroud)
没有得到评估,我看到它正在得到评估。如果我注释掉该指令,我会得到
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
Run Code Online (Sandbox Code Playgroud)
所以我仍然对它是如何工作的感到困惑,因为显然 30327 > 499 因此它应该跳过第二行。如果 PAM some 如何在前两行之间添加隐式 OR,我可以看到这个工作的唯一原因。
更新 2
啊,我明白发生了什么。这条线实际上只是一个占位符。我将该 UID 更改为一些不存在的随机 UID,但它仍然有效。所以我理解逻辑 -
所以实际上,我做错了什么让它起作用了。我得到了我需要做的事情并且它对我有用。
我不希望本地用户通过 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
Run Code Online (Sandbox Code Playgroud)
你真的确定它正在跳过吗pam_unix.so?
sufficient是失败时的“非终止”行为。即使 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检查可能会记录失败。它只是不会阻止您的登录。
这个答案准确地涵盖了原始问题的范围。通过更新或评论提出的任何其他问题将不包括在内。
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |