首页 > 解决方案 > 如何配置 PAM 身份验证以组合密码 + OTP 令牌

问题描述

我正在尝试为存储在 IPA 服务器中的用户实现 OpenVPN 服务器的 PAM 身份验证。我的用例需要 PAM 身份验证,而不是 LDAP 身份验证。

在测试中,在 IPA 中配置为仅使用密码进行身份验证的用户可以成功进行身份验证。但是,当 IPA 用户配置为使用密码 + OTP 令牌进行身份验证时,身份验证失败。

如链接@ 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 对话的多个提示。但我不确定如何进行该配置。

标签: openvpnpam

解决方案


我解决了!

关键是使用更高版本的 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 VM 上,我安装并配置了 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 测试时出现。但最重要的是,我在几个小时后了解到,这两个部分都需要按所示顺序进行。

接下来,通过编辑用于 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

我还按照链接@ https://sourceforge.net/p/openvpn/mailman/message/35969399/中描述的步骤配置FreeIPA。

在本地测试:

  • 将 FreeIPA 中的用户配置为仅使用密码。在我的情况下,用户 ID 是 test5
  • 切换到服务器上没有 sudo 权限的本地用户
  • su testuser
  • 现在尝试切换到 ipa 用户
  • su test5
  • 应该会提示您 -请输入 LDAP 密码:
  • 确认您只能使用密码登录,然后退出回到 testuser
  • 现在在 FreeIPA 中配置用户(test5)以使用密码 + OTP
  • 在 FreeIPA 中为用户 test5 创建一个令牌
  • 再次尝试切换到ipa用户
  • su test5
  • 现在应该提示您 -请输入 LDAP 密码 + OTP 令牌值:
  • 尝试仅使用密码登录。尝试应该失败。
  • 尝试再次切换到 ipa 用户
  • su test5
  • 应该会提示您 -请输入 LDAP 密码 + OTP 令牌值:
  • 尝试使用密码 + OTP 令牌值再次登录。(我使用 Google Authenticator 生成令牌值)。登录应该成功

接下来我从 OpenVPN 客户端进行了测试——使用和不使用 OTP 令牌。

一切正常!


推荐阅读