Linux PAM模块中的允许/转义空间

时间:2013-07-18 18:47:14

标签: linux parsing ldap escaping pam

我遇到了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 =“其他帐户”,OU =其他\帐户,OU ='其他帐户',并将整个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认识到这个空间不是要分隔另一个字段,我该怎么办?

1 个答案:

答案 0 :(得分:2)

通过输入man pam.d来提供有用的文档:(强调添加)

  

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

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