Установка Kerberos в Linux Mint

Установка Kerberos

Для администраторов небольших сетей проблем в организации доступа пользователей к немногочисленным сетевым ресурсам, в общем, то и нет. Но как только сеть начинает расти, требуется уже синхронизировать учетные записи пользователей на всех сервисах и управлении доступом к различным сервисам. Здесь уже требуется централизованный подход, к решению этой проблемы. Сейчас разберем, как установить и настроить сетевую систему аутентификации пользователей 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 в различных сервисах это предмет отдельного разговора.

источник :
www.tux.in.ua





Комментарии

Популярные сообщения из этого блога

Марк Шаттлворт

Linux Mint Росинка

Измерения в байтах