我遇到了一些问题并解决了它们,但是 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 个显然是正确的。现在它可以正常工作了。