Для администраторов небольших сетей проблем в организации доступа пользователей к немногочисленным сетевым ресурсам, в общем, то и нет. Но как только сеть начинает расти, требуется уже синхронизировать учетные записи пользователей на всех сервисах и управлении доступом к различным сервисам. Здесь уже требуется централизованный подход, к решению этой проблемы. Сейчас разберем, как установить и настроить сетевую систему аутентификации пользователей Kerberos на примере Linux Ubuntu.
В 1983 году две компании DEC, IBM и MIT (Massachusetts Institute of Technology) начали работу над проектом Athena. Суть работ продолжавшихся 8 лет, заключалась в создании единой вычислительной среды, количество пользователей и сервисов в которой можно было бы легко расширить вплоть до 10 тысяч. Пользователь в такой среде мог бы спокойно выходить в сеть с любого компьютера, получать доступ к требуемым файлам и приложениям, не замечая различий в работе и интерфейсе. Было разработано множество передовых на тот момент технологий, из которых сегодня самыми известными являются графическая подсистема X-Window, которая применяется во всех Unix и Kerberos. Разработкой протокола защиты сетевых сервисов используемых в Athena занимались в MIT, в недрах которой и использовались версии 1-3. В 1987 году общественности был представлен протокол Kerberos 4, который имел ряд недостатков и ограничений. Если кто забыл греческую мифологию, так называли трехгодового пса охранявшего выход из царства мертвых Аида (он всего 5 раз не справился со своими обязанностями). В 1993 вышла пятая версия протокола, используемая и по сей день, хотя современные реализации могут работать и с 4 версией. В пятой версии использовалась весьма стойкая по тем временам криптография (DES с 56-битным ключом), и по американским законам попадала под категорию военных технологий, экспорт которых за территорию США запрещен. Поэтому была разработана версия MIT Bones в основу, которой была положена версия 4 и убрана вся сильная криптография. Экспорту Bones уже ни что не препятствовало, но такая “функциональность” никого естественно не устраивала. В 1997 году группа программистов KTH-KRB из Стокгольмского Королевского университета (Royal Institute of Technology in Sweden) выпустила вариант eBones, в котором недостающее было восстановлено. Но в современном мире больше известна реализация Kerberos 5 от KTH-KRB получившая название Heimdal (существо в скандинавской мифологии защищавшее богов, кстати, это еще и город в Trondheim, местность, исхоженная в Wolfenshtein вдоль и поперек). Сейчас версия от MIT распространяется уже безо всяких ограничений.
Кратко опишу принцип работы системы, чтобы было понятно, чем мы будем заниматься. Протокол описан в RFC 1510 . В настоящее время клиентские компоненты для работы с Kerberos имеются в большинстве современных операционных систем. Для подтверждения подлинности используется доверенная третья сторона, которая владеет секретными ключами всех субъектов и участвующая в по парной проверке подлинности. Когда клиент пытается получить доступ к ресурсу, он посылает запрос, содержащий сведения о себе и о запрашиваемой услуге. Весь процесс происходит в три этапа, в ответ контролер Kerberos (Key Distribution Center, KDC) выдает билет, удостоверяющий пользователя TGT (ticket granting ticket). Каждый билет имеет ограниченный срок жизни, что снижает интерес к его перехвату. Поэтому одним из требований к системе Kerberos синхронизация времени между всеми участниками. При последующем обращении к другим сервисам вводить пароль уже не нужно. Каждый участник системы Kerberos как служба, так и пользователь именуются принципал (principial). Каждый принципал имеет имя и пароль. Типичное имя принципала выглядит так root/admin@GRINDER.COM, что означает имя (primary name) root, характеристику (instance), который принадлежит сектору GRINDER.COM. Такой подход позволяет различать несколько служб работающих на одном компьютере, и среди однотипных служб выбирать нужную. Вся схема работы от пользователя скрыта. При обращении к ресурсу, по прежнему вводит только свой логин и пароль. Для удобства компьютеры могут быть объединены в сектора (realms), кстати в некоторой литературе realms переводят как домен. Все принципиалы сохраняются в базе данных сервера Kerberos. В сети может быть использовано несколько KDC, один из которых является основным (master). На master KDC устанавливается административный сервер kadmind управляющий политиками. Все конечно не так просто, и на порядок или два сложнее, но этого достаточно для понимания, того чего мы будем настраивать дальше.
Прежде чем установить Kerberos, необходимо настроить службу синхронизации времени (NTP – Network Time Protocol), без которой не возможна нормальная работа Kerberos.
$ sudo apt-get install ntp
Все настройки производятся в одном единственном файле.
$ sudo mcedit /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
# серверы с которыми будем синхронизировать время
server ntp.ubuntulinux.org
server pool.ntp.org
server time.nist.gov
# используем локальное время в случае неудачи
server 127.127.1.0
fudge 127.127.1.0 stratum 13
restrict default kod notrap nomodify nopeer noquery
# локальные пользователи могут запрашивать время
restrict 127.0.0.1 nomodify
# включаем вroadcast
broadcast 192.168.1.255
# прослушивание времени в сети
disable auth
broadcastclien
Перезапускаем сервер.
$ sudo /etc/init.d/ntp restart
* Stopping NTP server ntpd [ OK ]
* Starting NTP server ntpd [ OK ]
Теперь синхронизируем время.
$ ntpq -p -c as && echo && ntptrace
В репозитариях пакетов дистрибутивов Linux уже все необходимое есть. Хотя при желании можно установить систему из исходных текстов. Дистрибутив Heimdal найдете на FTP сервере Стокгольмского университета последняя версия на момент написания этих строк 1.0.2 от декабря 2007 года, там же можно найти готовые пакеты для некоторых дистрибутивов. Версия от MIT лежит по адресу
Команда “sudo apt-cache search kerberos” в Ubuntu выдаст большой список пакетов в котором можно найти решения от MIT и Hemdail.
Основные настройки их практически идентичны, эти системы также понимают билеты выданные друг другом, хотя есть и проблемы совместимости, но о них говорить не будем. Для примера, выберем версию от MIT.
$ sudo apt-get install krb5-admin-server krb5-kdc krb5-config krb5-user krb5-clients
Основные настройки Kerberos производятся в файле /etc/krb5.conf. Набивать его полностью не надо, можно использовать готовый шаблон:
$ sudo cp /usr/share/kerberos-configs/krb5.conf.template /etc/krb5.conf
Теперь открываем файл и начинаем подгонять под свои условия.
$ sudo mcedit /etc/krb5.conf
[libdefaults]
default_realm = GRINDER.COM
# kdc и admin сервер для GRINDER.COM
[realms]
GRINDER.COM = {
kdc = server.grinder.com
admin_server = server.grinder.com
}
# сообщаем kdc, какие узлы входят в облать GRINDER.COM
# если область и домен совпадает эту секцию можно опустить
[domain_realm]
grinder.com = GRINDER.COM
.grinder.com = GRINDER.COM
# отключаем совместимость с 4 версией Kerberos
[login]
krb4_convert = false
krb4_get_tickets = false
Этот файл используется как сервером, так и приложениями, поэтому его можно практически без изменений распространить на остальные системы входящие в один realms (если их много можно использовать службу DNS). Все настройки KDC производятся в /etc/krb5kdc/kdc.conf. В принципе большую часть параметров можно оставить как есть, заменив только realms:
$ sudo mcedit /etc/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 750,88
[realms]
GRINDER.COM = {
database_name = /var/lib/krb5kdc/principal
admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
acl_file = /etc/krb5kdc/kadm5.acl
key_stash_file = /etc/krb5kdc/stash
kdc_ports = 750,88
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des3-hmac-sha1
supported_enctypes = des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
default_principal_flags = +preauth
}
Перезапускаем KDC и сервер администрирования.
$ sudo /etc/init.d/krb5-kdc restart
$ sudo /etc/init.d/krb5-admin-server restart
Создаем принципиалы и ключи
Для начала следует создать новую базу данных и наполнить ее принципиалами. Здесь возможно несколько вариантов, один из них вызов kadmin с ключом –l. Можно использовать специальные утилиты.
$ sudo kdb5_util create -s
Loading random data
Initializing database ‘/var/lib/krb5kdc/principal’ for realm ‘GRINDER.COM’,
master key name ‘K/M@GRINDER.COM’
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:
Re-enter KDC database master key to verify:
Новая база создана. Утилита попросит ввести пароль, не забудьте его. Создадим принципиал, который потребуется для административных целей:
$ sudo kadmin.local -q «addprinc admin/admin»
Authenticating as principal root/admin@GRINDER.COM with password.
Enter password for principal «admin/admin@GRINDER.COM»:
Re-enter password for principal «admin/admin@GRINDER.COM»:
Principal «admin/admin@GRINDER.COM» created.
Authenticating as principal root/admin@GRINDER.COM with password.
Enter password for principal «admin/admin@GRINDER.COM»:
Re-enter password for principal «admin/admin@GRINDER.COM»:
Principal «admin/admin@GRINDER.COM» created.
Для добавления принципиалов для KDC, admin сервера, своего компьютера , пользователей воспользуемся интерактивным режимом работы:
$ sudo kadmin.local -p admin/admin
Authenticating as principal admin/admin with password.
# зарегистрировались использовав принципиал администратора
# создаем принципиал компьютера, так как компьютер не будет вводить пароль, используем случайный пароль
kadmin.local: addprinc -randkey host/grinder.com
Principal «host/grinder.com@GRINDER.COM» created.
# теперь пользователь
kadmin.local: addprinc grinder
Enter password for principal «grinder@GRINDER.COM»:
Re-enter password for principal «grinder@GRINDER.COM»:
Principal «grinder@GRINDER.COM» created.
# добавим принципиал компьютера в файл keytab в котором хранятся собственные принципиалы
kadmin.local: ktadd host/grinder.com
Entry for principal host/grinder.com with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/grinder.com with kvno 3, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab.
И так далее. Чтобы иметь возможность заходить удаленно на сервер с использованием Kerberos необхдимо создать файл .k5login (с точкой) в который вписать имя принципиал.
$ echo grinder@GRINDER.COM > ~/k5login
В состав обоих вариантов Kerberos входят утилиты, предназначенные для замены стандартных системых утилит вроде /bin/login. Настройки керберизации в разных дистрибутивах будут отличаться. Хотя бы потому что в большинтсве систем используется /sbin/init и достаточно в /etc/inittab заменить /bin/login на керберизированый /usr/bin/login, после чего при регистрации пользователя сначала будет идти обращение к Kerberos, а в случае неудаче к локальной базе /etc/passwd. В Ubuntu с 6.10 вместо /sbin/init используется новая система загрузки upstart, потому здесь немножечко все по-другому.
Для настройки нам понадобятся пакеты krb5-clients, krb5-user и libpam-krb5. Файл /etc/krb5.conf берем с KDC. Затем приступаем к настройкам PAM. В каталоге /etc/pam.d необходимо создать файл common-krb5 такого содержания:
auth sufficient /lib/security/pam_krb5.so use_first_pass
В самом конце файла /etc/pam.d/login есть строки описывающие методы аутентифкации.
# Standard Un*x account and session
@include common-account
@include common-session
@include common-password
Перед этими строчками добавляем еще одну:
@include common-krb5
И если регистрация в системе происходим в графическом менеджере: GDM в Ubuntu, KDM в KUbuntu, в файлах gdm и/или kdm поступаем аналогично. Кстати в репозитарии имеется пакет kredentials, после установки, которого в панели задач появится аплет с помощью которого можно управлять личными билетами. Установить его можно командой.
$ sudo apt-get install kredentials
После чего ярлык для запуска найдете в меню K.
Нам удалось создать систему, которая будет надежно аутентифицировать пользователей. Регистрация пользователей и сервисов управляется с одного места. Пользователь успешно зарегистрировшийся в системе сможет без проблем попасть на любой разрешенный сетевой ресурс. Настройка поддержки Kerberos в различных сервисах это предмет отдельного разговора.
3 Комментариев к Установка Kerberos в Ubuntu
Январь 19th, 2008 | 0:57
хороший материал.
смутил один момент:
server 127.127.1.0
imho, новички могут не понять, что это за адрес такой.
Январь 19th, 2008 | 9:57
Это адрес локального источника времени – local clock
Ноябрь 20th, 2009 | 13:59
Описание настройки MIT Kerberos под FreeBSD
http://prostounix.in.ua/?cat=articles&id=16