Содержание
Открытая сетевая архитектура не предоставляет способа удостовериться в том, что рабочая станция идентифицирует пользователей должным образом, за исключением обычного механизма паролей. В большинстве случаев пользователь должен вводить пароль при каждом обращении к службе внутри сети. Kerberos предоставляет метод аутентификации, с помощью которого пользователь регистрируется только один раз, после чего ему доступны все сетевые ресурсы до конца сессии. Следующие требования должны быть соблюдены для безопасности сети:
Все пользователи должны подтверждать свою подлинность и никто не должен использовать чужие данные.
Убедиться, что каждый сервер сети также подтверждает свою подлинность. Иначе злоумышленник может подменить сервер и получить доступ к отправляемой ему конфиденциальной информации. Эта концепция названа взаимной аутентификацией, потому что клиент аутентифицируется у сервера и наоборот.
Kerberos поможет Вам соблюсти эти условия предлагая аутентификацию с устойчивым шифрованием. Здесь мы обсудим только основные принципы Kerberos. За подробной технической инструкцией обратитесь к документации Kerberos.
Следующий глоссарий содержит основные определения Kerberos.
Пользователи или клиенты должны представить какие-либо верительные данные, разрешающие им запрашивать службы. Kerberos известно два вида верительных данных: билеты и аутентификаторы.
Билет - это верительные данные, используемые клиентом для аутентификации на сервере, у которого клиент запрашивает службу. Он содержит имя сервера, имя клиента, адрес клиента в интернете, дату, время жизни и произвольный ключ сессии. Все эти данные зашифрованы с использованием ключа сервера.
Объединяясь с билетом, аутентификатор используется для доказательства того, что клиент предоставивший билет действительно тот, за кого он себя выдает. аутентификатор создается с использованием имени клиента, IP-адреса рабочей станции и текущего времени рабочей станции. Все это зашифровано ключом сессии, известным только клиенту и соответствующему серверу. В отличие от билета, аутентификатор может быть использован только один раз. Клиент может создавать аутентификаторы самостоятельно.
Kerberos принципал это уникальная сущность (пользователь или служба), которой можно ассигновать билет. Принципал состоит из следующих компонентов:
Основа (primary) — первая часть принципала, которая может совпадать с именем пользователя, в случае использования пользователя в качестве принципала.
Экземпляр (instance) — некая необязательная
информация, характеризующая основу. Эта строка отделена от
исходной символом /
.
Область (realm) — определяет вашу область Kerberos. Обычно область соответствует доменному имени, написанному в верхнем регистре.
Kerberos проверяет подлинность как пользователя, так и клиента. Они разделяют между собой ключ сессии, который используется для безопасного взаимодействия.
Ключи сессии — это временные защищенные ключи, созданные Kerberos. Они известны клиенту и используются для шифрования данных, передаваемых между клиентом и сервером, для которого он запросил и получил билет.
Почти все сообщения, посылаемые по сети, могут быть подслушаны, украдены и отосланы повторно.В контексте Kerberos будет очень опасно, если атакующему удастся получить Ваш запрос на обслуживание содержащий Ваш билет и аутентификатор. Атакующий может попытаться послать их повторно (replay), чтобы представиться Вами. Однако, в Kerberos реализовано несколько механизмов чтобы решить эту проблему.
Служба используется для обозначения определенного действия, которое нужно выполнить. Стоящий за этим действием процесс называется сервером.
Kerberos часто называют сторонней доверенной службой аутентификации, это означает, что все клиенты доверяют Kerberos решение о подлинности друг друга. Kerberos хранит базу данных всех своих пользователей и их защищенных ключей.
Чтобы убедиться в правильной работе Kerberos, запустите сервер аутентификации
и предоставляющий билеты сервер на выделенной машине. Убедитесь, что
только администратор имеет физический и сетевой доступ к этой машине.
Снизьте количество запущенных на нем (сетевых) служб до абсолютного
минимума — не запускайте даже
sshd
.
Ваш первый контакт с Kerberos напоминает стандартную процедуру сетевого логина. Введите Ваше имя пользователя. Эта часть информации и имя службы, выдающей билеты, посылаются серверу аутентификации (Kerberos). Если сервер аутентификации знает Вас, он генерирует случайный ключ сессии для дальнейшего использования между Вашим клиентом и предоставляющим билеты сервером. Далее сервер аутентификации готовит билет для сервера, предоставляющего билеты. Билет содержит следующую информацию (все зашифровано ключем сессии, который знают только сервер аутентификации и сервер, предоставляющий билеты):
Имена обоих, клиента и сервера, предоставляющего билеты
Текущее время
Время жизни, назначенное этому билету
IP-адрес клиента
Вновь созданный ключ сессии
Этот билет посылается клиенту вместе с ключем сессии, опять-таки в зашифрованном виде, но на этот раз защищенным ключом клиента. Защищенный ключ известен только Kerberos и клиенту, потому что он создается на основе пароля пользователя. после получения этого ответа клиентом, у Вас запрашивается пароль. Этот пароль преобразуется в ключ, которым можно расшифровать пакет, отправленный сервером аутентификации. Пакет «разворачивается» и пароль с ключом стираются из памяти рабочей станции. Пока время жизни билета, используемого для получения других билетов не истечет, Ваша рабочая станция может подтверждать свою подлинность.
Для запроса службы у любого сервера сети, клиентское приложение должно подтвердить подлинность перед сервером. Поэтому приложение генерирует аутентификатор. Аутентификатор состоит из следующих компонентов:
Принципал клиента
IP-адрес клиента
Текущее время
Контрольная сумма (выбранная клиентом)
Вся эта информация зашифрована с использованием ключа сессии, которую клиент уже получил от специального сервера. Аутентификатор и билет для сервера посылаются серверу. Сервер использует свою копию ключа сессии, чтобы расшифровать аутентификатор, который предоставляет всю необходимую информацию о клиенте, запрашивающем службу, и сравнивает ее с информацией билета. Сервер также проверяет, принадлежат ли аутентификатор и билет одному и тому же клиенту.
Если не предпринять мер безопасности на стороне сервера, этот шаг может быть идеальной целью для атак повторного воспроизведения. Кто-нибудь может попытаться переслать запрос, украденный ранее из сети. Для предотвращения этого, сервер не принимает запросов с билетом и временной меткой уже принятыми ранее. В дополнение к этому, запросы с временной меткой сильно отличающейся от времени получения запроса, игнорируются.
Аутентификация Kerberos может быть использована в обоих направлениях. Она касается не только удостоверения своей подлинности клиентом. Сервер тоже должен аутентифицировать себя перед клиентом, запрашивая его службу. Таким образом, он тоже посылает аутентификатор. Он добавляет единицу к контрольной сумме клиентского аутентификатора и шифрует результат разделяемым им с клиентом ключем сессии. Клиент принимает этот ответ, как доказательство подлинности сервера и они начинают взаимодействие.
Билеты создаются для использования с конкретным сервером. Это означает, что при запросе к новой службе Вам нужен новый билет. Kerberos реализует механизм получения билетов для отдельных серверов. Эта служба называется «службой получения билетов ». Служба получения билетов использует протоколы доступа описанные ранее. Каждый раз, когда приложению нужен новый билет, оно соединяется с сервером получения билетов. Этот запрос состоит из следующих компонентов:
Запрашиваемый принципал
Билет на получение билета
Аутентификатор
Как и любой другой сервер, сервер получения билетов проверяет билет на получение билета и аутентификатор. Если он считает их достоверными, то создает новый ключ сессии для использования между клиентом и новым сервером. Затем создается билет для нового сервера, который содержит следующую информацию:
Принципал клиента
Принципал сервера
Текущее время
IP-адрес клиента
Вновь созданный ключ сессии
Новый билет имеет время жизни, равное оставшемуся времени жизни билета на получение билета или времени жизни по умолчанию для этой службы. Из двух этих значений выбирается наименьшее. Клиент получает от службы получения билетов этот билет и ключ сессии, зашифрованные тем, же ключом, которым был зашифрован билет на получение билета. Клиент может расшифровать ответ без использования пароля пользователя, при запросе новой службы. Таким образом, Kerberos может получать билет за билетом, не беспокоя пользователя.
Windows 2000 содержит реализацию Kerberos 5 от Microsoft. openSUSE® использует MIT реализацию Kerberos 5, полезная информация и руководство можно найти в документации MIT Раздел 6.5, «Дополнительная информация».
В идеальном случае, единственный контакт пользователя с 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.
Окружение 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 приложениям, использующим PAM, выполните действия, описанные в Раздел 6.4.9, «Включение поддержки PAM в Kerberos». Чтобы настроить SSH или LDAP на аутентификацию через Kerberos, следуйте Раздел 6.4.10, «Настройка SSH для аутентификации с помощью Kerberos» и Раздел 6.4.11, «Использование LDAP и 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», настройте маршрутизацию между двумя подсетями (192.168.1.0/24 и 192.168.2.0/24). Обратитесь к Раздел “Configuring Routing” (Глава 9, Basic Networking, ↑Содержание) за дальнейшей информацией о настройке маршрутизации с помощью YaST. |
Домен, в котором работает инсталляция 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
.
Первый шаг, необходимый для использования Kerberos — это компьютер, который будет работать как центр распространения ключей или, для краткости, KDC. Этот компьютер содержит всю базу данных пользователей Kerberos с паролями и другой информацией.
KDC это наиболее важная часть вашей инфраструктуры безопасности: если кто-либо проникнет в нее, все учетные записи пользователей и вся защищенная Kerberos часть сети будет скомпроментирована. Взломщик с доступом к базе данных Kerberos может представиться любым принципалом из этой базы. Сделайте настройки безопасности для этого компьютера максимально строгими:
Поестите этот сервер в физически безопасное место, такое как закрытая серверная комната, к которой имеет доступ ограниченное количество людей.
Не запускайте на ней сетевых приложений за исключением KDC. Это относится и к серверам и к клиентам: например, KDC не должен импортировать файловые системы по NFS или использовать DHCP для получения сетевой конфигурации.
Установите на него минимальное количество приложений, затем проверьте список установленных пакетов и удалите все ненужные пакеты. Это относится к серверам, таким как inetd, portmap и cups, а также ко всему работающему под X. Даже установка SSH сервера должна рассматриваться как потенциальная уязвимость.
На этой машине не требуется графического входа в систему, поскольку X сервер это потенциальная угроза безопасности. Kerberos предоставляет собственный интерфейс администрирования.
Настройте /etc/nsswitch.conf
для использования
только локальных файлов для поиска пользователей и групп. Измените строки для
passwd
и group
следующим
образом:
passwd: files group: files
Измените файлы passwd
, group
и
shadow
в /etc
,
удалив строки начинающиеся с символа +
(они нужны для поиска NIS).
Запретите все аккаунты пользователей, кроме root
, заменив в
/etc/shadow
хеши паролей на символ
*
или !
.
Для успешного использования 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, «Изменения разброса часов».
Эта секция поясняет начальную настройку и установку KDC, включая создание административного принципала. Эта процедура состоит из нескольких шагов:
Установите RPM-пакеты.
На машине, предназначенной для KDC, установите следующие пакеты
приложений: krb5
,
krb5-server
и
krb5-client
.
Измените файлы конфигурации.
Файлы конфигурации /etc/krb5.conf
и
/var/lib/kerberos/krb5kdc/kdc.conf
должны
быть изменены в соответствии с Вашим сценарием. Эти файлы содержат всю
информацию о KDC.
Создайте базу данных Kerberos. Kerberos хранит базу идентификаторов всех принципалов и их защищенные ключи, необходимые для аутентификации. Обратитесь к Раздел 6.4.5.1, «Setting Up the Database» за подробной информацией.
Измените файлы ACL: добавьте администраторов.
Расположенной на KDC базой данных Kerberos можно управлять удаленно. Для
предотвращения подделки базы данных неавторизованными принципалами, Kerberos
использует списки управления доступом. Вы должны явно разрешить удаленный доступ
для администрирующего принципала чтобы он мог управлять этой базой данных.
Файл ACL Kerberos находится в
/var/lib/kerberos/krb5kdc/kadm5.acl
. Обратитесь к
Раздел 6.4.7, «Настройка удаленного администрирования Kerberos» за подробной информацией.
Измените базу данных Kerberos: добавьте администраторов. Вам нужен как минимум один администрирующий принципал для запуска и управления Kerberos. Этот принципал должен быть добавлен перед запуском KDC. Обратитесь к Раздел 6.4.5.2, «Создание принципалов» за подробностями.
Запустите демон Kerberos. После того, как KDC устанвлен и настроен, запустите демон Kerberos для обслуживания Kerberos Вашей области. Подробности можно найти в Раздел 6.4.5.3, «Запуск KDC».
Создайте для себя принципала. Вам нужен принципал для себя. Подробное описание доступно в Раздел 6.4.5.2, «Создание принципалов».
Ваш следующий шаг - инициализировать базу данных, в которой 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: Re-enter KDC database master key to verify:
Для проверки используйте команду list:
kadmin.local kadmin> listprincs
Вы увидите несколько принципалов в базе данных, которые предназначены для внутреннего пользования Kerberos:
K/M@EXAMPLE.COM kadmin/admin@EXAMPLE.COM kadmin/changepw@EXAMPLE.COM krbtgt/EXAMPLE.COM@EXAMPLE.COM
Создайте для себя двух принципалов Kerberos: обычного принципала для
ежедневной работы и другого - для администрирования Kerberos.
Допустим, Ваше имя пользователя geeko
, значит
Вам необходимо выполнить следующие действия:
kadmin.local kadmin> ank geeko
Вы увидите следующее:
geeko@EXAMPLE.COM's Password: Verifying password:
Далее создайте другого принципала с именем geeko/admin
набрав ank geeko/admin
в
kadmin. Суффикс admin
после Вашего имени пользователя — это роль. Используйте
эту роль при администрировании базы данных Kerberos. Пользователь может иметь несколько
ролей различного назначения. Роли — это различные аккаунты с похожими
именами.
Запустите демоны KDC и kadmin. Для ручного запуска демонов
введите rckrb5kdc start и
rckadmind start. Также удостоверьтесь, что KDC и kadmind
запускаются автоматически при перезапуске сервера с помощью команд
insserv krb5kdc
и
insserv kadmind
или используйте
Настройки уровня запуска YaST.
После того, как развернута вспомогательная инфраструктура (DNS, NTP) и KDC настроен и запущен, настройте клиентские компьютеры. Для настройки Kerberos клиента Вы можете использовать YaST либо один из двух методов ручной настройки, описанных ниже.
Вместо ручного изменения файлов конфигурации при настройке клиента Kerberos, позвольте YaST сделать это за Вас. Вы можете произвести настройку во время инсталляции, либо на уже установленной системе. Она выполняется следующим образом:
Войдите в систему как root
и выберите + .
Выберите
.Для настройки клиента Kerberos, использующего DNS выполните следующие действия:
Включите
и проверьте отображенные на экране.Использование поддержки DNS | |
---|---|
Опция не может быть выбрана, если DNS сервер не предоставляет таких данных. |
Нажмите
для конфигурирования параметров билетов, поддержки OpenSSH, синхронизации времени и экспертных настроек PAM.Для настройки статического клиента Kerberos:
Установите в
, и значения, соответствующие Вашей конфигурации.Нажмите
для конфигурирования параметров билетов, поддержки OpenSSH, синхронизации времени и экспертных настроек PAM.Для конфигурирования параметров билетов в диалоге
:Укажите d, h или m, без разделителя между значением и единицей измерения).
и в днях, часах или минутах, (используя единицы измеренияДля переадресации Вашей полной идентификации (для использования Ваших билетов на других хостах), выберите значение в поле
.Разрешите передачу некоторых билетов, выбрав значение в поле
.Включите поддержку аутентификации Kerberos для своего OpenSSH клиента, отметив соответствующее поле. После этого клиент будет использовать билеты Kerberos для авторизации на сервере SSH.
Отключите использование аутентификации Kerberos для некоторых пользовательских аккаунтов
введя в поле root
).
Используйте
, чтобы установить значение максимального отклонения между временными метками и системным временем Вашей машины.Для синхронизации системного времени с NTP сервером, Вы также можете настроить NTP клиент, выбрав
, которая откроет диалог YaST Расширенная настройка NTP, описываемый в Раздел “Configuring an NTP Client with YaST” (Глава 13, Time Synchronization with NTP, ↑Содержание). После завершения конфигурации, YaST выполнит все необходимые изменения и клиент Kerberos будет готов к использованию.
За подробной информацией о конфигурации вкладок Раздел 6.5, «Дополнительная информация» и man-странице
man 5 krb5.conf, входящей в пакет
krb5-doc
.
Существует два основных подхода настройки Kerberos:
статическая конфигурация с использованием файла
/etc/krb5.conf
или динамическая конфигурация при помощи
DNS. Используя конфигурацию DNS, приложения Kerberos пытаются обнаружить
службы KDC используя записи DNS. Для статической конфигурации, добавьте
адрес Вашего KDC сервера в krb5.conf
(и
обновляйте файл при переносе KDC или других изменениях в Вашей
области).
Конфигурация, основанная на DNS, является более гибкой и сокращает
время на настройку каждого клиента. Однако, она требует,
чтобы имя Вашей области либо совпадало с Вашим доменом DNS или
его поддоменом. Настройка Kerberos через DNS также создает небольшую
угрозу безопасности — атакующий может значительно нарушить
работу Вашей инфраструктуры, с помощью DNS (например, отключив сервер имен
подменив записи DNS и т.д.). Однако, в самом худшем случае это вызовет
отказ в обслуживании. Подобный сценарий атаки применим и к статической
конфигурации, если только Вы не введете IP-адреса в файл
krb5.conf
вместо имен хостов.
Один из способов настройки 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
.
Конфигурация 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 ищет следующие имена при поиске служб:
Определяет размещение демона 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._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"
Разброс часов — это чувствительность при приеме билетов, временные метки которых не точно соответствуют текущему времени системы. Обычно, разброс часов устанавливается в 300 секунд (пять минут). Это означает, что билет может иметь временную метку опережающую часы сервера на пять минут или отстающую от них на столько же.
При использовании NTP для синхронизации всех хостов, Вы можете уменьшить это
значение до одной минуты. Разброс часов задается в файле
/etc/krb5.conf
следующим образом:
[libdefaults] clockskew = 60
Чтобы добавлять и удалять принципалов из базы данных 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
.
До настоящего момента мы обсуждали только аутентификацию пользователей. Однако,
службы совместимые с Kerberos обычно также должны аутентифицировать себя
перед клиентами. Таким образом, в базе данных Kerberos должны существовать
специальные служебные принципалы для каждой службы работающей данной области.
Например, если ldap.example.com предоставляет службу LDAP, вам нужен служебный
принципал, ldap/ldap.example.com@EXAMPLE.COM
, для
аутентификации этой службы перед всеми клиентами.
Соглашение именования для служебных принципалов
,
где служба
/имяхоста
@ОБЛАСТЬ
имя_хоста
— полное имя
хоста.
Действительные дескрипторы служб:
Дескриптор службы |
Служба |
---|---|
|
Telnet, RSH, SSH |
|
NFSv4 (с поддержкой Kerberos) |
|
HTTP (с аутентификацией Kerberos) |
|
IMAP |
|
POP3 |
|
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.
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 как часть аутентификации
пользователя. Это совсем другой случай, который будет описан ниже.
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
в командной строке.
Дополнительная информация | |
---|---|
В файле
|
при использовании 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
.
Сейчас Вы сможете автоматически использовать утилиты, например 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, а не с каким-либо фиктивной службой, предложенной Вам злоумышленником.
Теперь мы разрешим каждому пользователю изменять атрибут консоли в
своей записи 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 на отличительное имя пользователя.
Официальный сайт 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) также предлагает широкий спектр информации.