Обходное решение для ошибки регистрации servicePrincipalName (ATT_OR_VALUE_EXISTS) при подключении Debian GNU/Linux Jessie к домену Active Directory с помощью realm join

imageНа днях получил по электронной почте интересный комментарий к статье про подключение 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?


Спасибо за информацию, Степан!

Добавить комментарий