На днях получил по электронной почте интересный комментарий к статье про подключение Debian GNU/Linux 8.6 к домену Active Directory с помощью SSSD и realmd от одного из наших читателей - Степана Кохановского. В силу того, что данный комментарий объёмен и описывает некоторое обходное решение известной проблемы, я решил опубликовать его в виде отдельного поста.
Далее полностью процитирую комментарий Степана.
В статье при вводе машины в домен появляется следующая ошибка:
... "! Couldn't set service principals on computer account CN=KOM-APP31,OU=Linux Servers,OU=KOM,DC=ad,DC=holding,DC=com: 00002083: AtrErr: DSID-03151785, #1: 0: 00002083: DSID-03151785, problem 1006 (ATT_OR_VALUE_EXISTS), data 0, Att 90303 (servicePrincipalName)" ...
Автор обосновывает это тем, что при вводе использует учетные данные обычного доменного пользователя, а не администратора домена:
"В моём примере видно, что процесс ввода в домен завершился успешно, однако с заполнением атрибута servicePrincipalName в свойствах учётной записи компьютера в домене возникла проблема, так как указанному в опции --user пользователю petya банально не хватило прав на это действие."
Это не совсем верно. В этом можно легко убедиться, выполнив повторный ввод в домен под учетной записью доменного администратора. В моем случае ошибка воспроизводится даже при использовании системной учетной записи Administrator.
Ошибка возникает на тех Debian-системах, где в качестве основного имени хоста используется короткое DNS имя, а не FQDN. Т. е. в тех случаях, когда вызов утилиты "hostname" без каких-либо параметров возвращает имя хоста без DNS суффикса.
Баг описан в трекере Debian: Debian Bug report logs - #858981
А также на "родине" realmd и adcli, freedesktop.org: Bugzilla - Bug 86107
Если кратко, суть заключается в том, что adcli использует gethostname() для получения FQDN машины, что в результате приводит к ошибке при попытке зарегистрировать два одинаковых SPN: host/<netbiosname> и host/<fqdn>. Собственно, упомянутая выше ошибка "ATT_OR_VALUE_EXISTS" как раз возникает при попытке установить в атрибут LDAP значение, которое в нем уже есть.
LDAP_TYPE_OR_VALUE_EXISTS refers to LDAP Result Code 20 which is returned in LDAP Result indicating that the attribute value or AttributeType value specified in a Modify Request or Add Request already exists.
Источник: Ldapwiki : LDAP_TYPE_OR_VALUE_EXISTS
В качестве workaround, перед вводом машины в домен можно временно выставить в качестве имени хоста FQDN:
# hostname kom-app31.ad.holding.com
Тогда вызов realm join и последующая установка SPN выполняется без ошибок. После чего можно вернуть короткое имя хоста обратно или просто перезагрузить машину.
К слову, забавно, что ошибка связана больше с идеологическим различиями дистрибутивов, чем с технической недоработкой. Так вышло, что в родных для adcli и realmd дистрибутивах - RHEL и CentOS - принято в качестве имени хоста использовать FQDN, тогда как в Debian и Ubuntu - наоборот, короткое имя без DNS суффикса.
Дополнительный источник информации: Serverfault.com - Setting the hostname: FQDN or short name?
Спасибо за информацию, Степан!
Обратная ссылка: Рекомендации по настройке SSSD в Debian GNU/Linux — Блог IT-KB /
Спасибо, реально выручил! Centos 8 "из коробки" аналогичная проблема - пока не сделаешь FQDN в качестве имени хоста - не работает вся функциональность SSSD для объединения в домен.