Назад | Перейти на главную страницу

ldapscripts ldapaddgroup завершается с ошибкой «Нет такого объекта (32)» и «Ошибка добавления группы $ {groupname} в LDAP»

У меня были некоторые проблемы, и я их исправил, но в 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 дает сбой по нескольким причинам.

проблема 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.

Итак, это проблема, которую нужно решить в ответе, который я нигде не нашел в Интернете.

Итак, чтобы исследовать, я взял сценарий 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, очевидно, верны. И теперь это работает.