1

我遇到了 Active Directory 和 PAM 的问题,但这可能适用于其他地方。

通过 PAM 设置 Yubikey 以利用 VPN 连接的双因素身份验证,我需要为联系 AD/LDAP 服务器的绑定用户设置一个 binddn。不幸的是,在 binddn 中有一个容器,里面有一个空格,而 PAM 不允许这个空间,也不允许我逃脱它。例子:

/etc/pam.d/radiusd

auth       required     pam_yubico.so id=16 debug ldap_uri=ldap://ad-server.local ldapdn=DC=company,DC=local binddn=CN=binduser,OU=users,OU=other accounts,OU=departments,DC=company,DC=local bindpw=5up3rpa55w0rd user_attr=sAMAccountName yubi_attr=employeeNumber

我试过 OU="other accounts"、OU=other\accounts、OU='other accounts',并将整个 binddn 放在双引号和单引号中。每次在 PAM 调试中,我都会得到:

[pam_yubico.c:parse_cfg(747)] called.
[pam_yubico.c:parse_cfg(748)] flags 0 argc 9
[pam_yubico.c:parse_cfg(750)] argv[0]=id=16
[pam_yubico.c:parse_cfg(750)] argv[1]=debug
[pam_yubico.c:parse_cfg(750)] argv[2]=ldap_uri=ldap://ad-server.local
[pam_yubico.c:parse_cfg(750)] argv[3]=ldapdn=DC=company,DC=local
[pam_yubico.c:parse_cfg(750)] argv[4]=binddn=CN=binduser,OU=users,OU=other
[pam_yubico.c:parse_cfg(750)] argv[5]=accounts,OU=departments,DC=company,DC=local
[pam_yubico.c:parse_cfg(750)] argv[6]=bindpw=5up3rpa55w0rd 
[pam_yubico.c:parse_cfg(750)] argv[7]=user_attr=sAMAccountName
[pam_yubico.c:parse_cfg(750)] argv[8]=yubi_attr=employeeNumber

如您所见,在列表中看到空格、引号或转义字符作为 binddn 的一部分后,它会被切断,如下所示:

[pam_yubico.c:parse_cfg(750)] argv[4]=binddn=CN=binduser,OU=users,OU=other\
[pam_yubico.c:parse_cfg(750)] argv[5]=accounts,OU=departments,DC=company,DC=local

我该怎么做才能让 PAM 认识到这个空间不是为了分隔另一个字段?

4

1 回答 1

2

从可用的有用文档中键入man pam.d:(添加了重点)

module-arguments是一个空格分隔的标记列表,可用于修改给定 PAM 的特定行为。将为每个单独的模块记录此类参数。请注意,如果您希望在参数中包含空格,则应该用方括号将该参数括起来

以下文本包括一些关于如何处理包含方括号的参数的注释和一个示例行。

于 2013-07-18T19:11:49.120 回答