Глава 6. Сетевая аутентификация при помощи Kerberos

Содержание

6.1. Терминология Kerberos
6.2. Как работает Kerberos
6.3. Пользовательский взгляд на Kerberos
6.4. Инсталляция и администрирование Kerberos
6.5. Дополнительная информация

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

Kerberos поможет Вам соблюсти эти условия предлагая аутентификацию с устойчивым шифрованием. Здесь мы обсудим только основные принципы Kerberos. За подробной технической инструкцией обратитесь к документации Kerberos.

6.1. Терминология Kerberos

Следующий глоссарий содержит основные определения Kerberos.

верительные данные

Пользователи или клиенты должны представить какие-либо верительные данные, разрешающие им запрашивать службы. Kerberos известно два вида верительных данных: билеты и аутентификаторы.

билет

Билет - это верительные данные, используемые клиентом для аутентификации на сервере, у которого клиент запрашивает службу. Он содержит имя сервера, имя клиента, адрес клиента в интернете, дату, время жизни и произвольный ключ сессии. Все эти данные зашифрованы с использованием ключа сервера.

аутентификатор

Объединяясь с билетом, аутентификатор используется для доказательства того, что клиент предоставивший билет действительно тот, за кого он себя выдает. аутентификатор создается с использованием имени клиента, IP-адреса рабочей станции и текущего времени рабочей станции. Все это зашифровано ключом сессии, известным только клиенту и соответствующему серверу. В отличие от билета, аутентификатор может быть использован только один раз. Клиент может создавать аутентификаторы самостоятельно.

принципал

Kerberos принципал это уникальная сущность (пользователь или служба), которой можно ассигновать билет. Принципал состоит из следующих компонентов:

  • Основа (primary) — первая часть принципала, которая может совпадать с именем пользователя, в случае использования пользователя в качестве принципала.

  • Экземпляр (instance) — некая необязательная информация, характеризующая основу. Эта строка отделена от исходной символом /.

  • Область (realm) — определяет вашу область Kerberos. Обычно область соответствует доменному имени, написанному в верхнем регистре.

взаимная аутентификация

Kerberos проверяет подлинность как пользователя, так и клиента. Они разделяют между собой ключ сессии, который используется для безопасного взаимодействия.

ключ сессии

Ключи сессии — это временные защищенные ключи, созданные Kerberos. Они известны клиенту и используются для шифрования данных, передаваемых между клиентом и сервером, для которого он запросил и получил билет.

повторное воспроизведение

Почти все сообщения, посылаемые по сети, могут быть подслушаны, украдены и отосланы повторно.В контексте Kerberos будет очень опасно, если атакующему удастся получить Ваш запрос на обслуживание содержащий Ваш билет и аутентификатор. Атакующий может попытаться послать их повторно (replay), чтобы представиться Вами. Однако, в Kerberos реализовано несколько механизмов чтобы решить эту проблему.

сервер и служба

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

6.2. Как работает Kerberos

Kerberos часто называют сторонней доверенной службой аутентификации, это означает, что все клиенты доверяют Kerberos решение о подлинности друг друга. Kerberos хранит базу данных всех своих пользователей и их защищенных ключей.

Чтобы убедиться в правильной работе Kerberos, запустите сервер аутентификации и предоставляющий билеты сервер на выделенной машине. Убедитесь, что только администратор имеет физический и сетевой доступ к этой машине. Снизьте количество запущенных на нем (сетевых) служб до абсолютного минимума — не запускайте даже sshd.

6.2.1. Первый контакт

Ваш первый контакт с Kerberos напоминает стандартную процедуру сетевого логина. Введите Ваше имя пользователя. Эта часть информации и имя службы, выдающей билеты, посылаются серверу аутентификации (Kerberos). Если сервер аутентификации знает Вас, он генерирует случайный ключ сессии для дальнейшего использования между Вашим клиентом и предоставляющим билеты сервером. Далее сервер аутентификации готовит билет для сервера, предоставляющего билеты. Билет содержит следующую информацию (все зашифровано ключем сессии, который знают только сервер аутентификации и сервер, предоставляющий билеты):

  • Имена обоих, клиента и сервера, предоставляющего билеты

  • Текущее время

  • Время жизни, назначенное этому билету

  • IP-адрес клиента

  • Вновь созданный ключ сессии

Этот билет посылается клиенту вместе с ключем сессии, опять-таки в зашифрованном виде, но на этот раз защищенным ключом клиента. Защищенный ключ известен только Kerberos и клиенту, потому что он создается на основе пароля пользователя. после получения этого ответа клиентом, у Вас запрашивается пароль. Этот пароль преобразуется в ключ, которым можно расшифровать пакет, отправленный сервером аутентификации. Пакет «разворачивается» и пароль с ключом стираются из памяти рабочей станции. Пока время жизни билета, используемого для получения других билетов не истечет, Ваша рабочая станция может подтверждать свою подлинность.

6.2.2. Запрос службы

Для запроса службы у любого сервера сети, клиентское приложение должно подтвердить подлинность перед сервером. Поэтому приложение генерирует аутентификатор. Аутентификатор состоит из следующих компонентов:

  • Принципал клиента

  • IP-адрес клиента

  • Текущее время

  • Контрольная сумма (выбранная клиентом)

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

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

6.2.3. Взаимная аутентификация

Аутентификация Kerberos может быть использована в обоих направлениях. Она касается не только удостоверения своей подлинности клиентом. Сервер тоже должен аутентифицировать себя перед клиентом, запрашивая его службу. Таким образом, он тоже посылает аутентификатор. Он добавляет единицу к контрольной сумме клиентского аутентификатора и шифрует результат разделяемым им с клиентом ключем сессии. Клиент принимает этот ответ, как доказательство подлинности сервера и они начинают взаимодействие.

6.2.4. Получение билетов — соединение с серверами

Билеты создаются для использования с конкретным сервером. Это означает, что при запросе к новой службе Вам нужен новый билет. Kerberos реализует механизм получения билетов для отдельных серверов. Эта служба называется «службой получения билетов ». Служба получения билетов использует протоколы доступа описанные ранее. Каждый раз, когда приложению нужен новый билет, оно соединяется с сервером получения билетов. Этот запрос состоит из следующих компонентов:

  • Запрашиваемый принципал

  • Билет на получение билета

  • Аутентификатор

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

  • Принципал клиента

  • Принципал сервера

  • Текущее время

  • IP-адрес клиента

  • Вновь созданный ключ сессии

Новый билет имеет время жизни, равное оставшемуся времени жизни билета на получение билета или времени жизни по умолчанию для этой службы. Из двух этих значений выбирается наименьшее. Клиент получает от службы получения билетов этот билет и ключ сессии, зашифрованные тем, же ключом, которым был зашифрован билет на получение билета. Клиент может расшифровать ответ без использования пароля пользователя, при запросе новой службы. Таким образом, Kerberos может получать билет за билетом, не беспокоя пользователя.

6.2.5. Совместимость с Windows 2000

Windows 2000 содержит реализацию Kerberos 5 от Microsoft. openSUSE® использует MIT реализацию Kerberos 5, полезная информация и руководство можно найти в документации MIT Раздел 6.5, «Дополнительная информация».

6.3. Пользовательский взгляд на Kerberos

В идеальном случае, единственный контакт пользователя с Kerberos происходит во время входа в систему. Процесс входа систему включает содание билета на получение билета. При выходе все пользовательские билеты Kerberos уничтожаются автоматически, что затрудняет кому-либо возможность представиться этим пользователем. Автоматическое истечение билетов может привести к несколько неловкой ситуации, когда пользовательская сессия длится дольше, чем максимальная продолжительность жизни билета на выдачу билета (разумное ее значение равно 10 часам). Однако пользователь может получить новый билет на получение билета, запустив kinit. Введите пароль снова и Kerberos получит доступ к требуемым службам без дополнительной аутентификации. Для получения списка всех билетов, полученных для Вас Kerberos, запустите klist.

краткий список всех приложений, использующих аутентификацию Kerberos Эти приложения можно найти в директории /usr/lib/mit/bin и /usr/lib/mit/sbin после установки пакета krb5-apps-clients. Все они имеют полную функциональность своих UNIX и Linux братьев, плюс дополнительный бонус прозрачной авторизации, управляемой Kerberos:

  • telnet, telnetd

  • rlogin

  • rsh, rcp, rshd

  • ftp, ftpd

  • ksu

Вам больше не нужно вводить свой пароль для использования этих приложений, поскольку Kerberos уже подтвердил Вашу подлинность. ssh, собранный с поддержкой Kerberos, может даже перенаправлять все полученные для одной рабочей станции билеты на другую. Если Вы используете ssh для входа на другую рабочую станцию, ssh проверяет, чтобы зашифрованное содержание билетов исправлялось в соответствии с ситуацией. Простого копирования билетов между рабочими станциями недостаточно, поскольку билеты содержат информацию, относящуюся к рабочей станции (IP-адрес). XDM, GDM и KDM также предлагают поддержку Kerberos. Дальнейшую информацию о сетевых приложениях Kerberos можно найти в Руководстве пользователя по Kerberos V5 UNIX, доступному по адресу http://web.mit.edu/kerberos.

6.4. Инсталляция и администрирование Kerberos

Окружение Kerberos состоит из нескольких различных компонентов. Центр распространения ключей (KDC - key distribution center) содержит центральную базу данных со всеми данными Kerberos. Все клиенты полагаются на KDC в надлежащей сетевой аутентификации. Как KDC, так и клиенты нуждаются в настройке для соответствии Вашей конфигурации:

Общая подготовка

Проверьте свою конфигурацию сети и убедитесь, что она соответствует минимальным требованиям, описанным в Раздел 6.4.1, «Сетевая топология Kerberos». Выберите подходящую область для Вашей конфигурации Kerberos, см. Раздел 6.4.2, «Выбор областей Kerberos». Тщательно настройте компьютер, предназначенный для KDC, с применением максимальных мер безопасности, Раздел 6.4.3, «Настройка KDC». Настройте надежный источник времени в сети, чтобы удостовериться, что все билеты содержат валидные временные метки, см. Раздел 6.4.4, «Настройка синхронизации времени».

Основная конфигурация

Настройте KDC и клиентов согласно Раздел 6.4.5, «Настройка KDC» и Раздел 6.4.6, «Конфигурация клиентов Kerberos». Разрешите удаленное администрирование для Вашей службы Kerberos, чтобы Вам не нужен был физический доступ к компьютеру с KDC, см. Раздел 6.4.7, «Настройка удаленного администрирования Kerberos». Создайте принципалов служб для каждой службы в Вашей области, см. Раздел 6.4.8, «Creating Kerberos Service Principals».

Включение аутентификации Kerberos

Различные службы в Вашей сети могут использовать Kerberos. Чтобы добавить проверку пароля Kerberos приложениям, использующим PAM, выполните действия, описанные в Раздел 6.4.9, «Включение поддержки PAM в Kerberos». Чтобы настроить SSH или LDAP на аутентификацию через Kerberos, следуйте Раздел 6.4.10, «Настройка SSH для аутентификации с помощью Kerberos» и Раздел 6.4.11, «Использование LDAP и Kerberos».

6.4.1. Сетевая топология Kerberos

Любое окружение с Kerberos для полноценной работы должно отвечать следующим требованиям:

  • Настройте DNS сервер для разрешения имен внутри Вашей сети, чтобы клиенты и серверы могли найти друг друга. Обратитесь к Глава 11, The Domain Name System (↑Содержание) за информацией по настройке DNS.

  • Настройте сервер времени в Вашей сети. Использование точных временных меток существенно для работы Kerberos, поскольку валидные билеты Kerberos должны содержать корректные временные метки. Обратитесь к Глава 13, Time Synchronization with NTP (↑Содержание) за информацией по настройке NTP.

  • Настройте центр распространения ключей (KDC) как центральную часть архитектуры Kerberos. Он содержит базу данных Kerberos. Используйте максимально высокую политику безопасности на этой машине для предотвращения любых атак, которые могут подвергнуть риску всю Вашу сетевую инфраструктуру.

  • Настройте клиентские машины на использование аутентификации Kerberos.

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

Рисунок 6.1. Сетевая топология Kerberos

Сетевая топология Kerberos

[Tip]Настройка маршрутизации подсети

Для конфигурации подобной Рисунок 6.1, «Сетевая топология Kerberos», настройте маршрутизацию между двумя подсетями (192.168.1.0/24 и 192.168.2.0/24). Обратитесь к Раздел “Configuring Routing” (Глава 9, Basic Networking, ↑Содержание) за дальнейшей информацией о настройке маршрутизации с помощью YaST.

6.4.2. Выбор областей Kerberos

Домен, в котором работает инсталляция Kerberos называется областью и идентифицируется именем, таким как EXAMPLE.COM или просто ACCOUNTING. Kerberos чувствителен к регистру, поэтому example.com является областью, отличной от EXAMPLE.COM. Используйте регистр, который Вам нравится. Однако, общепринятая практика — использовать верхний регистр для имен областей.

Хорошая идея использовать Ваше имя домена из DNS (или поддомена, такого как ACCOUNTING.EXAMPLE.COM). Как показано ниже, Вы можете облечить себе жизнь как администратору, если настроите клиенты Kerberos на поиск KDC и других служб Kerberos с помощью DNS. При этом очень полезно указать имя области как поддомен Вашего доменного имени DNS.

в отличие от пространства имен DNS, Kerberos не иерархичен. Вы не можете подчинить области с именем EXAMPLE.COM, две «подобласти» с именами DEVELOPMENT и ACCOUNTING, так, чтобы подчиненные области наследовали принципалов у EXAMPLE.COM. Вместо этого, Вы получите три разных области, для которых Вам придется настроить межобластную аутентификацию, чтобы пользователи одной области могли взаимодействовать с серверами и пользователями другой области.

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

6.4.3. Настройка KDC

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

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

  1. Поестите этот сервер в физически безопасное место, такое как закрытая серверная комната, к которой имеет доступ ограниченное количество людей.

  2. Не запускайте на ней сетевых приложений за исключением KDC. Это относится и к серверам и к клиентам: например, KDC не должен импортировать файловые системы по NFS или использовать DHCP для получения сетевой конфигурации.

  3. Установите на него минимальное количество приложений, затем проверьте список установленных пакетов и удалите все ненужные пакеты. Это относится к серверам, таким как inetd, portmap и cups, а также ко всему работающему под X. Даже установка SSH сервера должна рассматриваться как потенциальная уязвимость.

  4. На этой машине не требуется графического входа в систему, поскольку X сервер это потенциальная угроза безопасности. Kerberos предоставляет собственный интерфейс администрирования.

  5. Настройте /etc/nsswitch.conf для использования только локальных файлов для поиска пользователей и групп. Измените строки для passwd и group следующим образом:

    passwd:         files 
    group:          files

    Измените файлы passwd, group и shadow в /etc, удалив строки начинающиеся с символа + (они нужны для поиска NIS).

  6. Запретите все аккаунты пользователей, кроме root, заменив в /etc/shadow хеши паролей на символ * или !.

6.4.4. Настройка синхронизации времени

Для успешного использования Kerberos, убедитесь, что все системные часы внутри Вашей организации синхронизируются в определенном пределе. Это важно, поскольку Kerberos защищен против повторной отправки верительных данных. Атакующий может иметь возможность отслеживать верительные данные Kerberos по сети и повторно использовать их для атаки сервера. Kerberos применяет несколько видов защиты, чтобы предотвратить это. Одним из них являются временные метки билетов. Сервер, получивший билет с временной меткой, которая отличается от текущего времени, не принимает этот билет.

Kerberos имеет некоторый люфт при сравнении временных меток. Тем не менее, часы компьютера могут быть неточны при отсчете времени — часто приходится слышать о получасовом отклонении от точного времени, набранном за в неделю. По этой причине, настройте все компьютеры сети на синхронизацию м центральным источником времени.

Самым простым способом будет установка на один из компьютеров сервера NTP и синхронизация всех своих часов клиентами с этим сервером. Это можно сделать либо запустив NTP демон в режиме клиента на всех этих компьютерах или при помощи ежедневного запуска ntpdate на всех клиентах (это решение скорее всего будет работать только для небольшого количества клиентов). KDC тоже должен синхронизироваться с общим источником времени. Поскольку запуск NTP демона на этом компьютере будет представлять угрозу безопасности, хорошей идеей будет запуск ntpdate поредством записи в кроне. Что бы настроить клиент NTP, следуйте инструкциям Раздел “Configuring an NTP Client with YaST” (Глава 13, Time Synchronization with NTP, ↑Содержание).

Другой способом безопасно использовать службу времени с NTP-демоном - закрепить один источник точного времени за выделенным NTP-сервером и другой источник точного времени за KDC.

Можно также изменить максимальное отклонение, допускаемое Kerberos при проверке временных меток. Это значение (называемое разброс часов - clock skew) может быть установлено в файле krb5.conf как описано в Раздел 6.4.6.2.3, «Изменения разброса часов».

6.4.5. Настройка KDC

Эта секция поясняет начальную настройку и установку KDC, включая создание административного принципала. Эта процедура состоит из нескольких шагов:

  1. Установите RPM-пакеты.  На машине, предназначенной для KDC, установите следующие пакеты приложений: krb5, krb5-server и krb5-client .

  2. Измените файлы конфигурации.  Файлы конфигурации /etc/krb5.conf и /var/lib/kerberos/krb5kdc/kdc.conf должны быть изменены в соответствии с Вашим сценарием. Эти файлы содержат всю информацию о KDC.

  3. Создайте базу данных Kerberos.  Kerberos хранит базу идентификаторов всех принципалов и их защищенные ключи, необходимые для аутентификации. Обратитесь к Раздел 6.4.5.1, «Setting Up the Database» за подробной информацией.

  4. Измените файлы ACL: добавьте администраторов.  Расположенной на KDC базой данных Kerberos можно управлять удаленно. Для предотвращения подделки базы данных неавторизованными принципалами, Kerberos использует списки управления доступом. Вы должны явно разрешить удаленный доступ для администрирующего принципала чтобы он мог управлять этой базой данных. Файл ACL Kerberos находится в /var/lib/kerberos/krb5kdc/kadm5.acl. Обратитесь к Раздел 6.4.7, «Настройка удаленного администрирования Kerberos» за подробной информацией.

  5. Измените базу данных Kerberos: добавьте администраторов.  Вам нужен как минимум один администрирующий принципал для запуска и управления Kerberos. Этот принципал должен быть добавлен перед запуском KDC. Обратитесь к Раздел 6.4.5.2, «Создание принципалов» за подробностями.

  6. Запустите демон Kerberos.  После того, как KDC устанвлен и настроен, запустите демон Kerberos для обслуживания Kerberos Вашей области. Подробности можно найти в Раздел 6.4.5.3, «Запуск KDC».

  7. Создайте для себя принципала.  Вам нужен принципал для себя. Подробное описание доступно в Раздел 6.4.5.2, «Создание принципалов».

6.4.5.1. Setting Up the Database

Ваш следующий шаг - инициализировать базу данных, в которой Kerberos хранит всю информацию о принципалах. Задайте мастер-ключ, который будет использован для защиты Вашей базы данных от случайного раскрытия (например, при создании ее резервной копии). Мастер ключ создается из пароля и хранится в файле, называемом спрятанный (англ. stash) файл. Поэтому Вам не требуется вводить пароль при каждом перезапуске KDC. Убедитесь, что Вы выбрали хороший пароль, например фразу из книги, открытой на случайной странице.

Когда Вы сохраняете резервные копии базы данных Kerberos на ленту, (/var/lib/kerberos/krb5kdc/principal), не включайте в резервную копию спрятанный файл (находящийся в /var/lib/kerberos/krb5kdc/.k5.EXAMPLE.COM). Иначе, каждый, кто имеет доступ к резервной копии, сможет дешифровать базу данных. Поэтому храните копию пароля в безопасном месте, на случай, если Вам придется восстанавливать базу данных после сбоя.

Для создания спрятанного файла и базы данных, запустите:

kdb5_util create -r EXAMPLE.COM -s

Вы увидите следующую информацию:

Initializing database '/var/lib/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM',
master key name 'K/M@EXAMPLE.COM'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:  1
Re-enter KDC database master key to verify:  2

1

Введите мастер-пароль.

2

Введите пароль снова.

Для проверки используйте команду list:

kadmin.local

kadmin> listprincs

Вы увидите несколько принципалов в базе данных, которые предназначены для внутреннего пользования Kerberos:

K/M@EXAMPLE.COM
kadmin/admin@EXAMPLE.COM
kadmin/changepw@EXAMPLE.COM
krbtgt/EXAMPLE.COM@EXAMPLE.COM

6.4.5.2. Создание принципалов

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

kadmin.local

kadmin> ank geeko

Вы увидите следующее:

geeko@EXAMPLE.COM's Password: 1
Verifying password: 2

1

Type geeko's password.

1

Type geeko's password again.

Далее создайте другого принципала с именем geeko/admin набрав ank geeko/admin в kadmin. Суффикс admin после Вашего имени пользователя — это роль. Используйте эту роль при администрировании базы данных Kerberos. Пользователь может иметь несколько ролей различного назначения. Роли — это различные аккаунты с похожими именами.

6.4.5.3. Запуск KDC

Запустите демоны KDC и kadmin. Для ручного запуска демонов введите rckrb5kdc start и rckadmind start. Также удостоверьтесь, что KDC и kadmind запускаются автоматически при перезапуске сервера с помощью команд insserv krb5kdc и insserv kadmind или используйте Настройки уровня запуска YaST.

6.4.6. Конфигурация клиентов Kerberos

После того, как развернута вспомогательная инфраструктура (DNS, NTP) и KDC настроен и запущен, настройте клиентские компьютеры. Для настройки Kerberos клиента Вы можете использовать YaST либо один из двух методов ручной настройки, описанных ниже.

6.4.6.1. Конфигурация клиента Kerberos при помощи YaST

Вместо ручного изменения файлов конфигурации при настройке клиента Kerberos, позвольте YaST сделать это за Вас. Вы можете произвести настройку во время инсталляции, либо на уже установленной системе. Она выполняется следующим образом:

  1. Войдите в систему как root и выберите Сетевые службы+Клиент Kerberos.

  2. Выберите Использовать Kerberos.

  3. Для настройки клиента Kerberos, использующего DNS выполните следующие действия:

    1. Включите Использовать DNS для получения данных настроек во время работы и проверьте Основные настройки Kerberos отображенные на экране.

      [Note]Использование поддержки DNS

      Опция Использовать DNS не может быть выбрана, если DNS сервер не предоставляет таких данных.

    2. Нажмите Дополнительные настройки для конфигурирования параметров билетов, поддержки OpenSSH, синхронизации времени и экспертных настроек PAM.

  4. Для настройки статического клиента Kerberos:

    1. Установите в Домен по умолчанию, Область по умолчанию и Адрес сервера KDC значения, соответствующие Вашей конфигурации.

    2. Нажмите Дополнительные настройки для конфигурирования параметров билетов, поддержки OpenSSH, синхронизации времени и экспертных настроек PAM.

Рисунок 6.2. YaST: Базовая настройка клиента Kerberos

YaST: Базовая настройка клиента Kerberos

Для конфигурирования параметров билетов в диалоге Дополнительные настройки:

  • Укажите Время действия по умолчанию и Обновляемое время действия по умолчанию в днях, часах или минутах, (используя единицы измерения d, h или m, без разделителя между значением и единицей измерения).

  • Для переадресации Вашей полной идентификации (для использования Ваших билетов на других хостах), выберите значение в поле Переадресация.

  • Разрешите передачу некоторых билетов, выбрав значение в поле Проксирование.

  • Включите поддержку аутентификации Kerberos для своего OpenSSH клиента, отметив соответствующее поле. После этого клиент будет использовать билеты Kerberos для авторизации на сервере SSH.

  • Отключите использование аутентификации Kerberos для некоторых пользовательских аккаунтов введя в поле Минимальный UID значение необходимое для активации авторизации. Например, Вы можете пожелать исключить администратора системы (root).

  • Используйте Разброс часов, чтобы установить значение максимального отклонения между временными метками и системным временем Вашей машины.

  • Для синхронизации системного времени с NTP сервером, Вы также можете настроить NTP клиент, выбрав Настройка NTP , которая откроет диалог YaST Расширенная настройка NTP, описываемый в Раздел “Configuring an NTP Client with YaST” (Глава 13, Time Synchronization with NTP, ↑Содержание). После завершения конфигурации, YaST выполнит все необходимые изменения и клиент Kerberos будет готов к использованию.

Рисунок 6.3. YaST: Дополнительные настройки клиента Kerberos

YaST: Дополнительные настройки клиента Kerberos

За подробной информацией о конфигурации вкладок Настройки эксперта PAM и Службы PAM, обратитесь к официальной документации Раздел 6.5, «Дополнительная информация» и man-странице man 5 krb5.conf, входящей в пакет krb5-doc.

6.4.6.2. Ручная настройка клиентов Kerberos

Существует два основных подхода настройки Kerberos: статическая конфигурация с использованием файла /etc/krb5.conf или динамическая конфигурация при помощи DNS. Используя конфигурацию DNS, приложения Kerberos пытаются обнаружить службы KDC используя записи DNS. Для статической конфигурации, добавьте адрес Вашего KDC сервера в krb5.conf (и обновляйте файл при переносе KDC или других изменениях в Вашей области).

Конфигурация, основанная на DNS, является более гибкой и сокращает время на настройку каждого клиента. Однако, она требует, чтобы имя Вашей области либо совпадало с Вашим доменом DNS или его поддоменом. Настройка Kerberos через DNS также создает небольшую угрозу безопасности — атакующий может значительно нарушить работу Вашей инфраструктуры, с помощью DNS (например, отключив сервер имен подменив записи DNS и т.д.). Однако, в самом худшем случае это вызовет отказ в обслуживании. Подобный сценарий атаки применим и к статической конфигурации, если только Вы не введете IP-адреса в файл krb5.conf вместо имен хостов.

6.4.6.2.1. Статическая конфигурация

Один из способов настройки Kerberos заключается в редактировании /etc/krb5.conf. Файл, установленный по умолчанию, содержит различные примеры записей. Удалите их все перед началом настройки. krb5.conf состоит из нескольких секций (строф), каждая определяется именем в квадратных скобках вот [так].

Для настройки Ваших клиентов Kerberos, добавьте следующую строфу в krb5.conf (где kdc.example.com — имя хоста KDC):

[libdefaults]
        default_realm = EXAMPLE.COM

[realms]
        EXAMPLE.COM = {
                kdc = kdc.example.com
                admin_server = kdc.example.com
        }

Строка default_realm устанавливает область по умолчанию для приложений Kerberos. если у Вас областей несколько, просто добавьте дополнительные выражения в секцию [realms].

Также в этот файл нужно добавить выражение, которое будет сообщать приложениям, как отобразить имена хостов на область. Например, при подключении к удаленному компьютеру, библиотеке Kerberos требуется знать, в какой области размещен этот хост. Это должно быть задано в секции [domain_realms]:

[domain_realm]
        .example.com = EXAMPLE.COM
        www.foobar.com = EXAMPLE.COM

Это сообщает библиотеке, что все хосты в доменах DNS example.com находятся в области Kerberos EXAMPLE.COM. В дополнение, один внешний хост с именем www.foobar.com должен тоже считаться членом области EXAMPLE.COM.

6.4.6.2.2. Конфигурация при помощи DNS

Конфигурация Kerberos на основе DNS плотно использует записи SRV. Обратитесь к (RFC2052) DNS RR for specifying the location of services на сайте http://www.ietf.org.

Имя записи SRV, с точки зрения Kerberos, всегда задано в формате _service._proto.realm, где realm — это область Kerberos. Доменные имена в DNS не чувствительны к регистру, поэтому чувствительные к регистру области Kerberos realms будут нарушены при использовании данного метода конфигурации. _service — это имя службы (например, при попытке связаться с KDC или службой паролей используются различные имена). _proto может быть либо _udp, либо _tcp, но не все службы поддерживают оба протокола.

Часть данных ресурса SRV состоит из значения приоритета, веса, номера порта и имени хоста. Приоритет определяет порядок, в котором должны перебираться хосты (меньшие значения указывают на более высокий приоритет). Значение веса необходимо для поддержки балансирования нагрузки между серверами с равным приоритетом. Возможно, Вам не потребуется их использовать, в этом случае просто установите оба значения в ноль.

В настоящее время MIT Kerberos ищет следующие имена при поиске служб:

_kerberos

Определяет размещение демона KDC (сервера аутентификации и выдачи билетов). Обычно выглядит так:

_kerberos._udp.EXAMPLE.COM.  IN  SRV    0 0 88 kdc.example.com. 
_kerberos._tcp.EXAMPLE.COM.  IN  SRV    0 0 88 kdc.example.com.
_kerberos-adm

Определяет размещение службы удаленного администрирования. Типичные записи выглядят так:

_kerberos-adm._tcp.EXAMPLE.COM. IN  SRV    0 0 749 kdc.example.com.

Поскольку kadmind не поддерживает UDP, записи _udp быть не должно.

Как и при использовании файла статической конфигурации, существует механизм, сообщающий клиентам о принадлежности заданного хоста к области EXAMPLE.COM, даже если он не входит в домен DNS example.com. Это можно сделать прикрепив запись TXT к _kerberos.hostname, как показано здесь:

_kerberos.www.foobar.com.  IN TXT "EXAMPLE.COM"
6.4.6.2.3. Изменения разброса часов

Разброс часов — это чувствительность при приеме билетов, временные метки которых не точно соответствуют текущему времени системы. Обычно, разброс часов устанавливается в 300 секунд (пять минут). Это означает, что билет может иметь временную метку опережающую часы сервера на пять минут или отстающую от них на столько же.

При использовании NTP для синхронизации всех хостов, Вы можете уменьшить это значение до одной минуты. Разброс часов задается в файле /etc/krb5.conf следующим образом:

[libdefaults]
        clockskew = 60

6.4.7. Настройка удаленного администрирования Kerberos

Чтобы добавлять и удалять принципалов из базы данных Kerberos, не имея прямого доступа к консоли KDC, укажите серверу администрирования Kerberos какие действия разрешены каким принципалам отредактировав /var/lib/kerberos/krb5kdc/kadm5.acl. Файл ACL (списка контроля доступа) позволяет Вам задавать привилегии с четким их контролем. За подробностями обратитесь к man-странице man 8 kadmind.

Сейчас просто утановите себе привилегию администрировать базу данных добавив слкдующую строку в файл:

geeko/admin              *

Замените имя пользователя geeko на свое. перезапустите kadmind для применения изменений.

У вас должна появится возможность выполнять задачи удаленного администрирования Kerberos используя утилиту kadmin. Сначала получите билет для своей администраторской роли и используйте его для подключения к серверу kadmin:

kadmin -p geeko/admin
Authenticating as principal geeko/admin@EXAMPLE.COM with password.
Password for geeko/admin@EXAMPLE.COM:
kadmin:  getprivs
current privileges: GET ADD MODIFY DELETE
kadmin:

Используя команду getprivs, проверьте, какие у Вас привилегии. Список выше отображает полный набор привилегий.

В качестве примера, измените принципала geeko:

kadmin -p geeko/admin
Authenticating as principal geeko/admin@EXAMPLE.COM with password.
Password for geeko/admin@EXAMPLE.COM:

kadmin:  getprinc geeko
Principal: geeko@EXAMPLE.COM
Expiration date: [never]
Last password change: Wed Jan 12 17:28:46 CET 2005
Password expiration date: [none]
Maximum ticket life: 0 days 10:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: Wed Jan 12 17:47:17 CET 2005 (admin/admin@EXAMPLE.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 2
Key: vno 1, Triple DES cbc mode with HMAC/sha1, no salt
Key: vno 1, DES cbc mode with CRC-32, no salt
Attributes:
Policy: [none]

kadmin:  modify_principal -maxlife "8 hours" geeko
Principal "geeko@EXAMPLE.COM" modified.
kadmin:  getprinc joe
Principal: geeko@EXAMPLE.COM
Expiration date: [never]
Last password change: Wed Jan 12 17:28:46 CET 2005
Password expiration date: [none]
Maximum ticket life: 0 days 08:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: Wed Jan 12 17:59:49 CET 2005 (geeko/admin@EXAMPLE.COM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 2
Key: vno 1, Triple DES cbc mode with HMAC/sha1, no salt
Key: vno 1, DES cbc mode with CRC-32, no salt
Attributes:
Policy: [none]
kadmin:

Это изменит максимальное время жизни билета, установив его равным восьми часам. Подробную информацию о команде kadmin и доступных опциях смотрите в пакете krb5-doc, по ссылке http://web.mit.edu/kerberos/www/krb5-1.8/krb5-1.8.3/doc/krb5-admin.html#Kadmin%20Options, или на man-странице man8 kadmin.

6.4.8. Creating Kerberos Service Principals

До настоящего момента мы обсуждали только аутентификацию пользователей. Однако, службы совместимые с Kerberos обычно также должны аутентифицировать себя перед клиентами. Таким образом, в базе данных Kerberos должны существовать специальные служебные принципалы для каждой службы работающей данной области. Например, если ldap.example.com предоставляет службу LDAP, вам нужен служебный принципал, ldap/ldap.example.com@EXAMPLE.COM, для аутентификации этой службы перед всеми клиентами.

Соглашение именования для служебных принципалов служба/имяхоста@ОБЛАСТЬ, где имя_хоста — полное имя хоста.

Действительные дескрипторы служб:

Дескриптор службы

Служба

host

Telnet, RSH, SSH

nfs

NFSv4 (с поддержкой Kerberos)

HTTP

HTTP (с аутентификацией Kerberos)

imap

IMAP

pop

POP3

ldap

LDAP

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

Вместо этого, ключ для расшифровки первого билета служебного принципала получается администратором от KDC всего один раз и хранится в локальном файле с именем keytab. Службы, такие как демон SSH, читают этот ключ и, при необходимости, используют его для получения нового билета автоматически. Файл keytab по умолчанию находится в /etc/krb5.keytab.

Для создания сервисного принципала хоста jupiter.example.com введите следующие команды в сессии kadmin:

kadmin -p geeko/admin
Authenticating as principal geeko/admin@EXAMPLE.COM with password.
Password for geeko/admin@EXAMPLE.COM:
kadmin:  addprinc -randkey host/jupiter.example.com
WARNING: no policy specified for host/jupiter.example.com@EXAMPLE.COM;
defaulting to no policy
Principal "host/jupiter.example.com@EXAMPLE.COM" created.

Вместо установки пароля для нового принципала, флаг -randkey указывает kadmin создать случайный ключ. Он используется потому, что для этого принципала не нужно взаимодействие с пользователем. Это серверная учетная запись.

Затем извлеките ключ и сохраните его в локальном файле keytab /etc/krb5.keytab. Владельцем этого файла является суперпользователь, так что Вы должны запустить команду от root используя оболочку kadmin:

kadmin:  ktadd host/jupiter.example.com
Entry for principal host/jupiter.example.com with kvno 3, encryption type Triple
DES cbc mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/jupiter.example.com with kvno 3, encryption type DES
cbc mode with CRC-32 added to keytab WRFILE:/etc/krb5.keytab.
kadmin:

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

6.4.9. Включение поддержки PAM в Kerberos

openSUSE® содержит модуль PAM с именем pam_krb5, который поддерживает вход в систему через Kerberos и изменение пароля. Этот модуль может использоваться как консольными приложениями: login, su, так и приложениями графической авторизации, например KDM (где пользователь вводит пароль и хочет, чтобы приложение, удостоверяющее подлинность, получило для него начальный билет Kerberos). Для настройки поддержки PAM в Kerberos, используйте следующую команду:

pam-config --add --krb5

Эта команда добавляет модуль pam_krb5 в существующие файлы конфигурации PAM и проверяет, в правильном порядке ли он запускается. Для точной настройки использования pam_krb5, отредактируйте файл /etc/krb5.conf и добавьте приложения по умолчанию в pam. Подробности доступны на man-странице man 5 pam_krb5.

Модуль pam_krb5 специально не предназначен для сетевых служб, которые принимают билеты Kerberos как часть аутентификации пользователя. Это совсем другой случай, который будет описан ниже.

6.4.10. Настройка SSH для аутентификации с помощью Kerberos

OpenSSH поддерживает аутентификацию Kerberos как для протоколов версии  1 и 2. В версии 1, есть специальные сообщения протокола передачи билетов Kerberos. Версия 2 уже не использует Kerberos напрямую, полагаясь на GSSAPI, Общее API служб безопасности (General Security Services API). Это программный интерфейс, не характерный только для Kerberos — он был создан для скрытия особенностей систем аутентификации, будь то Kerberos, система аутентификации на основе открытого ключа наподобие SPKM или другая. Однако, имеющаяся библиотека GSSAPI поддерживает только Kerberos.

Для использования sshd с аутентификацией Kerberos, отредактируйте файл /etc/ssh/sshd_config и установите следующие опции:

# These are for protocol version 1 
#
# KerberosAuthentication yes
# KerberosTicketCleanup yes

# These are for version 2 - better to use this
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

Затем перезапустите демон SSH с помощью команды rcsshd restart.

Для использования аутентификации Kerberos с протоколом версии 2, включите его на стороне клиента. Это можно сделать либо в системном файле конфигурации /etc/ssh/ssh_config или на уровне пользователя, отредактировав ~/.ssh/config. В любом случае, добавьте опцию GSSAPIAuthentication yes.

Теперь Вы сможете подключаться используя аутентификацию Kerberos. Используйте klist для проверки наличия действительного билета, затем подключитесь к серверу SSH. Для принудительного использования версии 1 протокола SSH, укажите опцию -1 в командной строке.

[Tip]Дополнительная информация

В файле /usr/share/doc/packages/openssh/README.kerberos содержит более подробное описание взаимодействия OpenSSH и Kerberos.

6.4.11. Использование LDAP и Kerberos

при использовании Kerberos, одним из способов распространения пользовательской информации (такой как ID пользователя, его группы и домашняя директория) в Вашей локальной сети, является использование LDAP. Это требует надежного механизма аутентификации, предотвращающего подмену пакетов и другие атаки. Одним из решений является использование Kerberos для взаимодействия с LDAP.

OpenLDAP реализует большинство способов аутентификации через SASL, уровень простой сессионной авторизации. SASL это сетевой протокол, созданный для аутентификации. Реализацией SASL является cyrus-sasl, который поддерживает различные методы аутентификации. Аутентификация Kerberos выполняется посредством GSSAPI (General Security Services API). По умолчанию плагин SASL для GSSAPI не установлен. Установите cyrus-sasl-gssapi при помощи YaST.

Чтобы разрешить Kerberos использование сервера OpenLDAP, создайте принципала ldap/ldap.example.com и добавьте его в keytab.

По умолчанию сервер LDAP slapd запущен от пользователя и группы ldap, в то время как файл keytab может читать только root. Поэтому, либо измените конфигурацию LDAP, чтобы сервер работал от root или разрешите чтение файла keytab группе ldap. Это можно автоматизировать используя скрипт запуска OpenLDAP (/etc/init.d/ldap) если файл keytab был указан в переменной OPENLDAP_KRB5_KEYTAB файла /etc/sysconfig/openldap и переменная OPENLDAP_CHOWN_DIRS установлена в yes, что уже сделано по умолчанию. Если OPENLDAP_KRB5_KEYTAB пуста, используется keytab файл /etc/krb5.keytab и Вы должны сами изменить права доступа согласно дальнейшей инструкции.

Для запуска slapd от root, отредактируйте /etc/sysconfig/openldap. Отключите переменные OPENLDAP_USER и OPENLDAP_GROUP, добавив перед ними символ комментария.

Чтобы разрешить чтение файла keytab группе LDAP, выполните

chgrp ldap /etc/krb5.keytab
chmod 640 /etc/krb5.keytab

Третье (и возможно наилучшее) решение — использовать с OpenLDAP отдельный файл keytab. Для этого запустите kadmin и введите следующую команду после добавления принципала ldap/ldap.example.com:

ktadd -k /etc/openldap/ldap.keytab ldap/ldap.example.com@EXAMPLE.COM

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

chown ldap.ldap /etc/openldap/ldap.keytab 
chmod 600 /etc/openldap/ldap.keytab

Чтобы указать OpenLDAP использовать отдельный файл keytab, измените переменную в файле /etc/sysconfig/openldap:

OPENLDAP_KRB5_KEYTAB="/etc/openldap/ldap.keytab"

И наконец, перезапустите сервер LDAP с помощью rcldap restart.

6.4.11.1. Использование аутентификации Kerberos для LDAP

Сейчас Вы сможете автоматически использовать утилиты, например ldapsearch, с аутентификацией Kerberos.

ldapsearch -b ou=people,dc=example,dc=com '(uid=geeko)'

SASL/GSSAPI authentication started
SASL SSF: 56
SASL installing layers
[...]

# geeko, people, example.com
dn: uid=geeko,ou=people,dc=example,dc=com
uid: geeko
cn: Olaf Kirch
[...]

Как видите, ldapsearch выводит сообщение о начале аутентификации через GSSAPI. Следующее сообщение крайне загадочно, но оно показывает, что фактор уровня безопасности (security strength factor — SSF для краткости) равен 56. (Значение 56 произвольно. Возможно его выбрали поскольку оно равно числу бит в ключе шифрования DES). Вам это говорит о том, что аутентификация GSSAPI была успешной и что шифрование используется для защиты целостности и конфиденциальности соединения с LDAP.

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

6.4.11.2. Аутентификация Kerberos и настройки доступа LDAP

Теперь мы разрешим каждому пользователю изменять атрибут консоли в своей записи LDAP. Допустим, запись LDAP пользователя joe размещена в uid=joe,ou=people,dc=example,dc=com и установим следующие настройки доступа в /etc/openldap/slapd.conf:

# This is required for things to work _at all_
access to dn.base="" by * read
# Let each user change their login shell
access to dn="*,ou=people,dc=example,dc=com" attrs=loginShell
       by self write
# Every user can read everything
access to *
       by users read

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

Теперь нам не хватает еще одной части паззла — как сервер LDAP определит, что пользователь Kerberos joe@EXAMPLE.COM относится к отличительному имени LDAP uid=joe,ou=people,dc=example,dc=com. Этот вид отображения должен быть настроен вручную с использованием директивы saslExpr. Для этого примера, нужно добавить в файл slapd.conf:

authz-regexp
   uid=(.*),cn=GSSAPI,cn=auth 
   uid=$1,ou=people,dc=example,dc=com

Чтобы понять, как это работает, Вам нужно знать, что при аутентификации SASL пользователя, OpenLDAP создает отличительное имя из имени данным ему SASL (такого как joe) и имени метода SASL (GSSAPI). Результатом будет uid=joe,cn=GSSAPI,cn=auth.

Если настроен authz-regexp, он проверяет отличительное имя, созданное на основе информации SASL, используя первый аргумент как регулярное выражение. При совпадении этого регулярного выражения, имя заменяется вторым аргументом выражения authz-regexp. Заместитель $1 заменяется подстрокой, совпавшей с выражением (.*).

Возможны более сложные выражения. Если Ваша структура директорий более сложна или имя пользователя не является частью отличительного имени, Вы можете использовать выражения поиска для отображения отличительного имени SASL на отличительное имя пользователя.

6.5. Дополнительная информация

Официальный сайт MIT Kerberos http://web.mit.edu/kerberos. Здесь можно найти ссылки на любые другие ресурсы о Kerberos, включая установку Kerberos, руководства пользователя и администратора.

Документ по адресу ftp://athena-dist.mit.edu/pub/kerberos/doc/usenix.PS предоставляет довольно обширное описание основных принципов Kerberos, и легко читается. Также в нем содержится много информации для дальнейшего изучения Kerberos.

Официальный Kerberos FAQ доступен по адресу http://www.nrl.navy.mil/CCS/people/kenh/kerberos-faq.html. Книга Kerberos — Система сетевой аутентификации Brian Tung (ISBN 0-201-37924-4) также предлагает широкий спектр информации.