Ubuntu 12.04 服务器,AMD64,通过 LDAP 进行身份验证。登录时,我无法将 LDAP 组映射到我的用户帐户,即使“getent group”显示了分配给我帐户的正确组集。更令人困惑的是,有时它可以工作,有时则不行。
例如,这是我当前的登录信息:
$ ssh zoyd
$ id
uid=522(cswingley) gid=513(Domain Users) groups=513(Domain Users), \
4(adm),24(cdrom), 27(sudo),30(dip),46(plugdev),111(lpadmin), \
112(sambashare)
但:
$ getent group | grep cswingley | sort -t : -n -k3 | \
awk 'BEGIN {FS=":"} {printf("%s(%s)\n", $3, $1);}' | \
xargs | sed 's/) /),/g'
4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),111(lpadmin), \
112(sambashare),500(level2),502(gis),503(level3), \
504(management_accounting),544(Administrators),606(abruser),\
619(proposal),621(project_managers),700(unixadmin),\
701(ntadmin),1000(cswingley)
我登录时大约有一半时间都会发生这种情况。其他时间,我的所有组(本地组和 LDAP)都已成功映射。 getent group
总是显示正确的列表。
我相信我的 Samba 用户也遇到了这种情况,这通常会阻止他们访问仅限于某些 Unix / Samba 组的共享或目录。它还阻止我将计算机加入我的域,因为 LDAP 没有将我分配到具有该权限的组 ( ntadmin
)。
slapd
我在日志(当前设置为)中看到的唯一loglevel 256
可疑的是这个,但我不确定它是否相关:
conn=8570 op=1 SRCH base="dc=abrinc,dc=com" scope=2 deref=0 \
filter="(&(objectClass=posixAccount)(uid=cswingley))"
conn=8570 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text=
conn=8570 op=2 DISCONNECT tag=101 err=2 text=controls require LDAPv3
conn=8570 op=2 do_search: get_ctrls failed
conn=8570 fd=57 closed (operations error)
以下是当前安装在服务器上的名称中带有“ldap”的软件包列表:
$ sudo dpkg --list '*ldap*' | grep '^i' | \
sed 's/^[^ ]* *\([^ ]* *[^ ]*\).*/\1/'
ldap-auth-client 0.5.3
ldap-auth-config 0.5.3
ldap-utils 2.4.28-1.1ubuntu4
libldap-2.4-2 2.4.28-1.1ubuntu4
libnet-ldap-perl 1:0.4300-2ubuntu1
libnss-ldap 264-2.2ubuntu2
libpam-ldap 184-8.5ubuntu2
smbldap-tools 0.9.7-1ubuntu1
sudo-ldap 1.8.3p1-1ubuntu3.3
更新:我也尝试安装 libnss-ldapd 和 libpam-ldapd 包(以替换上面的非 *d 版本),但这也不能解决问题。
编辑:Ubuntu 错误跟踪器上针对此问题打开了一个错误:https://bugs.launchpad.net/ubuntu/+source/openldap/+bug/1023025