如何配置 PAM 身份验证以组合密码 + OTP 令牌
How do I configure PAM authentication to combine password + OTP token
我正在尝试为存储在 IPA 服务器中的用户实施 OpenVPN 服务器的 PAM 身份验证。我的用例需要 PAM 身份验证而不是 LDAP 身份验证。
在测试中,在IPA中配置为仅使用密码进行身份验证的用户可以成功进行身份验证。但当 IPA 用户配置为使用密码 + OTP 令牌进行身份验证时,身份验证失败。
如link@https://sourceforge.net/p/openvpn/mailman/message/35969399/
中所述
我这样配置 /etc/pam.d/openvpn:
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_sss.so otp_in_password
auth required pam_deny.so
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
但身份验证失败,IPA 日志显示凭据无效。
我在别处读到如何配置 SSSD 以接受 2FA 值作为密码字段的一部分,因为 OpenVPN 无法询问 PAM 对话的多个提示。但是我不确定如何进行配置。
我解决了!
密钥使用的是更高版本的 sssd。在版本 2.0.x 中,身份验证提示配置可用 – re: https://sssd.io/docs/design_pages/prompting_configuration.html
不幸的是,我的 OpenVPN 实例是 运行 在 Centos 7.8 上,它只支持最高版本 1.16。因此,我启动了一个已加载 sssd 版本 2.2.3 的 Centos 8 VM。 Fedora 29 或更高版本也可以。
在 Centos 8 虚拟机上,我安装并配置了 openVPN 和 free-ipa-client。然后我将 sssd 配置为将密码和 OTP 令牌合并为一个值。
vi /etc/sssd/sssd.conf
将以下部分添加到文件底部:
[prompting/password]
password_prompt = Please enter LDAP password:
[prompting/2fa]
single_prompt = True
first_prompt = Please enter LDAP password + OTP token value:
根据需要更改提示词。它实际上只在从 cli 测试时出现。但最重要的是,我在几个小时后了解到 BOTH 部分需要按照显示的顺序。
接下来,通过编辑用于 OpenVPN 服务的文件来配置 pam.d – 在我的例子中,文件名为 openvpn
vi /etc/pam.d/openvpn
添加以下内容:
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_sss.so
auth required pam_deny.so
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
重启sssd和openvpn
systemctl restart sssd
systemctl restart openvpn-server@server
我也按照 link @ https://sourceforge.net/p/openvpn/mailman/message/35969399/ 中描述的步骤配置 FreeIPA。
本地测试:
- 在 FreeIPA 中配置用户仅使用密码。在我的例子中,用户
id 是 test5
- 切换到服务器上没有sudo的本地用户
权限
su testuser
- 现在尝试切换到ipa用户
su test5
- 系统会提示您 - 请输入 LDAP 密码:
- 确认您只能使用密码登录,然后退出返回
测试用户
- 现在在 FreeIPA 中配置用户 (test5) 使用密码 + OTP
- 在 FreeIPA 中为用户 test5 创建一个令牌
- 再次尝试切换到ipa用户
su test5
- 现在应该会提示您 - 请输入 LDAP 密码 + OTP
令牌值:
- 尝试仅使用密码登录。尝试应该会失败。
- 再次尝试切换到ipa用户
su test5
- 系统会提示您 - 请输入 LDAP 密码 + OTP
令牌值:
- 尝试使用密码 + OTP 令牌值再次登录。 (我用了
Google 生成令牌值的验证器)。登录应该是
成功
接下来我从 OpenVPN 客户端进行了测试——使用和不使用 OTP 令牌。
一切正常!
我正在尝试为存储在 IPA 服务器中的用户实施 OpenVPN 服务器的 PAM 身份验证。我的用例需要 PAM 身份验证而不是 LDAP 身份验证。
在测试中,在IPA中配置为仅使用密码进行身份验证的用户可以成功进行身份验证。但当 IPA 用户配置为使用密码 + OTP 令牌进行身份验证时,身份验证失败。
如link@https://sourceforge.net/p/openvpn/mailman/message/35969399/
中所述我这样配置 /etc/pam.d/openvpn:
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_sss.so otp_in_password
auth required pam_deny.so
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
但身份验证失败,IPA 日志显示凭据无效。
我在别处读到如何配置 SSSD 以接受 2FA 值作为密码字段的一部分,因为 OpenVPN 无法询问 PAM 对话的多个提示。但是我不确定如何进行配置。
我解决了!
密钥使用的是更高版本的 sssd。在版本 2.0.x 中,身份验证提示配置可用 – re: https://sssd.io/docs/design_pages/prompting_configuration.html
不幸的是,我的 OpenVPN 实例是 运行 在 Centos 7.8 上,它只支持最高版本 1.16。因此,我启动了一个已加载 sssd 版本 2.2.3 的 Centos 8 VM。 Fedora 29 或更高版本也可以。
在 Centos 8 虚拟机上,我安装并配置了 openVPN 和 free-ipa-client。然后我将 sssd 配置为将密码和 OTP 令牌合并为一个值。
vi /etc/sssd/sssd.conf
将以下部分添加到文件底部:
[prompting/password]
password_prompt = Please enter LDAP password:
[prompting/2fa]
single_prompt = True
first_prompt = Please enter LDAP password + OTP token value:
根据需要更改提示词。它实际上只在从 cli 测试时出现。但最重要的是,我在几个小时后了解到 BOTH 部分需要按照显示的顺序。
接下来,通过编辑用于 OpenVPN 服务的文件来配置 pam.d – 在我的例子中,文件名为 openvpn
vi /etc/pam.d/openvpn
添加以下内容:
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth sufficient pam_sss.so
auth required pam_deny.so
account [default=bad success=ok user_unknown=ignore] pam_sss.so
account required pam_permit.so
重启sssd和openvpn
systemctl restart sssd
systemctl restart openvpn-server@server
我也按照 link @ https://sourceforge.net/p/openvpn/mailman/message/35969399/ 中描述的步骤配置 FreeIPA。
本地测试:
- 在 FreeIPA 中配置用户仅使用密码。在我的例子中,用户 id 是 test5
- 切换到服务器上没有sudo的本地用户 权限
su testuser
- 现在尝试切换到ipa用户
su test5
- 系统会提示您 - 请输入 LDAP 密码:
- 确认您只能使用密码登录,然后退出返回 测试用户
- 现在在 FreeIPA 中配置用户 (test5) 使用密码 + OTP
- 在 FreeIPA 中为用户 test5 创建一个令牌
- 再次尝试切换到ipa用户
su test5
- 现在应该会提示您 - 请输入 LDAP 密码 + OTP 令牌值:
- 尝试仅使用密码登录。尝试应该会失败。
- 再次尝试切换到ipa用户
su test5
- 系统会提示您 - 请输入 LDAP 密码 + OTP 令牌值:
- 尝试使用密码 + OTP 令牌值再次登录。 (我用了 Google 生成令牌值的验证器)。登录应该是 成功
接下来我从 OpenVPN 客户端进行了测试——使用和不使用 OTP 令牌。
一切正常!