Настраиваем Kerberos поверх LDAP::Журнал СА 7.2005
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6458
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7152
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4434
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3096
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3895
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3910
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6400
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3244
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3540
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7381
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10735
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12456
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14123
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9206
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7151
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5458
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4691
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3506
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3218
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3457
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3103
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Настраиваем Kerberos поверх LDAP

Архив номеров / 2005 / Выпуск №7 (32) / Настраиваем Kerberos поверх LDAP

Рубрика: Безопасность /  Механизмы защиты

АЛЕКСЕЙ БАРАБАНОВ

Настраиваем Kerberos поверх LDAP

Сегодня мы рассмотрим настройку открытой версии Kerberos Heimdal для работы с OpenLDAP в качестве хранилища учетных данных. Такое решение позволит вам создать однородную информационную среду для обеспечения процесса аутентификации и авторизации пользователей в Linux.

Системы аутентификации на основе стандартов Kerberos все чаще используются в практических решениях. Безусловно, Kerberos обладает массой привлекательных качеств. Но сама по себе аутентификация – это «паспорт» несуществующей страны, поскольку всегда успешная аутентификация предполагает следующую фазу – авторизацию. Если продолжим паспортную аналогию, то именно на стадии авторизации владелец действительного «паспорта» получает соответствующие права. Авторизационная база, содержащая перечень данных на каждую снабженную «паспортом» персону должна содержать еще и данные, позволяющие установить соответствие персоны и паспорта. Но ведь и база аутентификации, т.е. база фактически проверяемых при сопоставлении «паспорта» и персоны данных, тоже содержит информацию, частично продублированную в «паспорте», как минимум имя персоны. Возвращаясь к информационным технологиям, далее будем называть набор прав к «паспорту» бюджетом, как это принято в практике администрирования, а персону с «паспортом» – принципалом, как это принято в Kerberos.

Итак, если информация о бюджетах хранится в одной базе, а информация о принципалах в другой, то получается, что для нормального функционирования неразрывного механизма аутентификации и авторизации необходимо поддерживать обе базы, обеспечивать их связанность, иметь для каждой собственное средство управления доступом. Кроме этого, архивирование информации системы аутентификации и авторизации тоже в таком случае не может производиться единым образом. Напрашивается очевидное решение – разместить обе базы в одном хранилище. В качестве такого хранилища может выступать LDAP. Для реализации этой идеи надо обеспечить возможность для системных средств получать информацию о бюджетах из базы LDAP, во-первых, и, во-вторых, заставить Kerberos хранить свои записи о принципалах и соответствующих им ключах тоже в LDAP. И то и другое уже достижимо.

Размещение бюджетной информации в LDAP – это отдельная большая тема. Ей посвящено много руководств и даже учебников. Вы можете воспользоваться рекомендациями из заметок [1] на эту тему. Кроме того, использование LDAP зачастую является стандартнным для некоторых платформ. Поэтому предположим, что данный вопрос уже решен. Вся дальнейшая работа будет производится в среде SuSE Linux с уже настроенным хранением бюджетов в OpenLDAP, например, так как это сделано согласно требованиям Samba PDC. Теперь к такой системе добавляем Kerberos. Воспользуемся открытой версией Kerberos, что поставлялась в SuSE до версии 9.3 – Heimdal. С версии 9.3 в SuSE произошел переход на Kerberos от MIT, в опциях настройки которого отсутствует возможность работы с LDAP, поэтому далее эту реализацию Kerberos не будем рассматривать.

Итак, в OpenLDAP уже хранятся аутентификационные данные, соответствующие системным службам в атрибуте userPassword, аутентификационные данные, соответствующие Samba в атрибутах sambaLMPassword и sambaNTPassword. Если в систему добавится Kerberos, то дополнительно каждому бюджету будет сопоставлены данные о принципале Kerberos. Это тот же пароль и права на участие в отношениях внутри определенной области Kerberos (Kerberos realm). Далее рассмотрим настройку Kerberos, работающего с LDAP, по шагам.

Собираем Heimdal

Да-да, собираем. Оказывается, стандартный Heimdal, поставляемый в SuSE, собирается без поддержки LDAP. Для проверки установим дистрибутивные пакеты:

# rpm -qa | grep heimdal

heimdal-devel-0.6-67

heimdal-lib-0.6-67

heimdal-tools-0.6-67

heimdal-0.6-67

И посмотрим, с какими библиотеками скомпонован демон kdc:

# ldd /usr/lib/heimdal/sbin/kdc | grep ldap

Так как ссылок на ldap нет, то придется пересобрать Heimdal заново. Для этого установим исходные тексты:

# rpm -ivh heimdal-0.6-67.src.rpm

Можно даже взять версию поновее с сайта разработчиков [2]. Режим сборки задается в файле rpm-спецификации в строках, где производится конфигурирование пакета перед непосредственным выполнением команды make. Заглянем в оригинальный файл rpm-спецификации:

# cat /usr/src/packages/SPECS/heimdal.spec | sed -n "/^# building with openldap/,+14p"

# building with openldap support does not work right now because

# autobuild cannot handle circular dependencies such as

# libhdb -> libldap -> libsasl -> libgssapi -> libhdb

# with_openldap="--with-openldap=/usr"

#

CFLAGS="$RPM_OPT_FLAGS -DOPENSSL_DES_LIBDES_COMPATIBILITY"

./configure --enable-shared --prefix=/usr/lib/heimdal

        --with-x --mandir=%{_mandir}

        --libdir=%{_libdir}

        --infodir=%{_infodir} --libexecdir=/usr/lib/heimdal/sbin

        --includedir=/usr/include/heimdal

        --with-readline-include=/usr/include/readline

        --with-readline-lib=/usr/lib

        $with_openldap

make

Читаем предупреждение. Не верим. Снимаем комментарий с управляющей переменной и собираем пакеты заново. Протокол сборки завершается сообщениями об успешной записи новых rpm:

# rpmbuild -ba /usr/src/packages/SPECS/heimdal.spec

.....

Wrote: /usr/src/packages/SRPMS/heimdal-0.6-67.src.rpm

Wrote: /usr/src/packages/RPMS/i586/heimdal-0.6-67.i586.rpm

Wrote: /usr/src/packages/RPMS/i586/heimdal-devel-0.6-67.i586.rpm

Wrote: /usr/src/packages/RPMS/i586/heimdal-lib-0.6-67.i586.rpm

Wrote: /usr/src/packages/RPMS/i586/heimdal-tools-0.6-67.i586.rpm

Удивительно, но все собралось вопреки предупреждениям SuSE-гуру. Устанавливаем полученное.

# rpm -Uvh --force /usr/src/packages/RPMS/i586/heimdal-*.rpm

Проверяем, что теперь сборка выполнена с поддержкой LDAP:

# ldd /usr/lib/heimdal/sbin/kdc | grep ldap

libldap.so.2 => /usr/lib/libldap.so.2 (0x4007a000)

Все отлично, ссылка на библиотеку LDAP появилась. Как и следовало ожидать, в информационных технологиях здоровый скепсис всегда кстати.

Настраиваем OpenLDAP

В отличие от NSS и PAM сервер Kerberos не имеет специального файла настройки LDAP-клиента. В отличие от Postfix, Squid, Courier-IMAP он не имеет также опций настройки LDAP-клиента в своих конфигурационных файлах. И это совершенно правильное решение. Дело в том, что если подключения Kerberos к LDAP будет использовать уязвимый способ аутентификации, то грош цена всей остальной системной безопасности, которую несет технология Kerberos. Защита внутри Kerberos, а в предлагаемом способе подключения LDAP становится частью Kerberos, должна гарантироваться физическими, а не информационными условиями. Другими словами, Kerberos может работать только с локальным сервером LDAP и только через локальное подключение, не допускающее перехвата информационного обмена.

Для этого настроим LDAP на прослушивание локального сокета. В SuSE это делается путем изменения специального файла в sysconfig.

# cat /etc/sysconfig/openldap | grep LDAPI

OPENLDAP_START_LDAPI="yes"

А в других дистрибутивах надо просто настроить ключи запуска LDAP.

Вся информация внутри LDAP размещается согласно определенным схемам. Есть такая схема и для размещения информации Kerberos. Эта схема не входит в состав дистрибутивных пакетов. Но ее нетрудно разыскать в Интернете. Авторство этой схемы принадлежит PADL Software Pty Ltd. Можно взять версию, прилагаемую к статье [3], или поискать поновее по ссылке [4]. Эту схему надо положить ко всем остальным схемам и добавить соответствующую ссылку на нее в файл настроек LDAP:

# cat /etc/openldap/slapd.conf | grep krb5

include         /etc/openldap/schema/krb5-kdc.schema

Разрешим полный доступ через локальный сокет, добавив соответствующие строки в настройки ограничений доступа LDAP. Здесь используется специальный подключаемый файл slapd.access.conf , содержащий очень грубую настройку условий доступа. Можно даже сказать так, что эта настройка носит только учебный характер.

# cat /etc/openldap/slapd.access.conf | grep -v "^(#|$)"

access  to dn=".*,dc=office,dc=localnet"

        by sockurl="^ldapi:///$"                write

        by self                                 write

        by *                                    read

Согласно указанным правилам все пользователи могут читать всю базу LDAP, а вот править могут только лишь собственные контейнеры. Строка «by sockurl=”^ldapi:///$”» выбирает из всех запросов те, что поступают в LDAP через локальный сокет, и дает таким клиентским подключениям права на запись, то есть самые высокие по шкале эскалации прав LDAP. Как уже стало понятно, базовый контейнер LDAP имеет имя dc=office,dc=localnet.

Заметим, что хотя все атрибуты, использованные для хранения ключей принципалов, шифруются по мастер-ключу конкретного KDC (Kerberos Key Distribution Ceter или в русской аналогии ЦРК – центр распределения ключей), для предотвращения доступа к таким записям со стороны иных служб рекомендуется настроить соответствующим образом правила доступа к LDAP базе. Да и права, собственно, Kerberos тоже можно ограничить определенным уровнем дерева LDAP.

Но разрешить все со стороны локального сокета не достаточно. Поскольку Kerberos никак себя не аутентифицирует при подключении к LDAP, то в сеансе связи он будет считаться анонимным пользователем. В версиях OpenLDAP с индексом более 2 модификация базы через такое подключение приводит к ошибке.

Например, попытка инициализации области Kerberos завершается сообщением:

kadmin: kadm5_create_principal: ldap_add_s:

Strong(er) authentication required

Добавим специальную опцию «allow update_anon» в управляющий файл LDAP перед директивами, описывающими базу данных. Эта опция допускает изменение базы LDAP анонимным клиентом, если последнее разрешено операторами access.

Теперь можно запустить LDAP.

# rcldap start

Starting ldap-server                                                  done

server:~ # netstat -apn | grep slapd

tcp      0   0 127.0.0.1:389   0.0.0.0:*      LISTEN      11036/slapd

unix  2  [ ACC ] STREAM   LISTENING 82235 11036/slapd     /var/run/slapd/ldapi

unix  2  [ ]     DGRAM                          182233 11036/slapd

Видно, что процесс slapd слушает не только локальный адрес, но и сокет /var/run/slapd/ldapi. Здесь есть еще один «подводный камень», который, возможно, будет иметь значение для владельцев дистрибутивов, отличных от SuSE. Дело в том, что традиционно LDAP запускается от соответствующего пользователя.

# ps -eo user,args | grep slapd | grep -v grep | head -n 1

ldap /usr/lib/openldap/slapd -h ldapi:///

ldap://127.0.0.1:389/ -u ldap -g ldap

И несмотря на это, сокет для связи создается от пользователя root и с правами, ограничивающими доступ к нему от иных пользователей и групп, но с установленным битом «set user ID». Вроде все верно, только расположен он внутри директории, доступной лишь для ldap.ldap.

# ls -als /var/run/slapd

total 24

   4 drwx------    4 ldap     ldap         4096 Jun 12 13:04 .

   4 drwxr-xr-x   20 root     root         4096 Jun 12 23:02 ..

   0 srwx------    1 root     root            0 Jun 12 13:04 ldapi

   4 drwx------    2 ldap     ldap         4096 Sep 24  2003 openldap-data

   4 drwx------    2 ldap     ldap         4096 Sep 24  2003 openldap-slurp

   4 -rw-r--r--    1 ldap     ldap           76 Jun 12 13:04 slapd.args

   4 -rw-r--r--    1 ldap     ldap            5 Jun 12 13:04 slapd.pid

Процесс kdc в SuSE запускается от пользователя root, и поэтому нет никаких проблем с подключением к сокету для связи с LDAP. Если в некоторой системе приняты иные соглашения, то недоступность локального сокета, созданного LDAP, со стороны процесса kdc может быть причиной отказа Kerberos. Для исправления этого надо просто поменять права доступа у сокета после запуска slapd.

Подключенный через локальный сокет Kerberos имеет исключительно доверительные права на доступ к базе LDAP. Но это нужно только для режима наполнения базы данными. Для регулярной работы Kerberos, аутентификации и выдачи билетов достаточно иметь доступ на чтение. То есть всегда остается возможность «заморозить» состояние базы Kerberos. Хотя верно это лишь для применяемой версии Heimdal, которая не обновляет индексы в базе при выдаче билетов, и, естественно, в таком случае станет невозможным изменение паролей принципалов.

Настраиваем Kerberos

Создадим файл управления службой Kerberos. Рабочей областью Kerberos (в оригинале realm) назначим OFFICE.LOCALNET и ограничим перечень прослушиваемых адресов внутрисетевыми. Должно получиться так:

# cat /etc/krb5.conf

[kdc]

        database = {

                dbname = ldap:ou=KerberosPrincipals,dc=office,dc=localnet

                log_file = /var/heimdal/log

                acl_file = /var/heimdal/kadmind.acl

        }

        addresses = 127.0.0.1 192.168.0.1

[libdefaults]

        default_realm = OFFICE.LOCALNET

        clockskew = 300

        dns_lookup_kdc = 1

[realms]

        OFFICE.LOCALNET = {

                kdc = kerberos.office.localnet

                admin_server = kerberos.office.localnet

                kpasswd_server = kerberos.office.localnet

        }

[domain_realm]

        .office.localnet = OFFICE.LOCALNET

[logging]

        default = SYSLOG:NOTICE:DAEMON

        kdc = FILE:/var/log/kdc.log

        kadmind = FILE:/var/log/kadmind.log

[appdefaults]

        pam = {

                ticket_lifetime = 1d

                renew_lifetime = 1d

                forwardable = true

                proxiable = false

        }

Проверим настройки специальной программой.

# verify_krb5_conf

verify_krb5_conf: /kdc/database/log_file: unknown entry

verify_krb5_conf: /kdc/database/acl_file: unknown entry

Сообщения игнорируем, так как они ошибочные. Можно или собрать более свежую версию verify_krb5_conf, или сразу писать авторам сообщение об ошибке.

Прокомментирую секцию kdc и оператор database. Внутри указывается контейнер LDAP, в котором будут размещаться записи, используемые Kerberos. Дополнительно определим файл протокола и файл с установками ограничений доступа к самой базе со стороны принципалов. Эти строки надо указывать обязательно. Но Kerberos работает со своей базой на очень примитивном уровне и поэтому не имеет возможности анализировать специфические ошибки LDAP. Иначе говоря, он не может распознать отсутствие подготовленного контейнера в LDAP и создать его самостоятельно. Значит, нужно предварительно создать контейнер для Kerberos ou=KerberosPrin-cipals,dc=office,dc=localnet. Для этого подготовим данные в специальном файле kerberos.ldif.

# cat kerberos.ldif

dn: ou=KerberosPrincipals,dc=office,dc=localnet

ou: KerberosPrincipals

objectClass: top

objectClass: organizationalUnit

objectClass: domainRelatedObject

associatedDomain: office.localnet

Здесь отмечу одну забавную особенность. На сайте [4] в описании аналогичной настройки записан контейнер с ou= KerberosPrincpals, который отличается отсутствием буквы «i» в слове «Principals». Это именно описка, поскольку там же в примере с ldapsearch приведен грамматически правильный вариант. Но тем не менее многими такая форма была воспринята как стандарт и бездумно повторена. Этот случай свидетельствует о высоком уровне априорного доверия всякому экспертному мнению в области компьютерной безопасности.

Создадим контейнер для Heimdal.

# ldapadd -v -H ldap://localhost -D "cn=ldapadmin,dc=office,dc=localnet" -x -w secret -f kerberos.ldif

ldap_initialize( ldap://localhost )

add ou:

        KerberosPrincipals

add objectClass:

        top

        organizationalUnit

        domainRelatedObject

add associatedDomain:

        office.localnet

adding new entry "ou=KerberosPrincipals,dc=office,dc=localnet"

modify complete

Теперь все готово для настройки Kerberos.

Оффлайновое администрирование

В первую очередь подготовим мастер-ключ.

# kstash

Master key:

Verifying - Master key:

kstash: writing key to `/var/heimdal/m-key"

Проверим, что появился соответствующий файл.

# ls -als /var/heimdal

   4 -rw-------    1 root     root           72 Jun 11 00:04 m-key

В дальнейшем пароль, использованный для генерации мастер-ключа, можно забыть. Самое главное, не терять файл с мастер-ключом, так как без него KDC не сможет работать с собственной базой. Считается, что копию файла с мастер-ключом надо хранить отдельно от архива базы Kerberos.

Подключимся к Kerberos в оффлайне (ключ -l) и настроим область Kerberos.

# kadmin -l

kadmin> init OFFICE.LOCALNET

Realm max ticket life [unlimited]:

Realm max renewable ticket life [unlimited]:

kadmin> exit

Проверим, используя опять же оффлайновое подключение, что вышло.

# kadmin -l

kadmin> list *

  krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET

  kadmin/changepw@OFFICE.LOCALNET

  kadmin/admin@OFFICE.LOCALNET

  changepw/kerberos@OFFICE.LOCALNET

  kadmin/hprop@OFFICE.LOCALNET

  default@OFFICE.LOCALNET

kadmin> exit

Интерпретируем результат. Итак, выше приведен перечень служебных принципалов, созданных автоматически. Структура именования принципалов следующая: primary_name/instance@REALM. Но в данном случае часть instance имеет значение «роль». Для администрирования зарегистрируем принципала sysadmin/admin.

# kadmin -l

kadmin> add sysadmin/admin

Max ticket life [1 day]:

Max renewable life [1 week]:

Principal expiration time [never]:

Password expiration time [never]:

Attributes []:

sysadmin/admin@OFFICE.LOCALNET"s Password:

Verifying - sysadmin/admin@OFFICE.LOCALNET"s Password:

kadmin> exit

Вот пароль этого принципала надо запомнить обязательно. Хотя в случае утери его можно восстановить через оффлайновое подключение. Создание sysadmin/admin в файле-реплике LDAP отображается следующим образом:

time: 1118439261

dn: cn=sysadmin/admin@office.localnet,ou=KerberosPrincipals,dc=office,dc=localnet

changetype: add

objectClass: top

objectClass: person

objectClass: krb5Principal

objectClass: krb5KDCEntry

krb5PrincipalName: sysadmin/admin@OFFICE.LOCALNET

krb5KeyVersionNumber: 1

krb5MaxLife: 86400

krb5MaxRenew: 604800

krb5KDCFlags: 126

krb5Key:: MCWhIzAhoAMCARChGgQYCCzqjwcCvAduYvIOzSVKuq33j9qeBJe5

krb5Key:: MBWhEzARoAMCAQOhCgQIUl6ATDGML2g=

krb5Key:: MBWhEzARoAMCAQKhCgQIUl6ATDGML2g=

krb5Key:: MBWhEzARoAMCAQGhCgQIUl6ATDGML2g=

cn: sysadmin/admin@office.localnet

sn: sysadmin/admin@office.localnet

structuralObjectClass: person

entryUUID: 271bfa42-6e43-1029-90f0-b1a0d84cadb1

creatorsName: cn=anonymous

createTimestamp: 20050610213421Z

entryCSN: 2005061021:34:21Z#0x0001#0#0000

modifiersName: cn=anonymous

modifyTimestamp: 20050610213421Z

Здесь видно, что создатель записей в контейнерах Kerberos anonymous.

Настраиваем DNS

Перейдем к настройкам удаленного доступа к сервисам Kerberos. Сначала настроим DNS. Здесь предполагается, что KDC запускается в локальной сети 192.168.0.0/24 на хосте 192.168.0.1. Добавим в описание зоны office.localnet следующие строки:

$ORIGIN .office.localnet.

$TTL 86400   ; 1 day

_kerberos        TXT    "OFFICE.LOCALNET."

kdc               A     192.168.0.1

kerberos          A     192.168.0.1

$ORIGIN _tcp.office.localnet.

$TTL 600     ; 10 minutes

_kerberos        SRV    0 100 88 kerberos.office.localnet.

_kerberos-adm    SRV    0 100 749 kerberos.office.localnet.

_kpasswd         SRV    0 100 464 kerberos.office.localnet.

$ORIGIN _udp.office.localnet.

$TTL 600     ; 10 minutes

_kerberos        SRV    0 100 88 kerberos.office.localnet.

_kpasswd         SRV    0 100 464 kerberos.office.localnet.

Перезапустим сервер DNS и проверим, что разрешение имен работает нужным образом.

# dig _kerberos._tcp.office.localnet any +short

0 100 88 kerberos.office.localnet.

Запускаем Kerberos

Настало время запустить службы Kerberos.

# rckdc start

Starting kdc                                             done

Посмотрим, что вышло.

# netstat -apn | grep "(kdc|kadmin|kpasswd)"

tcp     0   0 192.168.0.1:88    0.0.0.0:*   LISTEN   10984/kdc

tcp     0   0 127.0.0.1:88      0.0.0.0:*   LISTEN   10984/kdc

tcp     0   0 :::749            :::*        LISTEN   10986/kadmind

udp     0   0 XX.XXX.XX.XX:464  0.0.0.0:*            10988/kpasswdd

udp     0   0 192.168.0.1:464   0.0.0.0:*            10988/kpasswdd

udp     0   0 YYY.YY.Y.YY:464   0.0.0.0:*            10988/kpasswdd

udp     0   0 10.0.0.1:464      0.0.0.0:*            10988/kpasswdd

udp     0   0 127.0.0.1:464     0.0.0.0:*            10988/kpasswdd

udp     0   0 192.168.0.1:88    0.0.0.0:*            10984/kdc

udp     0   0 127.0.0.1:88      0.0.0.0:*            10984/kdc

udp     0   0 ::1:464           :::*                 10988/kpasswdd

unix  2    [ ]      DGRAM              359313 10988/kpasswdd

Примечательно, что kdc, т.е. сервис аутентификации и выдачи билетов, запустился на внутренних адресах и порту 88, как и планировалось. Сервис удаленного администрирования kadmind прослушивает все возможные адреса по порту 749, а вот kpasswdd, т.е. сервис изменения паролей, слушает на всех активных в данный момент адресах по порту 464, не исключая и двух внешних подключений к ISP. Другими словами, без firewall не обойтись, иначе если не атаки, то сканирований не избежать. Но все вышесказанное относится только к принятой в SuSE схеме запуска. Ничего не мешает запустить kadmind и kpasswdd через суперсервер xinetd, и уже средствами последнего ограничить доступ. Схема запуска через суперсервер, кроме прочего, еще и позволит сэкономить ресурсы.

Работаем в сети

Теперь проверим, как будет работать не оффлайновое, а сетевое администрирование Kerberos.

# kadmin -p sysadmin/admin

kadmin> list *

sysadmin/admin@OFFICE.LOCALNET"s Password:

kadmin: get *: Operation requires `get" privilege

kadmin> exit

Это значит, в базе Kerberos не настроены права доступа. Ранее все подключения делались напрямую к базе данных, и права доступа не учитывались. Настроим их.

# cat >/var/heimdal/kadmind.acl <

> sysadmin/admin  all

> *               cpw

> EOT

Это значит, sysadmin/admin может делать все, а остальные только менять пароли. И теперь повторим попытку подключения.

# kadmin -p sysadmin/admin

kadmin> list *

sysadmin/admin@OFFICE.LOCALNET"s Password:

  krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET

  kadmin/changepw@OFFICE.LOCALNET

  kadmin/admin@OFFICE.LOCALNET

  changepw/kerberos@OFFICE.LOCALNET

  kadmin/hprop@OFFICE.LOCALNET

  default@OFFICE.LOCALNET

  sysadmin/admin@OFFICE.LOCALNET

kadmin> exit

Как показала эта проверка, kdc перечитывает правила доступа к базе при каждом обращении, то есть нет необходимости перезагружать демон.

И теперь проделаем все то же самое, но с удаленного компьютера, предварительно переложив туда файл настроек krb5.conf, который одновременно является и файлом настроек клиента Kerberos.

Получим билет для принципала sysadmin/admin на рабочей станции:

alekseybb@wsalekseybb:~> kinit sysadmin/admin

sysadmin/admin@OFFICE.LOCALNET"s Password:

kinit: NOTICE: ticket renewable lifetime is 1 week

alekseybb@wsalekseybb:~> klist

Credentials cache: FILE:/tmp/krb5cc_500

        Principal: sysadmin/admin@OFFICE.LOCALNET

 

  Issued           Expires          Principal

Jun 11 02:14:33  Jun 11 12:15:57  krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET

Здесь видно, что в кеше Kerberos для локального клиента alekseybb лежит билет от krbtgt/OFFICE.LOCALNET, выписанный на принципала – администратора sysadmin/admin@OFFICE.localnet. Такой билет называется супербилет (в оригинале – Ticket Granting Ticket), поскольку он дает право на получение билетов на доступ ко всем другим принципалам, расположенным в той же области Kerberos. В нашем случае это список, полученный по команде «list *». Проверим доступ к базе на правах администратора.

alekseybb@wsalekseybb:~> /usr/sbin/kadmin

kadmin> list *

  krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET

  kadmin/changepw@OFFICE.LOCALNET

  kadmin/admin@OFFICE.LOCALNET

  changepw/kerberos@OFFICE.LOCALNET

  kadmin/hprop@OFFICE.LOCALNET

  default@OFFICE.LOCALNET

  sysadmin/admin@OFFICE.LOCALNET

kadmin> exit

Теперь снова заглянем в кеш билетов.

alekseybb@wsalekseybb:~> klist

Credentials cache: FILE:/tmp/krb5cc_500

        Principal: sysadmin/admin@OFFICE.LOCALNET

 

  Issued           Expires          Principal

Jun 11 02:14:33  Jun 11 12:15:57  krbtgt/OFFICE.LOCALNET@OFFICE.LOCALNET

Jun 11 02:14:47  Jun 11 03:14:47  kadmin/admin@OFFICE.LOCALNET

Кроме супербилета, там появился второй билет, полученный на основании универсального и предназначенный для доступа к принципалу kadmin/admin@ OFFICE.LOCALNET. Оба билета выданы на «имя» sysadmin/admin.

Значит, работает. Удостоверимся в том, что Heimdal не модифицирует в процессе аутентификации записи в базе. Для этого есть много способов, но достаточно более внимательно просмотреть записи в самой базе.

alekseybb@wsalekseybb:~> /usr/sbin/kadmin

kadmin> list -l kadmin/admin

               Principal: kadmin/admin@OFFICE.LOCALNET

       Principal expires: never

        Password expires: never

    Last password change: never

         Max ticket life: 1 hour

      Max renewable life: 1 hour

                    Kvno: 1

                   Mkvno: 0

                  Policy: none

   Last successful login: never

       Last failed login: never

      Failed login count: 0

           Last modified: 2005-06-10 20:04:12 UTC

              Attributes: requires-pre-auth

Keytypes(salttype[(salt-value)]): des-cbc-crc(pw-salt),

des-cbc-md4(pw-salt), des-cbc-md5(pw-salt), des3-cbc-sha1(pw-salt)

 

kadmin> exit

Видно, что поля с указанием времени последней аутентификации и прочие не установлены. Точно также можно убедиться в отсутствии модификаций по файлу-реплике LDAP, в который должны заноситься все такие операции.

Взвесим «за» и «против»

Итак, давайте взвесим, какие преимущества достигаются комбинацией Kerberos и LDAP. Быть может, не стоило все это и городить.

Перечислим положительные приобретения:

  • Вся аутентификационная и бюджетная информация хранится в одной базе и, значит, может быть архивирована единым образом.
  • Появляется возможность «заморозки» изменений в базе Kerberos, что позволяет сделать его работу более надежной.
  • Появляется второй канал репликации базы Kerberos за счет реплики LDAP. То есть возрастает доступность (availability) службы KDC.

Теперь подсчитаем отрицательные:

  • У KDC появляется зависимость от дополнительной службы, надежность предоставления сервиса которой надо гарантировать теперь вдвойне.
  • Хотя использование мастер-ключа не позволяет вскрыть или подменить ключи принципалов, но гарантия того, что они не будут простого уничтожены, теперь лежит на другом сервисе и его настройках. Значит, в подобной схеме хранения надежность определяется по наислабейшему компоненту. Скорее всего, таким нужно считать LDAP.

Во всех руководствах по созданию KDC записано требование размещать KDC на отдельном хосте, который более ничем не может быть занят. Ну разве что SSH для администрирования. Но здесь же основанием для сочетания Kerberos и LDAP главными были мотивы интегрального характера. С другой стороны, есть успешный пример такой интеграции – разработка фирмы Microsoft под названием ActiveDirectory. Конечно, вопросы безопасности нужно прорабатывать очень тщательно и применительно к конкретному составу приложений, которые будет обслуживать LDAP. Поскольку если в общей директории хранится еще и информация Kerberos, то надо будет оградить ее от потенциально небезопасных приложений.

Ну и последнее соображение. Как следует из материалов работы [5], использование LDAP в качестве хранилища увеличило среднее время обработки запроса с 8 мс до 2.4 с, то есть почти в 300 раз. Конечно, измерения проводились на области, содержащей 1000 принципалов, и на не очень сильном компьютере. Но даже с поправкой на закон Мура надо учитывать фактор снижения производительности при переводе системы на подобную конфигурацию.

Ссылки:

  1. Заметки по настройке размещения пользовательских бюджетов в LDAP: http://www.barabanov.ru/arts/LDAPremarks-2.pdf.
  2. Домашний сайт проекта Heimdal: http://www.pdc.kth.se/heimdal.
  3. Схема для размещения информации Kerberos в LDAP: http://www.barabanov.ru/arts/kerberos_over_ldap/krb5-kdc.schema.
  4. Лидер в области разработок АиА с использованием LDAP: http://www.padl.com.
  5. Different database methods in Heimdal. Assar Westerlund, Swedish Institute of Computer Science: http://www.chips.chalmers.se/Chips/conference/made2000/presentations/danielsson.et.al.pdf.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru