ldapscripts ldapaddgroup 失败,显示“没有这样的对象 (32)”和“将组 ${groupname} 添加到 LDAP 时出错”

ldapscripts ldapaddgroup 失败,显示“没有这样的对象 (32)”和“将组 ${groupname} 添加到 LDAP 时出错”

我遇到了一些问题并解决了它们,但是 stackexchange 上没有关于它的帖子,所以我也会发布一个问答。

(编辑:显然有一个非常相关的帖子...除了寻找“GSUFFIX”之外我找不到任何其他方法......已经知道答案了)

我安装了发行版附带的软件包:

apt install slapd ldap-utils ldapscripts libnss-ldap

然后我从旧版本升级到 Ubuntu 16.04。(第二个问题的原因是什么?)

或者你可以使用 nslcd 将其更改为旧方法,这种方法效果更好(不会使 systemd-logind 占用 100% 的 CPU 并且永远无法完全启动,以及一些奇怪的启动竞争条件……nssldap-update-ignoreusers应该可以修复这些问题但却没有):

apt install libnss-ldapd libpam-ldap

除设置您的专有名称和密码等内容外,其他一切都采用默认设置。

现在你会认为它就可以正常工作了...发行版当然有一个可以正常工作的设置,因为你只使用了它们的软件包,对吗?但 ldapscripts 却在某些方面失败了。

问题 1 - 已解决

是 debian 提示并要求输入密码,并将其放在一个文件中,但它会将其放在一个新行中,并且除非您删除它,否则脚本将不起作用。

所以你可以修复这个问题:

echo -n "secretgoeshere" > /etc/ldap.secret
echo -n "secretgoeshere" > /etc/ldapscripts/ldapscripts.passwd

# just in case...
chown root:root /etc/ldap.secret /etc/ldapscripts/ldapscripts.passwd
chmod go= /etc/ldap.secret /etc/ldapscripts/ldapscripts.passwd

# and because you can't be sure it won't break it again next time debconf runs, but I can assure you it will
chattr +i /etc/ldap.secret /etc/ldapscripts/ldapscripts.passwd

问题 2 - 我将单独回答

# ldapaddgroup test
Error adding group test to LDAP

您可以从日志中获得更多详细信息

# tail /var/log/ldapscripts.log
Apr 09 16:51:57 ldapservername ldapscripts: ldapaddgroup(peter): /usr/sbin/ldapaddgroup test
No such object (32)
Matched DN: dc=example,dc=com
No such object (32)
Matched DN: dc=example,dc=com
ldap_add: No such object (32)
        matched DN: dc=example,dc=com
  -> Error adding group test to LDAP

当然,它没有说明您引用的哪个对象不存在。显然不是组名,因为它应该只在已经存在时才抱怨,而不存在是必需的。而且 ldapscripts 会删除临时文件,所以您甚至看不到 ldif。

所以这就是答案中需要解决的问题,我在网上找不到答案。

答案1

为了进行调查,我获取了 ldapaddgroup 脚本,并对其进行了复制和修改:

mkdir ~/ldapscripts-mod
cd ~/ldapscripts-mod

cp /usr/sbin/ldapaddgroup .
cp /usr/share/ldapscripts/runtime .

vim ldapaddgroup
    change the runtime source line like this (optional... just do this if you customize the runtime script):

    -_RUNTIMEFILE="/usr/share/ldapscripts/runtime"
    +#_RUNTIMEFILE="/usr/share/ldapscripts/runtime"
    +_RUNTIMEFILE="/root/ldapscripts-mod/runtime"

    you could also output the ldif if you like:

    -$_getldif | _filterldif | _askattrs | _utf8encode | _ldapadd
    +$_getldif | _filterldif | _askattrs | _utf8encode | tee ~/ldapscripts-mod/test.ldif | _ldapadd

vim runtime
    I added echos everywhere (make sure to >&2 or they end up in that pipe above)... but nothing really worth noting here.

    One of the echos showed which ldapadd command it used so I could use it below (with the cat added).

因此,我看到 ldif 有ou=Groups,但我的数据库没有这样的 ou... 它有ou=Group。我通过编辑 ldif 并手动添加它来确认这是问题所在:

cat ~/ldapscripts-mod/test.ldif | /usr/bin/ldapadd -y /etc/ldapscripts/ldapscripts.passwd -D cn=admin,dc=example,dc=com -xH ldap://ldapservername/

你也可以看到这样的情况:

# slapcat | grep -Eo "ou=[^,]+" | sort -u
ou=Group
ou=Hosts
ou=Idmap
ou=people
ou=People

幸运的是,这很容易配置......

vim /etc/ldapscripts/ldapscripts.conf
    GSUFFIX="ou=Group"
    USUFFIX="ou=People"
    MSUFFIX="ou=Hosts"

我真的不知道 MSUFFIX 是什么,也不知道我是否修复了什么……但我至少将它设置为某个存在的内容。其他 2 个显然是正确的。现在它可以正常工作了。

相关内容