У меня были некоторые проблемы, и я их исправил, но в stackexchange нет сообщений об этом, поэтому я тоже опубликую вопрос и ответ.
(РЕДАКТИРОВАТЬ: видимо есть очень похожий пост... который я не мог найти иным способом, кроме поиска "GSUFFIX" ... уже зная ответ)
Я установил пакеты из дистрибутива:
apt install slapd ldap-utils ldapscripts libnss-ldap
А затем я обновился с чего-то более старого до Ubuntu 16.04. (причина 2-й проблемы?)
или вы можете изменить это на более старый способ, используя nslcd, который работает намного лучше (не заставляет systemd-logind съедать 100% ЦП и никогда не запускаться полностью, а также некоторые странные условия гонки при загрузке ... nssldap-update-ignoreusers
должен исправить такие вещи, но не делает):
apt install libnss-ldapd libpam-ldap
Используйте значение по умолчанию для всего, кроме таких вещей, как ваше отличительное имя и пароль.
И теперь можно подумать, что это просто сработает ... в дистрибутиве, конечно, есть настройка, которая работает, поскольку вы использовали только их пакеты, верно? Но вместо этого ldapscripts дает сбой по нескольким причинам.
заключается в том, что 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
# 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.
Итак, это проблема, которую нужно решить в ответе, который я нигде не нашел в Интернете.
Итак, чтобы исследовать, я взял сценарий 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=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, очевидно, верны. И теперь это работает.