Kerberos на Ubuntu 18.04 — настройка сервера и клиента
TL;DR
Kerberos — централизованный протокол аутентификации на основе симметричной криптографии. В этой пошаговой инструкции показано, как установить и настроить KDC (Kerberos Key Distribution Center) на Ubuntu 18.04, подключить клиент и протестировать вход по SSH через Kerberos. Включены контрольные списки, рекомендации по безопасности и план тестирования.
Что такое Kerberos
Kerberos — сетевой протокол аутентификации, использующий симметричные ключи и доверенный третий сервер (KDC) для выдачи билетов доступа. Кратко: KDC проверяет личность клиента и выдает билет (TGT), который клиент использует для доступа к сервисам без повторного ввода пароля.
Ключевые термины (одно предложение):
- KDC — сервер выдачи билетов и ключей.
- Realm — домен аутентификации Kerberos (обычно верхний регистр, напр. EXAMPLE.COM).
- Principal — уникальное имя сущности в Kerberos (пользователь, хост, служба).
- Keytab — файл с ключами, который позволяет сервисам подтверждать свою идентичность без ввода пароля.
Предварительные требования
- Две машины Ubuntu 18.04 (в примере):
- 10.10.10.15 krb5.ahmad.io krb5 (KDC)
- 10.10.10.16 client1.ahmad.io client1 (клиент)
- Доступ root или sudo на обеих машинах
- Устойчивое сетевое соединение между сервером и клиентом
Изображение инфраструктуры сети: 
План работ
- Настроить FQDN и /etc/hosts на сервере и клиенте
- Установить KDC Kerberos на сервере
- Сконфигурировать KDC, создать административные принципы и keytab
- Установить и настроить Kerberos-клиент на клиентской машине
- Протестировать аутентификацию SSH через Kerberos
Шаг 1 — Настройка FQDN
Сначала задайте FQDN на Kerberos-сервере и отредактируйте /etc/hosts.
Изменить hostname:
hostnamectl set-hostname krb5.ahmad.ioОтредактируйте /etc/hosts (vim или любой редактор):
vim /etc/hostsДобавьте запись с IP и FQDN:
10.10.10.15 krb5.ahmad.io krb5Проверьте разрешение FQDN:
ping -c 3 $(hostname -f)
Важно: DNS-имена и записи в /etc/hosts должны совпадать с тем, что вы будете использовать в Kerberos Realm и при создании keytab.
Шаг 2 — Установка KDC Kerberos на сервере
На машине krb5 (10.10.10.15) установите необходимые пакеты:
sudo apt install krb5-kdc krb5-admin-server krb5-config -yВо время установки появится диалог для настройки Realm и серверов. По умолчанию Realm будет взят из доменного имени в верхнем регистре, например AHMAD.IO. Укажите:
- Kerberos Realm: AHMAD.IO
- Kerberos server: krb5.ahmad.io
- Admin server: krb5.ahmad.io
Пример настройки в установщике:


После установки служба может не запуститься до полной конфигурации — это ожидаемо.
Шаг 3 — Конфигурация KDC
Создайте мастер-пароль для REALM и сгенерируйте stash-файл:
sudo krb5_newrealmПароль будет сохранён в /etc/krb5kdc/stash.
Далее создайте административного пользователя и зарегистрируйте хост KDC в базе.
Запустите локальную административную консоль:
sudo kadmin.localДобавьте администратора root/admin:
addprinc root/adminЗадайте сложный пароль для root/admin. Затем добавьте KDC-хост в базу и запишите keytab:
addprinc -randkey host/krb5.ahmad.io
ktadd host/krb5.ahmad.ioВыйдите:
quit
Добавьте разрешение для root/admin в ACL:
vim /etc/krb5kdc/kadm5.aclВставьте строку:
root/admin *Перезапустите службу администратора Kerberos:
sudo systemctl restart krb5-admin-server.serviceПосле этого KDC готов принимать административные команды.

Шаг 4 — Установка и настройка Kerberos-клиента
На клиентской машине client1 (10.10.10.16) выполните настройку FQDN и /etc/hosts:
hostnamectl set-hostname client1.ahmad.io
vim /etc/hostsДобавьте обе записи:
10.10.10.15 krb5.ahmad.io krb5
10.10.10.16 client1.ahmad.io client1
Установите клиентские пакеты:
sudo apt install -y krb5-user libpam-krb5 libpam-ccreds auth-client-configВо время установки укажите тот же Realm и серверы:
- Realm: AHMAD.IO
- Kerberos server: krb5.ahmad.io
- Admin server: krb5.ahmad.io


Затем подключитесь к KDC с клиента через kadmin и добавьте client principal и keytab:
kadminВас попросят пароль root/admin. После входа выполните:
addprinc -randkey host/client1.ahmad.io
ktadd host/client1.ahmad.io
quitТеперь клиент зарегистрирован в KDC и может использовать Kerberos.
Шаг 5 — Тестирование SSH-аутентификации через Kerberos
Цель: пользователь ammar с клиента подключается по SSH к krb5.ahmad.io и проходит аутентификацию по Kerberos без пароля SSH.
Настройка на сервере krb5.ahmad.io:
Создайте системного пользователя ammar:
useradd -m -s /bin/bash ammarДобавьте пользователя в базу KDC:
kadmin.local
addprinc ammar
quitОтредактируйте SSHD конфиг /etc/ssh/sshd_config и включите GSSAPI:
vim /etc/ssh/sshd_configНайдите и установите значения:
GSSAPIAuthentication yes
GSSAPICleanupCredentials yesПерезапустите sshd:
systemctl restart sshd
На клиенте:
Создайте локального пользователя и переключитесь в его сессию:
useradd -m -s /bin/bash ammar
su - ammarИнициализируйте Kerberos-талон для пользователя ammar (kinit):
kinit ammarВведите пароль, затем проверьте билеты:
klistВы увидите TGT и срок его действия.

Подключение по SSH с Kerberos:
ssh krb5.ahmad.ioЕсли всё настроено верно, вы попадёте на сервер без запроса пароля SSH (аутентификация по GSSAPI/Kerberos).

Ниже — пример логов SSH при успешной аутентификации (включите подробность логирования, если нужны подробности).
Контрольный список перед вводом в эксплуатацию
- DNS/FQDN корректно разрешаются на обеих машинах
- Realm в /etc/krb5.conf соответствует выбранному (верхний регистр)
- KDC имеет корректный keytab и ACL содержит admin-права
- Сервисы (ssh, httpd и т. п.) имеют соответствующие host/ сервисные principals и keytab
- Время синхронизировано (NTP); критично для Kerberos
- Резервное копирование /etc/krb5kdc и keytab-файлов
План тестирования и критерии приёмки
Критерии приёмки:
- Пользователь получает TGT через kinit
- klist показывает валидный TGT с ожидаемым временем жизни
- Вход по SSH с клиента на сервер выполняется без ввода SSH-пароля
- Логи KDC не содержат ошибок при выдаче билетов
Тестовые сценарии:
- kinit с действительным пользователем -> ожидается успешная выдача TGT
- kinit с неправильным паролем -> ожидается отказ
- Попытка входа по SSH без TGT -> ожидается запрос пароля SSH (fallback)
- Вход по SSH с действительным TGT -> успешная аутентификация
Руководство по устранению неисправностей (Incident runbook)
- Проблема: kinit возвращает ошибку “Preauthentication failed”.
- Проверьте правильность пароля и корректность principal в KDC.
- Убедитесь, что время на клиенте и KDC синхронизировано (ntpq -p).
- Проблема: klist пуст или не показывает TGT.
- Выполните kinit и проверьте вывод /var/log/auth.log и /var/log/krb5kdc.log.
- Проблема: SSH не принимает GSSAPI аутентификацию.
- Проверьте /etc/ssh/sshd_config на сервере (GSSAPIAuthentication yes).
- Убедитесь, что сервисный principal типа host/hostname есть в KDC и keytab на сервере корректен.
- Проблема: “Clock skew” или “KDC has no support for encryption type”.
- Проверьте синхронизацию времени и политики шифрования в /etc/krb5.conf.
- Если требуется детальная диагностика, включите debug-режим в kinit (-V) и увеличьте логирование в /etc/krb5kdc/kdc.conf.
Безопасность и жёсткие настройки
- Нельзя передавать keytab по незащищённым каналам; храните keytab с правами root:root 600.
- Ограничьте доступ к /etc/krb5kdc/* и /etc/krb5.conf только администраторам.
- Используйте сильные пароли для admin principals и регулярно их обновляйте.
- Ограничьте list/modify права в kadm5.acl по минимуму.
- Включите использование современных типов шифрования в /etc/krb5.conf и отклоняйте устаревшие алгоритмы.
- Обязательно поддерживайте синхронизацию времени (NTP/chrony).
Когда Kerberos не подойдёт (ограничения)
- Для небольших инфраструктур с несколькими машинами проще использовать SSH-ключи.
- Если время на клиентах не может быть синхронизировано, Kerberos будет ненадёжен.
- Для сценариев, где предпочтительна федерация через SAML/OAuth, Kerberos не обеспечивает SSO в браузере без дополнительных мостов.
Альтернативные подходы
- SSH ключи (простая настройка, без централизованного управления билетов).
- LDAP + PAM (централизованное хранение учётных записей, но без тикетов как у Kerberos).
- Использование решения SSO на базе OAuth2/OIDC для веб-сервисов.
Ментальные модели и эвристики
- Модель «билет-замок-ключ»: KDC выдаёт билет (ключ) клиенту, билет предъявляется службе, служба сверяет билет с KDC и открывает доступ.
- Эвристика для внедрения: начните с тестовой сети из двух машин, затем добавляйте сервисы и хосты по очереди.
Совместимость и миграция
- Процедура аналогична на Ubuntu 20.04/22.04, но пакеты и пути конфигурации могут отличаться. Проверьте версии krb5-kdc и krb5-admin-server.
- При миграции сохраняйте ключевые файлы (/etc/krb5kdc/stash, keytab) и обновляйте ACL.
Фактбокс — ключевые пункты
- Порт для KDC: 88/UDP и 88/TCP
- Формат Realm: верхний регистр, например EXAMPLE.COM
- Ключевой файл host keytab обычно: /etc/krb5.keytab или /etc/krb5/krb5.keytab в зависимости от дистрибутива
- Критичность времени: допустимое отклонение обычно <5 минут
Роли и обязанности (короткие чеклисты)
- Администратор KDC:
- Установить и защитить KDC
- Создать admin principals и ACL
- Управлять keytab и бекапами
- Системный администратор сервиса (SSH, HTTP):
- Создать host principals и развернуть keytab
- Настроить сервис на использование GSSAPI/Kerberos
- Оператор клиента:
- Настроить /etc/krb5.conf и убедиться в корректном Realm
- Тестировать kinit/klist и SSH-подключения
Краткий глоссарий
- Realm — домен аутентификации Kerberos
- Principal — идентификатор сущности в Kerberos
- TGT — Ticket Granting Ticket, билет, дающий право запрашивать сервисные билеты
- Keytab — файл с зашифрованными ключами для principal
Резюме
- Kerberos даёт централизованную, безопасную аутентификацию по билетам и удобную модель SSO для инфраструктур сервиса-клиент.
- Настройка требует аккуратной работы с именами, временем и keytab-файлами.
- Включённые контрольные списки и runbook ускорят внедрение и диагностику проблем.
Ссылки
Официальная документация MIT Kerberos: https://web.mit.edu/kerberos/
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента