Установка Kerberos в Linux Mint
Для администраторов небольших сетей проблем в организации доступа пользователей к немногочисленным сетевым ресурсам, в общем, то и нет. Но как только сеть начинает расти, требуется уже синхронизировать учетные записи пользователей на всех сервисах и управлении доступом к различным сервисам. Здесь уже требуется централизованный подход, к решению этой проблемы. Сейчас разберем, как установить и настроить сетевую систему аутентификации пользователей Kerberos на примере Linux Ubuntu.
История Kerberos
В 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 распространяется уже безо всяких ограничений.
Принцип работы Kerberos
Кратко опишу принцип работы системы, чтобы было понятно, чем мы будем заниматься. Протокол описан в RFC 1510 (tools.ietf.org/html/rfc1510) и RFC 4120 (tools.ietf.org/html/rfc4120). В настоящее время клиентские компоненты для работы с 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 управляющий политиками. Все конечно не так просто, и на порядок или два сложнее, но этого достаточно для понимания, того чего мы будем настраивать дальше.
Устанавливаем NTP
Прежде чем установить 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
Устанавливаем Kerberos
В репозитариях пакетов дистрибутивов Linux уже все необходимое есть. Хотя при желании можно установить систему из исходных текстов. Дистрибутив Heimdal найдете на FTP сервере Стокгольмского университета ftp://ftp.pdc.kth.se/pub/heimdal/src, последняя версия на момент написания этих строк 1.0.2 от декабря 2007 года, там же можно найти готовые пакеты для некоторых дистрибутивов. Версия от MIT лежит по адресу http://web.mit.edu/kerberos/.
Команда “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 в различных сервисах это предмет отдельного разговора.
Комментарии
Отправить комментарий
Написать комментарий