7 окт. 2015 г.

samba4 secrets.keytab regeneration (fix KVNO mismatch error)

Запишу, чтобы не затерялось.
Внезапно перестали вводиться компьютеры в домен. Подозреваю, все остальное, завязанное на контроллере домена и кейтабах, тоже бы отпало, если бы работало. Логи samba4 показали ошибку:
GSS server Update(krb5)(1) Update failed:  Miscellaneous failure (see text): Failed to find DC0$@EXAMPLE.ORG(kvno 7) in keytab FILE:/var/lib/samba/private/secrets.keytab (arcfour-hmac-md5)
Содержимое "родного" кейтаба, создаваемого при развертывании домена:
root@dc0:/var/lib/samba/private# klist -ke secrets.keytab
Keytab name: FILE:/var/lib/samba/private/secrets.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   1 HOST/dc0@EXAMPLE.ORG (des-cbc-crc)
   1 HOST/dc0.example.org@EXAMPLE.ORG (des-cbc-crc)
   1 DC0$@EXAMPLE.ORG (des-cbc-crc)
   1 HOST/dc0@EXAMPLE.ORG (des-cbc-md5)
   1 HOST/dc0.example.org@EXAMPLE.ORG (des-cbc-md5)
   1 DC0$@EXAMPLE.ORG (des-cbc-md5)
   1 HOST/dc0@EXAMPLE.ORG (arcfour-hmac)
   1 HOST/dc0.example.org@EXAMPLE.ORG (arcfour-hmac)
   1 DC0$@EXAMPLE.ORG (arcfour-hmac)
   1 HOST/dc0@EXAMPLE.ORG (aes128-cts-hmac-sha1-96)
   1 HOST/dc0.example.org@EXAMPLE.ORG (aes128-cts-hmac-sha1-96)
   1 DC0$@EXAMPLE.ORG (aes128-cts-hmac-sha1-96)
   1 HOST/dc0@EXAMPLE.ORG (aes256-cts-hmac-sha1-96)
   1 HOST/dc0.example.org@EXAMPLE.ORG (aes256-cts-hmac-sha1-96)
   1 DC0$@EXAMPLE.ORG (aes256-cts-hmac-sha1-96)
Строчка с DC0$@EXAMPLE.ORG в кейтабе есть, однако KVNO отличается, отсюда и ошибка. Почему такое не случалось раньше (или случалось, но не приводило к проблеме) и как этого избежать, неведомо. В интернетах нашлись кивания на то, что такое поведение Active Directory в принципе нормально, есть даже RFC 4120, где я, правда, нужной информации не почерпнул. 
Вообще, вроде как, изменение kvno вызывать проблем с авторизацией не должно, тем более что Active Directory его значение игнорирует (исключая случай работы с RODC, но это мимо кассы). Но вот так получилось. 
Как это можно симптоматически порешать? Регенерацией кейтабов, где имеет место быть разночтение KVNO.

В примерах команды идут в одну строчку:
samba-tool domain exportkeytab  /root/1.keytab --principal=HOST/dc0.example.org@EXAMPLE.ORG
samba-tool domain exportkeytab  /root/1.keytab --principal=HOST/dc0@EXAMPLE.ORG
samba-tool domain exportkeytab  /root/1.keytab --principal='DC0$@EXAMPLE.ORG'
samba-tool domain exportkeytab  /root/2.keytab --principal=DNS/dc0.example.org@EXAMPLE.ORG
samba-tool domain exportkeytab  /root/2.keytab --principal=DNS/dc0@EXAMPLE.ORG
samba-tool domain exportkeytab  /root/2.keytab --principal=dns-dc0@EXAMPLE.ORG
Дальше проверим правильность сгенерерированных файлов и заменим старые кейтабы новыми:
cd /var/lib/samba/private/
klist -ke /root/1.keytab
klist -ke secrets.keytab
mv secrets.keytab secrets.keytab.bak
cp /root/1.keytab secrets.keytab
systemctl restart samba-ad-dc.service
klist -ke /root/2.keytab
klist -ke dns.keytab
mv dns.keytab dns.keytab.bak
cp /root/2.keytab dns.keytab
chown bind:bind dns.keytab
systemctl restart bind9.service
Аналогично следует поступить и с другими службами, если они оказались затронуты проблемой.