如何配置 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 令牌。

一切正常!