Подробный гайд: как проверить KDC сервер (Key Distribution Center)
KDC (Key Distribution Center) — центральный компонент протокола Kerberos, отвечающий за выдачу билетов (tickets) и аутентификацию пользователей и служб. Проверка KDC необходима для диагностики проблем аутентификации, настройки новых серверов или подтверждения работоспособности существующей инфраструктуры.
1. Предварительные требования
- Доступ к серверу KDC (по SSH или локально) с правами root/администратора (или соответствующими привилегиями).
- Установленные клиентские утилиты Kerberos (обычно пакет
krb5-userна Debian/Ubuntu,krb5-workstationна RHEL/CentOS, или встроенные средства в Windows). - Базовое понимание структуры Kerberos (realm, principal, keytab).
2. Проверка запущен ли KDC
Для MIT Kerberos (Linux/Unix)
KDC обычно работает как демон krb5kdc.
Проверьте его статус:
# systemd
systemctl status krb5kdc
# SysV init
service krb5kdc status
# Проверка процесса
ps aux | grep krb5kdc
Если служба не запущена, запустите её:
systemctl start krb5kdc
Дополнительно проверьте, работает ли административный демон kadmind (отвечает за изменение паролей, создание принципалов):
systemctl status kadmind
Для Active Directory
В Active Directory KDC встроен в службу Kerberos Key Distribution Center, которая является частью LSASS.
Проверить можно через оснастку «Службы» (services.msc) или PowerShell:
Get-Service -Name KDC
Обычно служба называется KDC или kdcsvc. Если она не запущена, запустите её.
3. Проверка сетевых портов
Kerberos использует следующие порты (по умолчанию):
- 88 (TCP/UDP) — основной порт KDC для запросов аутентификации.
- 464 (TCP/UDP) — смена пароля (kpasswd).
- 749 (TCP) — администрирование KDC (kadmin) для MIT Kerberos (иногда используется 749/tcp и 464/tcp).
Проверьте, слушает ли сервер эти порты:
# netstat (устаревший, но часто доступен)
netstat -tulpn | grep -E '(:88|:464|:749)'
# ss (современная замена)
ss -tulpn | grep -E '(:88|:464|:749)'
В выводе должны быть строки вида:
tcp LISTEN 0 5 0.0.0.0:88 0.0.0.0:* users:(("krb5kdc",pid=1234,fd=7))
udp UNCONN 0 0 0.0.0.0:88 0.0.0.0:* users:(("krb5kdc",pid=1234,fd=8))
Для Active Directory порты 88 и 464 должны слушаться процессом lsass.exe. Можно проверить через netstat -ano | findstr :88 и сопоставить PID.
4. Проверка конфигурации Kerberos
Файл /etc/krb5.conf (клиентская конфигурация)
На сервере KDC этот файл также определяет realm и расположение KDC. Проверьте секции [libdefaults], [realms], [domain_realm].
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
[realms]
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
Убедитесь, что:
default_realmсовпадает с реальным именем realm.- В секции
[realms]указан правильный адрес KDC (имя хоста или IP). - Если используется DNS-обнаружение, проверьте записи SRV (см. раздел 6).
Файл /etc/krb5kdc/kdc.conf (конфигурация MIT KDC)
Содержит параметры самого KDC. Основные секции:
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.COM = {
database_name = /var/lib/krb5kdc/principal
admin_keytab = /etc/krb5kdc/kadm5.keytab
acl_file = /etc/krb5kdc/kadm5.acl
key_stash_file = /etc/krb5kdc/stash
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = aes256-cts
supported_enctypes = aes256-cts:normal aes128-cts:normal
}
Проверьте:
- Пути к базе данных principals и stash-файлу существуют.
- Порты соответствуют ожидаемым.
- Типы шифрования поддерживаются (обычно AES).
Для Active Directory
Конфигурация хранится в Active Directory, но можно проверить через klist на контроллере домена или утилитой ksetup.
5. Проверка базы данных KDC (для MIT Kerberos)
Убедитесь, что база данных principals цела и доступна.
# Просмотр списка принципалов (требует прав root)
kadmin.local -q "listprincs" | head
Если база повреждена или не найдена, KDC не сможет выдавать билеты.
Проверить целостность можно с помощью kdb5_util:
kdb5_util dump /tmp/kdc_dump
Если команда успешна, база читается.
Также проверьте наличие stash-файла (содержит мастер-ключ):
ls -l /etc/krb5kdc/stash
6. Проверка DNS и обнаружения KDC
Kerberos клиенты могут находить KDC через DNS (SRV-записи) или через файл krb5.conf.
Проверка SRV-записей (обычно для Active Directory)
# Для Linux
dig _kerberos._udp.example.com SRV +short
dig _kerberos._tcp.example.com SRV +short
dig _kpasswd._udp.example.com SRV +short
# Для Windows
nslookup -type=SRV _kerberos._tcp.example.com
Вы должны увидеть записи, указывающие на сервер(ы) KDC, например:
0 100 88 kdc.example.com.
Если записей нет, клиенты могут не найти KDC автоматически. В этом случае в krb5.conf нужно явно указать kdc =.
Проверка прямого и обратного разрешения имён
nslookup kdc.example.com
nslookup <IP-адрес>
Имя KDC должно корректно разрешаться, а обратная зона должна возвращать то же имя (важно для Kerberos).
7. Тестирование аутентификации
Получение TGT (Ticket-Granting Ticket)
На клиентской машине (или на сервере) выполните:
kinit username@EXAMPLE.COM
Введите пароль пользователя. При успехе не будет вывода.
Проверьте полученные тикеты:
klist
Вывод должен содержать строку с krbtgt/EXAMPLE.COM@EXAMPLE.COM — это TGT.
Если ошибка, прочитайте сообщение:
Cannot find KDC for realm "EXAMPLE.COM"— проблема с DNS или krb5.conf.Preauthentication failed— неверный пароль или проблемы с шифрованием.Clock skew too great— рассинхронизация времени.
Проверка сервисного тикета
Для проверки доступа к сервису, защищённому Kerberos (например, HTTP, SSH), можно использовать kvno:
kvno host/server.example.com@EXAMPLE.COM
Если команда успешна, будет выведен номер версии ключа.
Также проверьте, что сервисный principal существует в KDC:
kadmin.local -q "getprinc host/server.example.com"
Смена пароля (проверка kadmind)
kpasswd username@EXAMPLE.COM
Потребуется ввести старый и новый пароль. Если kadmind не работает, будет ошибка.
8. Проверка логов KDC
Логи помогают диагностировать проблемы.
MIT Kerberos
Обычно логи находятся в /var/log/krb5kdc.log (зависит от конфигурации syslog). Проверьте настройки в /etc/krb5kdc/kdc.conf или /etc/syslog.conf.
tail -f /var/log/krb5kdc.log
Ищите ошибки: AS_REQ (запрос на аутентификацию), TGS_REQ, KRB5KDC_ERR_*.
Active Directory
События Kerberos логируются в системном журнале Windows (Event Viewer) в разделе «Security» или «System».
Полезные фильтры:
- Источник:
Kerberos-Key-Distribution-Center - Коды событий: 4768 (TGT выдан), 4771 (ошибка предварительной аутентификации).
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4768,4771} -MaxEvents 10
9. Проверка синхронизации времени
Kerberos критически зависит от точного времени: максимальная допустимая разница обычно 5 минут.
На Linux:
# Проверить текущее время и синхронизацию с NTP
date
chronyc tracking # если используется chrony
ntpq -p # если используется ntpd
На Windows:
w32tm /query /status
Если время расходится, настройте NTP и синхронизируйте.
10. Дополнительные проверки для Active Directory
Если KDC — это контроллер домена Windows, проверьте его общее состояние:
# Проверка всех контроллеров домена
dcdiag /test:kccevent /test:advertising /test:services
# Проверка Kerberos через klist
klist tgt
Также убедитесь, что служба KDC запущена и не имеет ошибок в журнале.
11. Типичные ошибки и способы устранения
| Ошибка | Возможная причина | Решение |
|---|---|---|
Cannot find KDC for realm |
Неправильный realm, отсутствует запись в krb5.conf или DNS | Проверьте krb5.conf, добавьте kdc = или настройте SRV-записи |
Preauthentication failed |
Неверный пароль, неподдерживаемый тип шифрования, проблемы с ключами | Проверьте пароль, убедитесь, что поддерживаемые enctypes совпадают |
Clock skew too great |
Расхождение времени между клиентом и KDC | Синхронизируйте время с NTP |
KDC has no support for encryption type |
Клиент использует шифрование, не поддерживаемое KDC | Измените настройки шифрования (например, включите AES) или обновите систему |
Cannot contact any KDC |
Порт 88 закрыт, KDC не запущен, сеть | Проверьте фаервол, статус службы, сетевую доступность |
kadmin: GSS-API error |
Проблемы с аутентификацией администратора, keytab | Проверьте права, используйте kadmin.local на сервере KDC |
12. Заключение
Проверка KDC включает несколько уровней: от простой проверки запущенного процесса до тестовой аутентификации и анализа логов. Систематический подход (сначала порты и процессы, затем конфигурация, DNS, время, и наконец функциональные тесты) позволяет быстро локализовать проблему.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.