我正在尝试在 Ubuntu/Debian 虚拟机上测试 libpam_ldapd 的安装过程。
我已关闭 nscd / nslcd 服务,并且正在观察nslcd -d
和的输出/var/log/auth.log
,
我设置的过滤器/地图nslcd.conf
工作正常,我仅使用 ldap 来输入密码 - 这意味着我只想检查系统上已存在的帐户的密码,因此我只使用:
shadow files ldap
在 /etc/nsswitch.conf 中
输出nslcd -d
表明绑定工作正常,但身份验证日志指出:
sshd[]: pam_ldap(sshd:auth): username changed from rovangju to RovangJu
sshd[]: pam_unix(sshd:account): could not identify user (from getpwnam(RovangJu))
sshd[]: Failed password for rovangju from 127.0.0.1 port 44245 ssh2
尝试 SSH 登录的控制台没有收到任何错误:
rovangju@vbox-u64:~$ ssh 0
rovangju@0's password: [enter correct password]
Connection closed by 127.0.0.1
显然,绑定使用的是 ldap 属性中的 cn/uid,这是一个大写字母的用户名,但 unix 用户名都是小写的。有人知道如何解决这个问题吗?
我发现最接近这个问题的是这里: http://forums.opensuse.org/english/get-technical-help-here/install-boot-login/445925-pam_ldap-username-case-sensitivity-opensuse-11-2-a.html
提前致谢!
编辑:另一个问题是:出于某种原因,我可以通过这样做来欺骗模块:
rovangju@vbox-u64:~$ ssh 0
rovangju@0's password: [enter WRONG password]
Permission denied, please try again
rovangju@0's password: [enter CORRECT password]
[and bingo, I'm in]
答案1
为了避免使用 ldap 中的用户名(大写)的问题 - 我从源代码中注释掉了一个块:
nss-pam-ldapd-0.xx/nslcd/pam.c: L120-125
/* check if the username is different and update it if needed */
/*if (strcmp(username,value)!=0)
{
log_log(LOG_INFO,"username changed from \"%s\" to \"%s\"",username,value);
strcpy(username,value);
}*/