Гид по технологиям

Kerberos на Ubuntu 18.04 — настройка сервера и клиента

• 7 min read • Системное администрирование • Обновлено 16 Nov 2025
Kerberos на Ubuntu 18.04 — сервер и клиент
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 на обеих машинах
  • Устойчивое сетевое соединение между сервером и клиентом

Изображение инфраструктуры сети: /files/faec6381-48ae-43a0-8cf7-e4ab19f38dac.jpg

План работ

  1. Настроить FQDN и /etc/hosts на сервере и клиенте
  2. Установить KDC Kerberos на сервере
  3. Сконфигурировать KDC, создать административные принципы и keytab
  4. Установить и настроить Kerberos-клиент на клиентской машине
  5. Протестировать аутентификацию 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)

Конфигурация имени хоста и проверка разрешения FQDN

Важно: 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

Пример настройки в установщике:

Указание имени KDC при установке

Указание Admin сервера при установке

После установки служба может не запуститься до полной конфигурации — это ожидаемо.

Шаг 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

Создание admin и host principal на KDC

Добавьте разрешение для root/admin в ACL:

vim /etc/krb5kdc/kadm5.acl

Вставьте строку:

root/admin *

Перезапустите службу администратора Kerberos:

sudo systemctl restart krb5-admin-server.service

После этого KDC готов принимать административные команды.

Перезапуск Kerberos сервиса

Шаг 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

Настройка FQDN и hosts на клиенте

Установите клиентские пакеты:

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 на клиенте при установке

Указание Admin сервера на клиенте при установке

Затем подключитесь к 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

Логи SSH и проверка GSSAPI

На клиенте:

Создайте локального пользователя и переключитесь в его сессию:

useradd -m -s /bin/bash ammar
su - ammar

Инициализируйте Kerberos-талон для пользователя ammar (kinit):

kinit ammar

Введите пароль, затем проверьте билеты:

klist

Вы увидите TGT и срок его действия.

Вывод klist с билетом TGT

Подключение по SSH с Kerberos:

ssh krb5.ahmad.io

Если всё настроено верно, вы попадёте на сервер без запроса пароля SSH (аутентификация по GSSAPI/Kerberos).

Успешный SSH-вход по 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 не содержат ошибок при выдаче билетов

Тестовые сценарии:

  1. kinit с действительным пользователем -> ожидается успешная выдача TGT
  2. kinit с неправильным паролем -> ожидается отказ
  3. Попытка входа по SSH без TGT -> ожидается запрос пароля SSH (fallback)
  4. Вход по SSH с действительным TGT -> успешная аутентификация

Руководство по устранению неисправностей (Incident runbook)

  1. Проблема: kinit возвращает ошибку “Preauthentication failed”.
    • Проверьте правильность пароля и корректность principal в KDC.
    • Убедитесь, что время на клиенте и KDC синхронизировано (ntpq -p).
  2. Проблема: klist пуст или не показывает TGT.
    • Выполните kinit и проверьте вывод /var/log/auth.log и /var/log/krb5kdc.log.
  3. Проблема: SSH не принимает GSSAPI аутентификацию.
    • Проверьте /etc/ssh/sshd_config на сервере (GSSAPIAuthentication yes).
    • Убедитесь, что сервисный principal типа host/hostname есть в KDC и keytab на сервере корректен.
  4. Проблема: “Clock skew” или “KDC has no support for encryption type”.
    • Проверьте синхронизацию времени и политики шифрования в /etc/krb5.conf.
  5. Если требуется детальная диагностика, включите 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/

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро