Модуль 4. Работа службы каталога ALD Pro
Введение
В этом модуле мы рассмотрим общую архитектуру службы каталога ALD Pro, устройство LDAP-каталога, функции KDC-сервера и даже узнаем, зачем на контроллерах домена FreeIPA устанавливается Samba.
Крайне полезными будут практические материалы по управлению компонентами системы и информация про идентификаторы безопасности.
Архитектура службы каталога ALD Pro
Система ALD Pro (Astra Linux Directory Pro) — это набор сетевых служб сервера Astra Linux для организации централизованного управления ИТ-инфраструктурой на базе широко известных компонентов с открытым исходным кодом.
В основе системы лежит служба каталога FreeIPA, которая централизованно хранит информацию о пользователях, компьютерах и сервисных учётных записях. Доступ к этим данным осуществляется через открытые протоколы.
Система ALD Pro отвечает за работу службы NTP в домене и расширяет возможности службы каталога FreeIPA благодаря интеграции с системой конфигурирования SaltStack. Эта интеграция позволяет централизованно настраивать рабочие станции в домене, применяя концепцию групповых политик.
Мы уже разобрали работу служб NTP, DNS и портала управления ALD Pro. Сегодня мы продолжим знакомство с архитектурой и рассмотрим взаимосвязь таких компонентов, как 389 Directory Server, MIT Kerberos, Samba. Общая архитектура решения представлена на рис. 235.

рис. 235 Архитектура службы каталога
Ключевым компонентом FreeIPA является LDAP-каталог 389 Directory Server, который представляет собой специализированную нереляционную систему хранения и управления данными. Чтобы интегрировать компоненты системы с LDAP-каталогом разработчики FreeIPA создали порядка 15 специальных плагинов, например, для управления топологией, динамического назначения номеров идентификаторов безопасности и др.
Структура LDAP-каталога подобна файловой системе, где папкам соответствуют записи, а файлам – атрибуты записей. Подробнее об этом мы расскажем в одном из следующих разделов.
За работу каталога могут отвечать десятки и даже сотни серверов, которые объединяются в кластер, обеспечивающий устойчивость к разделению (англ. Partition Tolerance) и согласованность данных в конечном итоге (анг. Eventually Consistent) по теореме CAP.
Внешние клиенты, например, агент групповых политик Standalone Salt-minion, взаимодействуют с контроллерами домена по протоколу LDAP на портах 389/TCP и 636/TCP (LDAP + TLS). Локальные компоненты, такие как KDC, DNS, Samba, обращаются к базе LDAP через специальные плагины по LDAPI, используя unix-сокет (англ. LDAP over IPC, LDAPI), что повышает безопасность и сокращает накладные расходы на сетевой стек.
Сервер FreeIPA
Название службы каталога FreeIPA является акронимом от Free Identity, Policy and Audit, что указывает на основные приоритеты в развитии продукта — централизованное управление идентификацией, политиками и аудитом.
Также как в 90-е годы Microsoft заимствовала из UNIX-мира технологии DNS, Kerberos, LDAP для построения своего Windows-домена, команда разработчиков проекта FreeIPA ставит сейчас своей целью заимствовать у Microsoft лучшие бизнес-практики для построения Linux-домена. Именно по этой причине система унаследовала от Active Directory многие концепции, такие как:
Домен — совокупность пользователей, компьютеров и других сетевых объектов, информация о которых хранится в общей базе данных.
Контроллер домена — сервер, обеспечивающий работу распределенной базы данных домена (службы каталога) и предоставляющий всем участникам сервисы аутентификации и авторизации.
Доменный пользователь — пользователь, которому создана учетная запись в домене, с помощью которой он может проходить аутентификацию на контроллерах домена и получать авторизованный доступ при обращении к доменным сервисам.
Доменный компьютер — компьютер, которому создана учетная запись в домене, с помощью которой он может получать информацию из LDAP-каталога и проверять аутентичность пользователей по протоколу Kerberos V5.
Керберизированный сервис — сетевое приложение, которому создана учетная запись в домене, которую он может использовать как компьютер для получения информации из LDAP-каталога и проверки аутентичности пользователей по протоколу Kerberos V5.
Вместе с тем некоторые функции реализованы иначе, чем в AD, или даже не планируются к реализации. Например, в части централизованного управления рабочими станциями FreeIPA предлагает хороший базовый набор политик безопасности, но все остальные функции предлагает решать с помощью отдельных систем конфигурирования. Поэтому в продукте ALD Pro эта потребность закрыта интеграцией с одной из лучших систем управления конфигурациями SaltStack.
В состав компонентов FreeIPA входят:
Сервер LDAP на базе 389 Directory Server.
Служба для управления DNS на базе BIND9.
Единая точка входа по протоколу Kerberos V5 на базе MIT Kerberos KDC.
Дополнительно с помощью Samba AD может быть активирована интеграция с Active Directory (в ALD Pro компонент устанавливается по умолчанию).
Дополнительно с помощью DogTag может быть реализована работа с сертификатами (в ALD Pro планируется реализация внешних плагинов к PKI Proxy для интеграции со сторонними удостоверяющими центрами).
Управление сервером FreeIPA
Для управления службой каталога можно использовать различные инструменты, которые взаимодействуют с ней через программные интерфейсы JSON-RPC или XML-RPC, которыми она оборачивает свои компоненты, или напрямую через LDAP. Основными клиентскими интерфейсами являются:
Веб-портал, который доступен по адресу
https://<fqdn имя контроллера>/ipa/ui/
и работает через JSON-RPC.Вы можете обращаться к этому инструменту для настройки тех функций, которые не заявлены в продукте ALD Pro, но поддерживаются компонентом. Например, для настройки правил автоматического монтирования сетевых дисков.
Утилита
ipactl
, используется для управления службами FreeIPA, их корректного включения, выключения и перезапуска.Утилита командной строки
ipa
, которая установлена на всех доменных компьютерах и работает через JSON-RPC. Утилита имеет собственный механизм автоматического обнаружения контроллеров и поддерживает прозрачную Kerberos-аутентификацию.Дополнительные утилиты, такие как
ipa-backup
,ipa-restore
,ipa-getkeytab
и др.
Веб-интерфейс управления
Мы не будем подробно останавливаться на веб-интерфейсе и скажем только, что он есть, и вы можете получить к нему доступ, например, по адресу https://dc-1.ald.company.lan/ipa/ui.

рис. 236 Интерфейс веб-портала FreeIPA
Для входа на портал по умолчанию используется прозрачная Kerberos-аутентификация, поэтому, если у вас в связке ключей есть действующий TGT-билет, то вы попадете в систему без необходимости ввода пароля.
В горизонтальном меню представлено пять вкладок:
Идентификация – управление объектами каталога (пользователи, узлы, службы, группы).
Политика – политики паролей, билетов Kerberos, HBAC-правила, SUDO-правила, Parsec (интеграция с функциями мандатного контроля от Astra Linux).
Аутентификация – управление аутентификацией через серверы RADIUS, одноразовые ключи и сертификаты.
Сетевые службы – управление службой DNS и автомонтированием папок.
IPA-сервер – управление топологией репликации, настройка ролей, диапазонов идентификаторов и др. параметров.
Утилита ipactl
Все компоненты контроллера домена представляют собой службы, которыми можно управлять через утилиту systemctl
. Например, вы можете перезапустить веб-сервер командой systemctl restart apache2.service
. Но, учитывая, что запуск и выключение служб требуется выполнять в определенном порядке, была разработана специальная утилита ipactl
, которая позволяет управлять всеми этими службами сразу.
Основные команды утилиты:
Команда
ipactl start
– запуск.Команда
ipactl stop
– остановка.Команда
ipactl restart
– перезапуск.Команда
ipactl status
– вывод статуса.
Для выполнения команд нужно обладать привилегиями суперпользователя, поэтому добавляйте к ним sudo, например:
sudo ipactl status
Результат выполнения команды:
admin@dc-1:~$ sudo ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
named Service: RUNNING
httpd Service: RUNNING
ipa-custodia Service: RUNNING
smb Service: RUNNING
winbind Service: RUNNING
ipa-otpd Service: RUNNING
ipa-dnskeysyncd Service: RUNNING
ipa: INFO: The ipactl command was successful
Утилита ipa
Утилита ipa
написана на языке Python и входит в состав пакета freeipa-client, который устанавливается на всех компьютерах в домене. Для ее использования ничего дополнительно устанавливать не требуется.
Для взаимодействия с сервером утилита отправляет запросы по протоколу JSON-RPC. Аутентификация выполняется по протоколу Kerberos V5 с использованием билетов из связки ключей текущего пользователя.
Чтобы проверить, от имени какого пользователя выполняются запросы на сервере, можно использовать команду ipa user-find
с параметром --whoami
. После выполнения запроса в связке ключей должен появиться билет на доступ к HTTP-службе того контроллера, через который был обработан запрос.
ipa user-find --whoami
Результат выполнения команды:
admin@dc-1:~$ ipa user-find --whoami
---------------------
найден 1 пользователь
---------------------
Имя учётной записи пользователя: admin
Фамилия: Administrator
Домашний каталог: /home/admin
Оболочка входа: /bin/bash
Псевдоним учётной записи: admin@ALD.COMPANY.LAN, root@ALD.COMPANY.LAN
UID: 491200000
ID группы: 491200000
Учётная запись отключена: False
---------------------------------
Количество возвращённых записей 1
---------------------------------
Параметры для бэкенда и для клиентской части определяются в общем конфигурационном файле /etc/ipa/default.conf
. На контроллере домена содержимое файла имеет следующий вид:
admin@dc-1:~$ cat /etc/ipa/default.conf
[global]
host = dc-1.ald.company.lan
basedn = dc=ald,dc=company,dc=lan
realm = ALD.COMPANY.LAN
domain = ald.company.lan
xmlrpc_uri = https://dc-1.ald.company.lan/ipa/xml
ldap_uri = ldapi://%2Frun%2Fslapd-ALD-COMPANY-LAN.socket
mode = production
enable_ra = False
ra_plugin = None
На обычном доменном компьютере этот файл выглядит немного иначе:
admin@pc-1:~$ cat /etc/ipa/default.conf
[global]
basedn = dc=ald,dc=company,dc=lan
realm = ALD.COMPANY.LAN
domain = ald.company.lan
server = dc-1.ald.company.lan
host = pc-1.ald.company.lan
xmlrpc_uri = https://dc-1.ald.company.lan/ipa/xml
enable_ra = False
Параметры, актуальные больше для клиента:
xmlrpc_uri — адрес сервера FreeIPA, к которому должен подключаться клиент для взаимодействия с доменом. По умолчанию в параметрах
xmlrpc_uri
иserver
будет указан адрес того контроллера, через который компьютер был присоединен к домену.Этот адрес используется как утилитой
ipa
, так и дополнительными инструментами, например, утилитойipa-getcert
и др. Обратите также внимание, что современные версии клиентских приложений используют JSON-RPC, поэтому заменяют в адресе значение/ipa/xml
на/ipa/json
.Если параметр
xmlrpc_uri
не задан, то клиент попытается сформировать URI-адрес, используя значение параметраserver
.server — полное имя (FQDN) сервера FreeIPA для взаимодействия клиента через XML-RPC. Этот параметр считается устаревшим и используется, только если не задан параметр
xmlrpc_uri
.domain — полное имя домена для автоматического обнаружения активного контроллера по SRV-записям вида
_ldap._tcp.ald.company.lan
. Клиент переходит на механизм автоматического обнаружения сервисов, только если параметрыxmlrpc_uri
иserver
не будут заданы явным образом.Если параметр
domain
не задан, то клиент попытается взять вместо него значение параметраrealm
в нижнем регистре символов.enable_ra — указывает, действует ли центр сертификации (англ. Certification Authority, CA) в качестве агента центра регистрации (англ. Registration Authority), как в случае интеграции с DogTag. В продукте ALD Pro центр сертификации DogTag не используется, поэтому параметр имеет значение
False
.
Параметры, актуальные больше для сервера:
host — имя хоста, которое используется при формировании URL-адресов.
realm — область Kerberos, которая используется, например, для формирования имени службы
dirsrv@ALD-COMPANY-LAN
. Параметр критичен для сервера, а на клиенте значениеrealm
может быть использовано вместоdomain
, если этот параметр не будет задан явным образом.ldap_uri — адрес LDAP-сервера, который используется бэкендом API, поэтому данная настройка задается только на контроллерах домена. По умолчанию бэкенд использует протокол LDAPI для обращения к серверу через UNIX-сокет.
basedn — отличительное имя (DN) базовой записи для поиска записей в LDAP-каталоге. Если параметр не задан, то
basedn
формируется по значению параметраdomain
. Параметр критичен для сервера, а на клиенте используется, например, утилитойipa-client-automount
.mode — определяет режим работы сервера, поддерживаются значения
production
иdevelopment
. В продуктивном режиме, например, для повышения производительности не выполняются некоторые дополнительные самопроверки.ra_plugin — определяет название плагина для взаимодействия бэкенда с центром регистрации (англ. Registration Authority), как в случае интеграции с DogTag. В продукте ALD Pro центр сертификации DogTag не используется, поэтому параметр имеет значение
None
.
Как вы могли заметить, для обеспечения быстрой работы и высокой отказоустойчивости утилита ipa
использует довольно сложный порядок выбора активного сервера FreeIPA:
В первую очередь утилита
ipa
проверяет доступность того сервера, который указан в параметреxmlrpc_uri
.Если параметр
xmlrpc_uri
не задан, то утилита формирует URI по значению параметраserver
и проверяет доступность API по этому адресу.Если параметр
server
не задан, то утилита выполняет автоматическое обнаружение сервера через DNS по SRV-записям вида_ldap._tcp.<полное имя домена>
, используя в качестве полного имени домена значение параметраdomain
.Если параметр
domain
не задан, то вместо него утилита попробует использовать значениеrealm
в нижнем регистре символов.
Доступность сервера FreeIPA можно проверить командой ping
. С помощью ключа -d
можно запросить вывод дополнительной отладочной информации:
ipa -d ping
Результат выполнения команды:
admin@dc-1:~$ ipa -d ping
...
ipa: DEBUG: importing plugin module ipaclient.plugins.vault
ipa: DEBUG: failed to find session_cookie in persistent storage for principal 'admin@ALD.COMPANY.LAN'
ipa: DEBUG: trying https://dc-1.ald.company.lan/ipa/json
ipa: DEBUG: New HTTP connection (dc-1.ald.company.lan)
ipa: DEBUG: received Set-Cookie (<class 'list'>)'['ipa_session=MagBearerToken=9Q6FI...ZMCHCKsExQ%3d%3d;path=/ipa;httponly;secure;']'
ipa: DEBUG: storing cookie 'ipa_session=MagBearerToken=9Q6FINpIhPV...MCHCKsExQ%3d%3d;' for principal admin@ALD.COMPANY.LAN
ipa: DEBUG: Created connection context.rpcclient_140561608787896
ipa: DEBUG: raw: ping(version='2.239')
ipa: DEBUG: ping(version='2.239')
ipa: DEBUG: [try 1]: Forwarding 'ping/1' to json server 'https://dc-1.ald.company.lan/ipa/json'
ipa: DEBUG: HTTP connection keep-alive (dc-1.ald.company.lan)
ipa: DEBUG: received Set-Cookie (<class 'list'>)'['ipa_session=MagBearerToken=0r2cXXlnOKMtVYcu....%3d%3d;path=/ipa;httponly;secure;']'
ipa: DEBUG: storing cookie 'ipa_session=MagBearerToken=0r2...Q%3d%3d;' for principal admin@ALD.COMPANY.LAN
ipa: DEBUG: Destroyed connection context.rpcclient_140561608787896
--------------------------------------------
IPA server version 4.8.10. API version 2.239
--------------------------------------------
Прокомментируем некоторые строки:
ipa: DEBUG — это отладочные данные, из которых можно извлечь много полезной информации о порядке обработки запроса;
ipa: DEBUG: trying https://dc-1.ald.company.lan/ipa/json — указывает, на какой URL-адрес был направлен текущий запрос;
ipa: DEBUG: raw: ping(version=“2.239“) — указывает используемую версию API и выполняемую команду.
Для получения расширенной информации по командам утилиты и их параметрам можно воспользоваться командой ipa help topics
. Для выхода из справки нажмите клавишу q, как при работе с утилитой less
.
ipa help topics
Результат выполнения команды:
admin@dc-1:~$ ipa help topics
dnarange dnarange
dns Система доменных имён (DNS)
domainlevel Повысить уровень домена IPA.
group Groups of users
hbac Команды управления доступом на основе узла
hbactest Simulate use of Host-based access controls
host Узлы/Компьютеры
hostgroup Groups of hosts.
idrange Диапазоны идентификаторов
...
Чтобы просмотреть справку по управлению пользователями, введите команду:
ipa help user
Результат выполнения команды:
admin@dc-1:~$ ipa help user
Пользователи
Управление записями пользователей. Все пользователи являются POSIX-пользователями.
IPA поддерживает широкий спектр форматов имён пользователей, но следует учитывать те ограничения, которые могут существовать в конкретной среде.
...
Утилита IPA имеет большое количество команд. В рамках модуля мы рассмотрим только управление пользователями, см. табл. 15, но вы можете обратиться также к более полному курсу по автоматизации средствами утилиты ipa.
Команда |
Выполняемое действие |
---|---|
|
Добавить нового пользователя. Если вы хотите добавить нового «неподтвержденного» пользователя, воспользуйтесь командой |
|
Отметить в учетной записи, кто является руководителем этого сотрудника. |
|
Добавить новый псевдоним Kerberos к учетной записи пользователя. |
|
Удалить пользователя. По умолчанию используется |
|
Деактивировать учетную запись пользователя. |
|
Активировать учетную запись пользователя. |
|
Выполнить поиск учетных записей пользователей. |
|
Изменить учетную запись пользователя. |
|
Удалить отметку о руководителе сотрудника. |
|
Удалить псевдоним Kerberos учетной записи. |
|
Показать сведения о пользователе. |
|
Переместить удаленную запись в список неподтвержденных пользователей. |
|
Состояние блокировки учетной записи пользователя. |
|
Восстановить удаленную учетную запись пользователя из корзины. |
|
Разблокировать учетную запись пользователя. |
|
Установить новый пароль. |
Поиск пользователей (ipa user-find)
Для поиска пользователей в каталоге используется команда ipa user-find
, которая выведет список записей по заданным критериям. Синтаксис команды:
ipa [global-options] user-find [CRITERIA] [options]
Где:
global-options
— глобальные параметры, описание которых можно просмотреть командойipa -h
, например, ключ-d
позволяет включить вывод сообщений для отладки.CRITERIA
— критерий поиска по атрибутамuid
,givenName
,sn
,telephoneNumber
,ou
,title
. Допускает указывать не только полное значение, но и часть подстроки.options
— дополнительные параметры фильтрации, см. табл. 16.
Команда |
Выполняемое действие |
---|---|
|
Поиск по полю «Логин», только точное совпадение |
|
Поиск по полю «Имя», только точное совпадение |
|
Поиск по полю «Фамилия», только точное совпадение |
|
Поиск по полю «Полное имя» (common name), только точное совпадение |
|
Поиск по полю «Отображаемое имя», только точное совпадение |
|
Поиск по полю «Отчество», только точное совпадение |
|
Поиск по полю «Инициалы», только точное совпадение |
|
Поиск по полю «Домашний каталог», только точное совпадение |
|
Поиск по полю GECOS, только точное совпадение |
|
Поиск по полю «Оболочка входа», только точное совпадение |
|
Поиск по полю «Псевдоним учётной записи», только точное совпадение |
|
Не работает в версии 4.8.10, поэтому для поиска используйте |
|
Не работает в версии 4.8.10, поэтому для поиска используйте |
|
Поиск по полю «Адрес электронной почты», только точное совпадение |
|
Поиск по полю «ID пользователя», только точное совпадение |
|
Поиск по полю «ID группы», только точное совпадение |
|
Поиск по полю «Адрес», только точное совпадение |
|
Поиск по полю «Город», только точное совпадение |
|
Поиск по полю «Область/республика», только точное совпадение |
|
Поиск по полю «Индекс», только точное совпадение |
|
Поиск по полю «Номер телефона», только точное совпадение |
|
Поиск по полю «Номер мобильного телефона», только точное совпадение |
|
Поиск по полю «Номер пейджера», только точное совпадение |
|
Поиск по полю «Номер факса», только точное совпадение |
|
Поиск по полю «Отдел», только точное совпадение |
|
Поиск по полю «Должность», только точное совпадение |
|
Поиск по полю «Руководитель», только точное совпадение |
|
Поиск по полю «Номер автомобиля», только точное совпадение |
|
Поиск по полю «Категория пользователей», только точное совпадение |
|
Поиск по полю «Номер отдела», только точное совпадение |
|
Поиск по полю «Номер сотрудника», только точное совпадение |
|
Поиск по полю «Тип сотрудника», только точное совпадение |
|
Поиск по полю «Страна», только точное совпадение |
|
Поиск по полю «Подразделение» |
|
Поиск «деактивированных» учетных записей |
|
Поиск пользователей в корзине |
|
Ограничение времени поиска в секундах («0» — отсутствие ограничения) |
|
Максимальное количество возвращенных записей («0» — отсутствие ограничения) |
|
Показать запись пользователя для текущей учетной записи Kerberos |
|
Получить и вывести все атрибуты, возвращаемые сервером |
|
Вывести записи в том виде, в котором они хранятся на сервере |
|
Вывести только первичный ключ login |
|
Поиск пользователей, находящихся в искомой группе |
|
Поиск пользователей, не находящихся в искомой группе |
|
Поиск пользователей, имеющих искомую роль |
|
Поиск пользователей, не имеющих искомую роль |
Запросы к серверу можно отследить в журнале доступа командой sudo tail -f /var/log/dirsrv/slapd-ALD-COMPANY-LAN/access
, см. рис. 237.

рис. 237 Проверка запроса на поиск в LDAP-каталоге по журналу доступа
Давайте запросим информацию о пользователе с логином admin. Чтобы можно было использовать вывод утилиты ipa
, в скриптах автоматизации можно добавить ключ --raw
. В этом случае вы получите данные в формате LDIF (от англ. LDAP, Data Interchange Format — формат представления записей службы каталога или их изменений в текстовой форме):
admin@dc-1:~$ ipa user-find --all --raw --login admin
---------------------
найден 1 пользователь
---------------------
dn: uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
uid: admin
sn: Administrator
cn: Administrator
homedirectory: /home/admin
gecos: Administrator
loginshell: /bin/bash
krbprincipalname: admin@ALD.COMPANY.LAN
krbprincipalname: root@ALD.COMPANY.LAN
uidnumber: 296400000
gidnumber: 296400000
x-ald-user-mic-level: 63
nsaccountlock: FALSE
rbtadp: ou=ald.company.lan,cn=orgunits,cn=accounts,dc=ald,dc=company,dc=lan
rbtaou: ald.company.lan
ipaNTSecurityIdentifier: S-1-5-21-2487214781-2721300798-1427603078-500
...
---------------------------------
Количество возвращённых записей 1
---------------------------------
Удалить поясняющие записи и лишние пробелы можно командами grep
и sed
:
ipa user-find --all --raw --login admin \
| grep -E '(^\s\s|^$)' \
| sed 's/^\s\s//g' \
| grep -iE '(^dn|^sn|^uid|nsaccountlock|^$)'
Где:
grep -E '(^\s\s|^$)'
— выбирает строки, начинающиеся с двух пробелов (\s символ пробела в регулярных выражениях) или пустые строки (^$).sed 's/^\s\s//g'
— заменяет двойной пробел в начале строки на пустой символ.grep -iE '(^dn|^sn|^uid|nsaccountlock|^$)
— выбирает несколько полей с помощью логического утвержденияdn ИЛИ sn ИЛИ uid ИЛИ nsaccountlock
. Обратите внимание, что в конце также выбираются и пустые строки^$
. Дело в том, что они нужны для разделения нескольких записей согласно спецификации формата LDIF.
Результат выполнения команды:
dn: uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
uid: admin
sn: Administrator
uidnumber: 491200000
nsaccountlock: FALSE
Чтобы не допустить высокой нагрузки на сервер, бэкенд IPA возвращает не более 100 записей, а на обработку запросов должно уходить не более 2 секунд. Если ваш запрос не уложится в эти ограничения, то вы получите ошибку. Текущие лимиты можно посмотреть с помощью команды ipa config-show
:
admin@dc-1:~$ ipa config-show
Максимальная длина имени пользователя: 32
Максимальная длина имени хоста: 64
Основа домашних каталогов: /home
Оболочка по умолчанию: /bin/bash
Группа пользователей по умолчанию: ipausers
Почтовый домен по умолчанию: ald.company.lan
Ограничение времени поиска: 2
Ограничение размера поиска: 100
...
Изменить конфигурацию можно с портала FreeIPA или из командной строки:
admin@dc-1:~$ ipa config-mod --searchrecordslimit=500 --searchtimelimit=5
Максимальная длина имени пользователя: 32
Максимальная длина имени хоста: 64
Основа домашних каталогов: /home
Оболочка по умолчанию: /bin/bash
Группа пользователей по умолчанию: ipausers
Почтовый домен по умолчанию: ald.company.lan
Ограничение времени поиска: 5
Ограничение размера поиска: 500
...
Детальный просмотр пользователя (ipa user-show)
Чтобы получить подробную информацию о пользователе, воспользуйтесь командой ipa user-show
. Например, чтобы получить информацию о пользователе petrov.av
выполните следующую команду:
admin@dc-1:~$ ipa user-show petrov.av
Имя учётной записи пользователя: petrov.av
Имя: Александр
Фамилия: Петров
Домашний каталог: /home/petrov.av
Оболочка входа: /bin/bash
Имя учётной записи: petrov.av@ALD.COMPANY.LAN
Псевдоним учётной записи: petrov.av@ALD.COMPANY.LAN
Адрес электронной почты: petrov.av@ald.company.lan
UID: 491200007
ID группы: 491200007
Учётная запись отключена: False
Link to department: ou=ald.company.lan,cn=orgunits,cn=accounts,dc=ald,dc=company,dc=lan
Link to head department: ald.company.lan
Пароль: True
Участник групп: ipausers
Indirect Member of role: ALDPRO - Organization units
Доступные ключи Kerberos: True
Выполняя команду ipa user-show
с ключами --rights
и --all
, вы можете увидеть свои права доступа (effective rights) на изменение атрибутов выбранного пользователя. Однако примите во внимание, что параметр --all
в этом случае обязателен, иначе вывод будет аналогичен команде ipa user-show
без ключей.
ipa user-show iivanov --rights --all
Результат команды:
admin@dc-1:~$ ipa user-show iivanov --rights --all
dn: uid=iivanov,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
Имя учётной записи пользователя: iivanov
Имя: Иван
Фамилия: Иванов
...
Indirect Member of role: ALDPRO - Organization units
Доступные ключи Kerberos: True
attributelevelrights: {'objectclass': 'rscwo', 'aci': 'rscwo', 'sn': 'rscwo', ... 'ipanthomedirectorydrive': 'rscwo', 'nsaccountlock': 'rscwo'}
ipantsecurityidentifier: S-1-5-21-3838112765-3762782768-2146355126-1008
ipauniqueid: 904f6e98-2caf-11f0-bbdb-08002725086e
...
Права пользователя отображены в области attributelevelrights. Описание возможных значений вы найдете в табл. 17
Разрешение |
Описание команды |
---|---|
r |
Право на чтение атрибута для пользователя, запустившего команду |
s |
Право на поиск по атрибуту для пользователя, запустившего команду |
w |
Право записи в атрибут для пользователя, запустившего команду |
o |
Право на удаление атрибута для пользователя, запустившего команду |
c |
Право на сравнение атрибутов для пользователя, запустившего команду |
W |
Право на запись для целевого пользователя, атрибуты которого просматриваются |
O |
Право на удаление для целевого пользователя, атрибуты которого просматриваются |
Создание пользователя (ipa user-add)
Для создания пользователя используется команда ipa user-add
с параметрами, см. табл. 18. Все доступные команды можно просмотреть в справке, вызвав команду:
admin@dc-1:~$ ipa help user-add
Атрибут |
Описание |
---|---|
|
Имя пользователя. По умолчанию не задано. |
|
Фамилия пользователя. По умолчанию не задана. |
|
Общее, распространенное имя. Если параметр не задан, автоматически формируется из имени и фамилии пользователя, например, Петр Иванов. |
|
Отображаемое имя. Если не задано, создается из имени и фамилии пользователя, например, Петр Иванов. |
|
Инициалы. Если не задано, определяется автоматически из имени и фамилии, например, П.И. |
|
Домашняя директория, по умолчанию |
|
Дополнительная информация о пользователе, которая может содержать номер телефона, домашний адрес, факс и др. |
|
Оболочка пользователя. Значение по умолчанию |
|
Уникальное имя пользователя, которое используется при аутентификации в домене. По умолчанию имеет значение |
|
Окончание срока действия Kerberos-записи. Задается в формате GeneralizedTime ASN.1. |
|
Окончание срока действия Kerberos-пароля. Задается в том же формате, что и principal-expiration. Рассчитывается автоматически в момент изменения пароля в соответствии с действующей политикой паролей. По умолчанию срок действия паролей составляет 90 дней. |
|
Электронная почта. По умолчанию равна |
|
Запросить пароль пользователя в момент создания учетной записи. |
|
Сгенерировать пароль автоматически. Требования к паролю задаются политикой паролей контроллера домена. Пароль будет выведен после успешного выполнения команды по созданию пользователя. |
|
Назначить пользователю конкретный номер uidNumber. По умолчанию генерируется автоматически DNA-плагином. |
|
Назначить пользователю конкретный номер первичной группы GidNumber. По умолчанию идентификатор первичной группы совпадает с идентификатором пользователя gidNumber=uidNumber. |
|
Улица. По умолчанию значение не задано. |
|
Город. По умолчанию значение не задано. |
|
Область. По умолчанию значение не задано. |
|
Почтовый индекс. По умолчанию значение не задано. |
|
Рабочий телефон. По умолчанию значение не задано. |
|
Мобильный телефон. По умолчанию значение не задано. |
|
Номер пейджера. По умолчанию значение не задано. |
|
Номер факса. По умолчанию значение не задано. |
|
Отдел. По умолчанию значение не задано. |
|
Должность. По умолчанию значение не задано. |
|
Руководитель. По умолчанию значение не задано. Параметр должен совпадать с логином существующей учетной записи другого пользователя. |
|
Номер водительского удостоверения. По умолчанию значение не задано. |
|
Публичный ключ ssh. Для подключения к хостам по ssh-ключу. По умолчанию значение не задано. |
|
Тип авторизации пользователя. По умолчанию — по паролю (password). |
|
Категория пользователя. Это поле может использоваться для автоматического назначения пользователю групп через механизм автоучастия (плагин automembership). По умолчанию значение не задано. |
|
Прокси-RADIUS-сервер. Для авторизации по RADIUS. По умолчанию значение не задано. |
|
Имя пользователя RADIUS. По умолчанию не задано. |
|
Служебная информация о департаменте. По умолчанию не задана. |
|
Служебная информация о пользователе. По умолчанию не задана. |
|
Служебная информация о пользователе. По умолчанию не задана. |
|
Предпочитаемый язык. Дополнительная информация о пользователе. По умолчанию значение не задано. |
|
Сертификат пользователя для двухфакторной аутентификации. По умолчанию значение не задано. |
|
Целое число для назначения минимального уровня конфиденциальности. По умолчанию равно 0. |
|
Целое число для назначения максимального уровня конфиденциальности. По умолчанию равно 0. |
|
Целое число, задающее маску уровней целостности. По умолчанию равно 0. |
|
Отчество пользователя. По умолчанию значение не задано. |
|
Фотография пользователя, можно загрузить через портал управления. По умолчанию значение не задано. |
|
Код страны по стандарту ISO 3166, например RU. По умолчанию значение не задано. |
|
Полный список адресов пользователя. Может содержать SMTP-, SIP-, X.500-адреса. Например, SMTP: ivanov@ald.company.lan. По умолчанию значение не задано. |
|
Задает подразделение, к которому прикреплен пользователь. По умолчанию значение будет равно ou={domain_sufix},cn=orgunits,cn=accounts,{root_suffix}, например, ou=ald.company.lan,cn=orgunits,cn=accounts,dc=ald,dc=company,dc=lan. |
|
Присвоить значение атрибуту пользователя в формате «атрибут=значение». Если атрибут многозначный, он будет перезаписан. |
|
Добавить атрибут для пользователя в формате «атрибут=значение». |
|
Не создавать первичную группу пользователя. По умолчанию при создании пользователя создается одноименная группа, gidNumber которой равен uidNumber пользователя. POSIX-пользователь не может быть создан без POSIX-группы. |
|
Показать все атрибуты пользователя. Используется при выводе данных. |
|
Показать всю информацию о пользователе. Используется при выводе данных. |
|
Не показывать группы, в которых состоит пользователь (атрибуты memberOf). |
Уточним также:
{root_suffix} — это корневой суффикс LDAP-каталога, состоит из нескольких компонентов доменного имени (Domain Component, DC), например,
dc=ald,dc=company,dc=lan
.{domain_suffix} — это суффикс домена в формате полного имени домена, например,
ald.company.lan
.
Рассмотрим создание пользователя на следующем примере. Для удобства каждый параметр будем задавать в отдельной строке с помощью символа переноса строки \
backslash:
ipa user-add isemenov \
--first="Иван" --last="Семенов" --middlename="Иванович" \
--cn="Семенов И.И." --displayname="Семенов И.И." --initials="И.И." \
--principal-expiration="$(date +'%Y%m%d000000Z' -d '+90 days')" \
--password-expiration="$(date +'%Y%m%d000000Z' -d '+90 days')" \
--random --email="semenov.ii@ald.company.lan" \
--addattr="memberof=cn=ipausers,cn=groups,cn=accounts,dc=ald,dc=company,dc=lan" \
--country="RU" --street="Ленина, 1" --city="Москва" --state="Московская область" \
--postalcode="101" --phone="+71234567890" --mobile="+71234567890" \
--fax="+71234567890" --orgunit="Отдел АСУ" --title="Инженер первой категории" \
--departmentnumber="Департамент 1" --employeenumber="1" --employeetype="Категория 1"
Результат выполнения команды:
--------------------------------
Добавлен пользователь "isemenov"
--------------------------------
Имя учётной записи пользователя: isemenov
Имя: Иван
Фамилия: Семенов
Полное имя: Семенов И.И.
Отображаемое имя: Семенов И.И.
Инициалы: И.И.
Домашний каталог: /home/isemenov
GECOS: Иван Семенов
Оболочка входа: /bin/bash
Имя учётной записи: isemenov@ALD.COMPANY.LAN
Псевдоним учётной записи: isemenov@ALD.COMPANY.LAN
Окончание действия учётной записи Kerberos: 20250807000000Z
Окончание действия пароля пользователя: 20250807000000Z
Адрес электронной почты: semenov.ii@ald.company.lan
Случайный пароль: 3Eg@Bx[G6m|aPP@KBgf3L9
UID: 491200012
ID группы: 491200012
Адрес: Ленина, 1
Город: Москва
Область/республика: Московская область
Индекс: 101
Номер телефона: +71234567890
Номер мобильного телефона: +71234567890
Номер факса: +71234567890
Отдел: Отдел АСУ
Должность: Инженер первой категории
Номер отдела: Департамент 1
Номер сотрудника: 1
Тип сотрудника: Категория 1
Минимальный уровень конфиденциальности: 0
Максимальный уровень конфиденциальности: 0
Учётная запись отключена: FALSE
nsuniqueid: 83778601-2cb011f0-81d3c33d-ecd7a769
Middle name: Иванович
Contry: RU
proxy addresses: SMTP:SEMENOV.II@ALD.COMPANY.LAN
Link to department: ou=ald.company.lan,cn=orgunits,cn=accounts,dc=ald,dc=company,dc=lan
Link to head department: ald.company.lan
Пароль: True
Участник групп: ipausers
Роли: ALDPRO - Organization units
Indirect Member of group: ipausers
Доступные ключи Kerberos: True
Обратите внимание на случайный пароль 3Eg@Bx[G6m|aPP@KBgf3L9
, который был сгенерирован системой автоматически. Он будет нужен пользователю для первого входа в систему.
Если вам нужно будет назначить пароль пользователя вручную, то вместо ключа --random
используйте ключ --password
. А если потребуется назначить пароль из командной строки, то воспользуйтесь перенаправлением вывода:
echo 'Pa$$w0rd' | ipa user-add apetrov \
--first="Александр" --last="Петров" --middlename="Владимирович" \
--password --password-expiration="$(date +'%Y%m%d000000Z' -d '+90 days')"
Результат выполнения команды:
-------------------------------
Добавлен пользователь "apetrov"
-------------------------------
Имя учётной записи пользователя: apetrov
Имя: Александр
Фамилия: Петров
Полное имя: Александр Петров
Отображаемое имя: Александр Петров
Инициалы: АП
Домашний каталог: /home/apetrov
GECOS: Александр Петров
Оболочка входа: /bin/bash
Имя учётной записи: apetrov@ALD.COMPANY.LAN
Псевдоним учётной записи: apetrov@ALD.COMPANY.LAN
Окончание действия пароля пользователя: 20250807000000Z
Адрес электронной почты: apetrov@ald.company.lan
UID: 491200013
ID группы: 491200013
Минимальный уровень конфиденциальности: 0
Максимальный уровень конфиденциальности: 0
Учётная запись отключена: FALSE
nsuniqueid: cafe1201-2cb011f0-81d3c33d-ecd7a769
Middle name: Владимирович
proxy addresses: SMTP:APETROV@ALD.COMPANY.LAN
Link to department: ou=ald.company.lan,cn=orgunits,cn=accounts,dc=ald,dc=company,dc=lan
Link to head department: ald.company.lan
Пароль: True
Участник групп: ipausers
Роли: ALDPRO - Organization units
Доступные ключи Kerberos: True
Изменение параметров пользователя (ipa user-mod)
Сотрудники меняют номера телефонов и фамилии, получают повышения в должности, поэтому вам потребуется менять отдельные атрибуты. Для этого вам потребуется команда ipa user-mod
. Параметры команды практически совпадают с параметрами команды ipa user-add
, см. табл. 18.
В качестве примера: если пользователь перевелся из московского офиса в казанский, вам потребуется изменить параметр department в свойствах пользователя. С точки зрения LDAP-каталога это равносильно изменению атрибута rbtadp. Создайте департамент ou=kazan на портале ALD Pro и выполните команду:
ipa user-mod apetrov \
--department="ou=kazan,ou=ald.company.lan,cn=orgunits,cn=accounts,dc=ald,dc=company,dc=lan"
Результат выполнения команды:
------------------------------
Изменён пользователь "apetrov"
------------------------------
Имя учётной записи пользователя: apetrov
Имя: Александр
Фамилия: Петров
...
Link to department: ou=kazan,ou=ald.company.lan,cn=orgunits,cn=accounts,dc=ald,dc=company,dc=lan
Link to head department: kazan
...
Пример изменения контактных данных пользователя:
ipa user-mod apetrov \
--phone "+71122334455" --email "apetrov@kaz.ald.company.lan"
Результат выполнения команды:
------------------------------
Изменён пользователь "apetrov"
------------------------------
Имя учётной записи пользователя: apetrov
Имя: Александр
Фамилия: Петров
...
Адрес электронной почты: apetrov@kaz.ald.company.lan
...
Номер телефона: +71122334455
...
Аналогичным образом можно изменить любые другие атрибуты пользователя.
Установка нового пароля (ipa passwd)
Пользователь может сменить себе пароль с помощью команды passwd без параметров:
admin@dc-1:~$ ipa passwd
Текущий пароль:
Новый пароль:
Введите Новый пароль ещё раз для проверки:
--------------------------------------
Изменён пароль "admin@ALD.COMPANY.LAN"
--------------------------------------
С помощью этой же команды администраторы могут назначить новый пароль любой другой учетной записи, если у них достаточно прав доступа:
admin@dc-1:~$ ipa passwd apetrov
Новый пароль:
Введите Новый пароль ещё раз для проверки:
-----------------------------------------
Изменён пароль "apetrov@ALD.COMPANY.LAN"
-----------------------------------------
Аналогичный результат можно получить командой ipa user-mod
с ключом --password
:
admin@dc-1:~$ ipa user-mod --password apetrov
Пароль:
Введите Пароль ещё раз для проверки:
--------------------------------
Изменён пользователь "apetrov"
--------------------------------
Имя учётной записи пользователя: apetrov
...
Если администратор воспользуется ключом --random
, то система автоматически сгенерирует и назначит новый пароль пользователю:
ipa user-mod --random apetrov
Результат выполнения команды:
---------------------------------
Изменён пользователь "apetrov"
---------------------------------
Имя учётной записи пользователя: apetrov
...
Случайный пароль: Vf}7-NsaWNnV.OlMl8]q^E
...
При назначении пользователю нового пароля из веб-интерфейса или из командной строки срок действия Kerberos-пароля автоматически проставляется равным текущей дате, поэтому пароль считается истекшим и требует изменения при следующем входе. Изменить значение этого атрибута можно, например, с помощью утилиты ipa
, используя ключ --password-expiration
:
ipa user-mod apetrov --password-expiration 20260101115110Z
Если пользователь сменит пароль самостоятельно, ему будет назначен срок действия в соответствии с установленными политиками (по умолчанию — 90 дней).
Активация/деактивация пользователя (ipa user-disable/user-enable)
С помощью команды ipa user-disable
администратор может деактивировать учетную запись, чтобы заблокировать пользователю доступ, не удаляя учетную запись из домена. В этом случае атрибуту nsAccountLock
устанавливается значение True
:
admin@dc-1:~$ ipa user-disable apetrov
--------------------------------------------------
Учётная запись пользователя "apetrov" отключена
--------------------------------------------------
Текущее состояние учетной записи можно посмотреть командой ipa user-show
:
admin@dc-1:~$ ipa user-show apetrov --all --raw | grep nsaccountlock
nsaccountlock: TRUE
Состояние блокировки показывает так же команда ipa user-status
, но ее лучше не использовать, т.к. она больше предназначена для получения информации об автоматической временной блокировки пользователя со всех контроллеров домена, что занимает значительно больше времени.
admin@dc-1:~$ ipa user-status apetrov
----------------------
Account disabled: True
----------------------
...
Деактивированный пользователь не сможет войти в операционную систему доменного компьютера, пока не будет активирован с помощью команды ipa user-enable
:
admin@dc-1:~$ ipa user-enable apetrov
-------------------------------------------------
Учётная запись пользователя "apetrov" включена
-------------------------------------------------
Снятие блокировки пользователя (ipa user-unlock)
Кроме активации/деактивации в домене есть еще автоматическая временная блокировка по количеству ошибок, которая позволяет исключить перебор паролей.
В соответствии с настройками по умолчанию, если пользователь в течение 1 минуты 6 раз подряд введет неправильно пароль, то его учетная запись будет автоматически заблокирована на следующие 10 минут. Указанные параметры можно изменить с помощью политик паролей.
Текущее состояние учетной записи можно узнать с помощью команды ipa user-status
. Следует учитывать, что количество неправильных попыток записывается в атрибуте krbLoginFailedCount
, который для повышения производительности исключен из репликации, поэтому бэкенд команды ipa user-status
для сбора необходимой информации опрашивает все контроллеры в домене, что может занять некоторое время:
admin@dc-1:~$ ipa user-status apetrov
-----------------------
Account disabled: False
-----------------------
Сервер: dc-1.ald.company.lan
Неудачные попытки входа: 6
Последняя успешная аутентификация: N/A
Последняя ошибка при аутентификации: 2025-04-04T09:15:18Z
Время сейчас: 2025-04-04T09:19:01Z
...
Сервер: dc-5.ald.company.lan
Неудачные попытки входа: 0
Последняя успешная аутентификация: N/A
Последняя ошибка при аутентификации: 2025-04-04T09:15:18Z
Время сейчас: 2025-04-04T09:19:01Z
---------------------------------
Количество возвращённых записей 5
---------------------------------
Можно увидеть, что число попыток на dc-1 равно 6. Поэтому пользователь не сможет пройти Kerberos-аутентификацию с помощью этого контроллера домена, но на работу других контроллеров домена эта блокировка никак не повлияет.
Чтобы разблокировать учетную запись пользователя, нужно воспользоваться командой ipa user-unlock
. В этом случае выполняется сброс счетчика krbLoginFailedCount
, а в атрибут krbLastAdminUnlock
записывается текущее время системы:
admin@dc-1:~$ ipa user-unlock apetrov
------------------------------------------
Учётная запись "apetrov" разблокирована
------------------------------------------
Для снятия блокировки бэкенд команды ipa user-unlock
обращается ко всем контроллерам в домене, поэтому выполнение команды может занять некоторое время.
Удаление пользователя (ipa user-del)
Удалить учетные записи пользователей из домена можно командой ipa user-del
. По умолчанию используется ключ --no-preserve
, поэтому запись удаляется безвозвратно. Если использовать ключ --preserve
, то запись будет перемещена в контейнер хранимых пользователей cn=deleted users,cn=accounts,cn=provisioning
.
admin@dc-1:~$ ipa user-del --preserve apetrov
--------------------------------
Удален пользователь "apetrov"
--------------------------------
В системе ALD Pro удаленные учетные записи можно будет найти в корзине, см. рис. 238, а в интерфейсе FreeIPA этот раздел называется «Хранимые пользователи».

рис. 238 Корзина с удаленными пользователями
Для поиска пользователей, помещенных в корзину, в команде ipa user-find
нужно использовать ключ --preserved true
:
admin@dc-1:~$ ipa user-find --preserved true
---------------------
найден 1 пользователь
---------------------
Имя учётной записи пользователя: apetrov
Имя: Александр
Фамилия: Петров
Домашний каталог: /home/apetrov
Оболочка входа: /bin/bash
Имя учётной записи: apetrov@ALD.COMPANY.LAN
Псевдоним учётной записи: apetrov@ALD.COMPANY.LAN
Адрес электронной почты: apetrov@kaz.ald.company.lan
UID: 491200013
ID группы: 491200013
Номер телефона: +71122334455
Учётная запись отключена: True
Хранимый пользователь: True
---------------------------------
Количество возвращённых записей 1
---------------------------------
Для восстановления удаленной учетной записи пользователя из корзины используйте команду ipa user-undel
:
admin@dc-1:~$ ipa user-undel apetrov
---------------------------------------------------------------
Учётная запись пользователя "apetrov" возвращена после удаления
---------------------------------------------------------------
Пользователи, находящиеся в корзине, блокируются автоматически, поэтому атрибут nsAccountLock
для этих учетных записей устанавливается равным True
. После восстановления учетной записи из корзины указанный атрибут также автоматически удаляется. Если на момент помещения в корзину учетная запись уже была заблокирована, то после восстановления такой записи она так и останется в заблокированном состоянии, для нее атрибут nsAccountLock
удаляться не будет.
Утилита ipa-getkeytab
Для аутентификации по протоколу Kerberos V5 система использует хеши паролей, которые называются также Kerberos-ключами. Для повышения совместимости клиент и сервер могут хранить сразу несколько разных хешей для одного и того же пароля и договариваться об использовании наиболее безопасного их них в момент аутентификации.
Внутри LDAP-каталога Kerberos-ключи хранятся в атрибуте krbPrincipalKey
, а на диске в keytab-файлах, которые называют также таблицами ключей (англ. Key Table). Следует понимать, что внутри одного keytab-файла может храниться сразу несколько ключей для одного и того же пароля, или несколько ключей для разных версий пароля одного и того же пользователя или даже несколько ключей для разных пользователей.
Чтобы сбросить пароль доменной учетной записи и выгрузить Kerberos-ключи в keytab-файл, можно воспользоваться утилитой ipa-getkeytab
. Содержимое keytab-файла представляет собой бинарные данные, посмотреть которые можно утилитой klist
.
Создадим в домене учетную запись для нового сервиса HTTP/pc-1.ald.company.lan и опробуем на нем работу этих утилит:
admin@dc-1:~$ sudo ipa service-add HTTP/pc-1.ald.company.lan
------------------------------------------------------------
Добавлена служба "HTTP/pc-1.ald.company.lan@ALD.COMPANY.LAN"
------------------------------------------------------------
Имя учётной записи: HTTP/pc-1.ald.company.lan@ALD.COMPANY.LAN
Псевдоним учётной записи: HTTP/pc-1.ald.company.lan@ALD.COMPANY.LAN
Managed by: pc-1.ald.company.lan
admin@dc-1:~$ sudo ipa-getkeytab -s dc-1.ald.company.lan \
> -p HTTP/pc-1.ald.company.lan -k /etc/http.keytab
Таблица ключей успешно получена и сохранена в: /etc/http.keytab
admin@dc-1:~$ sudo klist -ke /etc/http.keytab
Keytab name: FILE:/etc/http.keytab
KVNO Principal
---- --------------------------------------------------------------------------
1 HTTP/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes256-cts-hmac-sha1-96)
1 HTTP/pc-1.ald.company.lan@ALD.COMPANY.LAN (aes128-cts-hmac-sha1-96)
При вызове утилиты ipa-getkeytab
используются следующие ключи:
-s dc-1.ald.company.lan
— задает имя KDC-сервера, к которому следует отправить запрос.-p HTTP/pc-1.ald.company.lan
— определяет имя сервиса.-k /etc/http.keytab
— задает путь для сохранения keytab-файла.
При вызове утилиты klist
используются следующие ключи:
-k
— задает путь до keytab-файла, который нужно прочитать.-e
— указывает, что нужно отобразить ключи с использованным алгоритмом хеширования.
Получить keytab-файл можно как для сервиса, так и для учетной записи обычного пользователя. Следует только учитывать, что в момент выгрузки keytab-файла система генерирует новый пароль, но не отображает его на экране, поэтому аутентифицироваться такой пользователь после этого сможет только по keytab-файлу.
Создадим keytab-файл для пользователя iivanov
и пройдем аутентификацию в домене с помощью ключей из этого файла:
admin@dc-1:~$ sudo ipa-getkeytab -s dc-1.ald.company.lan \
> -p apetrov@ALD.COMPANY.LAN -k /home/admin/apetrov.keytab
Таблица ключей успешно получена и сохранена в: /home/admin/apetrov.keytab
admin@dc-1:~$ sudo kinit apetrov -kt /home/admin/apetrov.keytab
admin@dc-1:~$ sudo klist
Ticket cache: KEYRING:persistent:491200000:krb_ccache_9andJvL
Default principal: apetrov@ALD.COMPANY.LAN
Valid starting Expires Service principal
02.05.2025 11:51:35 03.05.2025 11:39:08 krbtgt/ALD.COMPANY.LAN@ALD.COMPANY.LAN
Утилиты ipa-backup и ipa-restore
Для резервного копирования и восстановления информации каталога предназначены утилиты ipa-backup
и ipa-restore
. Следует понимать, что на контроллере домена кроме службы каталога есть еще целый ряд сервисов, поэтому данная копия не позволит вам восстановить контроллер целиком, но зато вы можете застраховать себя от полной потери данных.
Следующей командой можно создать резервную копию каталога:
admin@dc-1:~$ sudo ipa-backup --data --online --verbose --log-file freeipa-backup.log
ipalib.sysrestore: DEBUG: Loading StateFile from '/var/lib/ipa/sysrestore/sysrestore.state'
ipalib.sysrestore: DEBUG: Loading StateFile from '/var/lib/ipa/sysrestore/sysrestore.state'
. . .
ipaserver.install.ipa_backup: INFO: Backing up userRoot in ALD-COMPANY-LAN to LDIF
ipaserver.install.ipa_backup: INFO: Waiting for LDIF to finish
ipaserver.install.ipa_backup: INFO: Backing up ALD-COMPANY-LAN
ipaserver.install.ipa_backup: INFO: Waiting for BAK to finish
ipapython.ipautil: DEBUG: Starting external process
ipapython.ipautil: DEBUG: args=['tar', '--xattrs', '--selinux', '-czf', '/var/lib/ipa/backup/ipa- data-2024-03-22-21-26-19/ipa-data.tar', '.']
ipapython.ipautil: DEBUG: Process finished, return code=0
ipapython.ipautil: DEBUG: stdout=
ipapython.ipautil: DEBUG: stderr=
ipaserver.install.ipa_backup: INFO: Backed up to /var/lib/ipa/backup/ipa-data-2024-01-22-21-26-19
ipapython.admintool: INFO: The ipa-backup command was successful
Где:
Ключ
--data
– указывает, что нужно выполнить резервную копию только данных. С помощью ключа--logs
можно включить еще журналы изменений. Если не определять никакой ключ, то в резервную копию будут включены все данные.Ключ
--online
– требует выполнить резервную копию без остановки служб.Ключ
--verbose
– указывает, что нужно вывести отладочную информацию.Ключ
--log-file
– задает имя файла, в который будет сохранен журнал о выполнении процедуры резервного копирования.
А вот так вы можете восстановить данные из копии:
admin@dc-1:~$ sudo ipa-restore --data --online --instance=ALD-COMPANY-LAN /var/lib/ipa/backup/ipa-data-2024-01-22-21-26-19
Directory Manager (existing master) password:
Preparing restore from /var/lib/ipa/backup/ipa-data-2024-01-22-21-26-19 on dc-1.ald.company.lan
Performing DATA restore from DATA backup
Temporary setting umask to 022
Restoring data will overwrite existing live data. Continue to restore? [no]: yes
Each master will individually need to be re-initialized or
re-created from this one. The replication agreements on
masters running IPA 3.1 or earlier will need to be manually
re-enabled. See the man page for details.
Disabling all replication.
Disabling replication agreement on dc-2.ald.company.lan to dc-1.ald.company.lan
Starting Directory Server
Restoring from userRoot in ALD-COMPANY-LAN
Waiting for LDIF to finish
Restoring umask to 18
The ipa-restore command was successful
Где:
Ключ
--data
– указывает, что требуется восстановить только данные.Ключ
--online
– требует выполнить восстановление без остановки служб.Ключ
--instance
– задает имя экземпляра службы каталога, т.к. на одном сервере их может быть несколько. Например, в ALD Pro реализован модуль глобального каталога, который представляет собой еще один экземпляр LDAP-каталога, который доступен по порту 3268/TCP.Глобальный каталог нужен для того, чтобы при работе в доверительных отношениях с MS AD вы могли из стандартных интерфейсов Windows назначать права доступа на объекты ALD Pro, выбирая их из списка. Без глобального каталога поиск по объектам доверенного домена работать не будет.
Однако при восстановлении каталога из резервной копии в домене из нескольких контроллеров вам потребуется сделать также полную реинициализацию остальных реплик, т.к. у восстановленного контроллера будет новое значение генератора CSN и он выпадет из инкрементальной репликации. Детали этой процедуры можно будет понять после подробного ознакомления с алгоритмом работы репликации, см. Модуль 7. Дополнительные подсистемы ALD Pro.
Сервер LDAP 389 Directory Server
Для распределенного хранения данных в домене используется LDAP-каталог 389 Directory Server (ранее Fedora Directory Server, а до этого Netscape Directory Server). Эта служба соответствует уровню предприятий и позволяет реплицировать данные на сотни серверов, обеспечивая сотни тысяч операций чтения/записи в секунду.
Служба 389 DS позволяет хранить в базе миллионы записей, имеет мощный механизм разграничения доступа вплоть до уровня отдельных атрибутов, поддерживает протокол LDAP v3, в том числе с шифрованием SSL/TLS и SASL (при выполнении Kerberos-аутентификации).
В качестве встроенной базы данных 389 DS использует очень популярную библиотеку BDB (Berkeley DB), но в предстоящих релизах ожидается его замена на LMDB (Lightning Memory-Mapped Database), что повысит производительность отдельных операций в несколько раз.
Каталог LDAP
Каталог - это специализированная иерархическая нереляционная база данных для хранения информации о людях, компьютерах, группах и других объектах.
Изначально по стандарту X.500 доступ к каталогам предполагался через компьютерную сеть OSI, а разработанный в дальнейшем облегченный протокол доступа к данным каталога (Lightweight Directory Access Protocol, LDAP) дал возможность взаимодействия с каталогами по сетям TCP/IP.
Функции LDAP-каталога на контроллере домена реализованы средствами 389 Directory Server, файлы которого вы найдете в папке /var/lib/dirsrv/slapd-ALD-COMPANY-LAN/db
. Информация каталога представлена в виде древовидной структуры, которую также называют Directory Information Tree или сокращенно DIT, см. рис. 239.

рис. 239 Структура каталога Directory Information Tree
Корень каталога называется Root DSE, где DSE означает Directory System Agent Specific Entry, то есть специализированная запись агента системы директорий. Эта запись не имеет родителя, и она описана в файле /etc/dirsrv/slapd-ALD-COMPANY-LAN/dse.ldif
, где slapd-ALD-COMPANY-LAN - это директория сервиса slapd
для домена ALD-COMPANY-LAN
.
Корень Root DSE является родителем для записей dc=ald,dc=company,dc=lan
и cn=changelog
, которые называют также базовыми записями, корневыми суффиксами или контекстами именования (от англ. base entry, root suffix, naming context). В контексте dc=ald,dc=company,dc=lan
хранятся все записи каталога, а в cn=changelog
— журнал изменений для работы плагина Retro Changelog Plugin. Все контексты, определенные в каталоге, указаны в операционном атрибуте namingContexts
записи Root DSE, однако спецификация LDAP позволяет также использовать служебные контексты. Например, в записи cn=config
представлены настройки каталога, а через запись cn=monitor
можно получить доступ к информации о состоянии сервера в режиме реального времени.
От корневого суффикса dc=ald,dc=company,dc=lan
ответвляются дочерние записи (от англ. entry), которые, в свою очередь, могут быть контейнерами для других записей, за счет чего и образуется древовидная структура. Таким образом, записи каталога можно сравнить с директориями файловой системы.
Записи каталога называют так же объектами или контейнерами. У каждого объекта есть имя, которое должно быть уникальным в пределах родительского контейнера, поэтому это имя называется относительно уникальным именем (англ. relative distinguished name или кратко RDN). Учетные записи пользователей, например, имеют имена uid=admin
, uid=ivan.kuznetsov
и т.д. Особенность имен записей в LDAP заключается в том, что они хранят не конкретные значения, а только ссылки на хранимые атрибуты записей, которые используются для идентификации записей. Например, для идентификации учетных записей пользователей используют атрибут uid
, для учетных записей компьютеров — fqdn
(от англ. fully qualified domain name, полное доменное имя хоста), а в именах контейнеров обычно присутствует cn
(от англ. common name, общее имя).
В приведенном примере RDN учетной записи доменного администратора uid=admin
состоит из названия атрибута uid
, после которого идет символ присвоения =
и далее значение атрибута admin
. Вся эта запись вместе называется определением значения атрибута (от англ. attribute value assertion, AVA). Обычно имена записей задаются значением одного атрибута, но могут использоваться и несколько, тогда в имени RDN эти определения AVA будут объединяться знаком сложения +
. Например, при конфликтах репликации запись переименовывается в формате nsuniqueid=0a950601...+uid=Ivan
.
Для идентификации записи в пределах всего каталога используют уникальное отличительное имя (англ. distinguished name или сокращенно DN). Отличительное имя представляет собой цепочку RDN, которые записывают через запятую слева направо, начиная с целевой записи и до корневого суффикса вверх по иерархии, см. рис. 240.
Если привести аналогию с объектами файловой системы, то RDN будет соответствовать относительному пути, а DN — полному абсолютному пути до объекта. И так же как на одном диске не может быть двух директорий с одинаковыми полными именами, в каталоге LDAP не может быть двух записей с одинаковыми DN. Описание формата DN можно найти в RFC 4514.

рис. 240 Пример формирования уникального отличительного имени записи DN
Запись каталога может хранить не только дочерние записи, но и набор атрибутов, описывающий свойства записи. Например, для учетной записи пользователя атрибутами могут быть Ф.И.О., должность, номер телефона и т.д. Продолжая аналогию с файловой системой, можно сказать, что запись соответствует папке на диске, а атрибут - файлу, поэтому внутри папки могут быть другие папки (записи), а файлы (атрибуты) являются конечными листьями в этом дереве.
Обычные атрибуты называются «хранимыми», но в LDAP-каталоге кроме них есть еще служебные «операционные» атрибуты, которые содержат вспомогательную информацию для обеспечения работы каталога и связи между записями. Например, чтобы не пересчитывать вручную количество дочерних записей, вы можете воспользоваться операционным атрибутом numSubordinates
, который кэширует для вас это значение.
Рассмотрим несколько интересных операционных атрибутов:
entrydn
илиdsEntryDN
— позволяют получить уникальное отличительное имя записи в секции атрибутов, что очень требуется иногда для подключения к каталогу внешних информационных систем. Например, сервису VK Почта для интеграции очень нужно видеть в атрибутах полное значение отличительного имени пользователя.nsUniqueId
иentryUUID
— определяют уникальный идентификатор записи в пределах домена. Для каталога 389 Directory Server, как потомка Netscape Directory Server (NS), нативным атрибутом являетсяnsUniqueId
, а дополнительный атрибутentryUUID
был добавлен упрощения миграции с OpenLDAP на 389 Directory Server после того, как два основных корпоративных дистрибутива Linux (SUSE и Red Hat) решили удалить OpenLDAP из своих репозиториев.entryid
иparentid
— хранят идентификатор текущей и родительской записи, который уникален для каждого экземпляра 389 Directory Server.entryusn
— номер обновления записи в последовательности изменений (англ. Update Sequence Number, USN), который уникален для каждого экземпляра 389 Directory Server.creatorsName
,modifiersName
,createTimestamp
иmodifyTimestamp
— хранят соответственно имена тех пользователей, которые создали и изменили запись в каталоге, а так же дату и время этих событий. Значения будут одинаковыми на всех серверах в домене.Обратите внимание, если вам потребуется забирать из каталога последние изменения простым LDAP-запросом, то правильно будет сортировать и фильтровать записи по атрибуту
entryusn
и не использоватьmodifyTimestamp
, т.к. изменения, сделанные на других серверах, будут реплицироваться с задержками.numSubordinates
— хранит текущее значение количества дочерних записей. Следует учитывать, что значение показывает общее количество всех записей, включая и скрытые операционные записи, отмеченные классомldapsubentry
.
Данные в LDAP-каталоге должны быть строго структурированы, поэтому при включенной проверке целостности новые атрибуты должны быть определены в схеме каталога заранее. Перечень атрибутов, доступных для конкретного объекта, определяется списком назначенных ему классов, см. атрибут objectClass
. Например, учетные записи пользователей могут иметь атрибуты uidNumber
и gidNumber
, так как им присвоен класс объектов posixAccount
, см. рис. 241.

рис. 241 Наличие атрибута gidNumber определяется классом объекта posixAccount
Всем объектам каталога прямо или через наследование назначен как минимум один класс top
, т.к. в нем описан атрибут objectClass
, с помощью которого работает механизм назначения классов. Но практической пользы от объектов с одним классом немного, поэтому обычно в каталоге у объектов два и более классов.
В качестве примера рассмотрим класс объектов posixGroup
, который определен в схеме следующим образом:
( 1.3.6.1.1.1.2.2 NAME 'posixGroup' DESC 'Standard LDAP objectclass' SUP top STRUCTURAL MUST ( cn $ gidNumber ) MAY ( userPassword $ memberUid $ description ) X-ORIGIN 'RFC 2307' )
Где:
1.3.6.1.1.1.2.2
– это идентификатор объекта (object id, OID). Глобальные идентификаторы присваиваются международными организациями (IANA, ISO, ITU-T, ANSI, BSI).Для расширения схемы в прикладных системах используется пространство номеров с префиксом «1.3.6.1.4.1.<X>», где <X> – это внутренний номер организации. Например, объекты РусБИТех-Астра имеют префикс «1.3.6.1.4.1.52616.*».
NAME '...'
– инструкция NAME задает имя класса.DESC '...'
– инструкция DESC задает описание класса.SUP '...'
– инструкция SUP указывает родительский класс. В приведенном примере наследование идет от классаtop
, поэтому объектам будет доступен его атрибутobjectClass
.STRUCTURAL
– инструкция указывает, что класс будет относиться к виду структурных. Существуют также абстрактные (ABSTRACT) и вспомогательные (AUXILIARY) классы.MUST
иMAY
– инструкции, которые позволяют задать списки обязательных и дополнительных атрибутов соответственно. Полный перечень атрибутов, доступных объекту, расширяется атрибутами, которые наследуются от всех родительских классов.X-ORIGIN '...'
– инструкция, которая позволяет задать комментарий с ссылкой на документацию, из которой можно почерпнуть дополнительную информацию об этом классе. В приведенном примере информацию следует искать в документе RFC 2307.
Обратите внимание на то, что один и тот же атрибут может быть использован в нескольких классах, поэтому пользователям можно задать значение gidNumber
, т.к. им назначен класс posixAccount
, и в то же время он может быть задан у групп, т.к. им назначен класс posixGroup
, см. рис. 242.

рис. 242 Использование атрибута gidNumber классами posixAccount и posixGroup
Теперь рассмотрите описание атрибута gidNumber
подробнее:
( 1.3.6.1.1.1.1.1 NAME 'gidNumber' DESC 'Standard LDAP attribute type' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE X-ORIGIN 'RFC 2307' )
Где:
1.3.6.1.1.1.1.1
– это уникальный идентификатор атрибута.NAME '...'
– инструкция NAME задает имя атрибута.DESC '...'
– инструкция DESC задает описание атрибута.SYNTAX '...'
– инструкция задает тип хранимого в атрибуте значения. В приведенном примере 1.3.6.1.4.1.1466.115.121.1.27 соответствует целым числам. Описание всех типов данных можно найти в RFC 4517.SINGLE-VALUE
– инструкция указывает, что атрибут может хранить только одно значение. Если этой инструкции не будет, то объектам можно будет присваивать несколько значений этого атрибута.X-ORIGIN '...'
– инструкция, которая позволяет задать комментарий со ссылкой на документацию.
Если вы хотите подробнее ознакомиться с доступными классами и атрибутами, то при обращении к каталогу по LDAP информацию можно получить из операционного DIT cn=schema. На диске эта информация хранится в директориях:
/usr/share/dirsrv/schema/
/etc/dirsrv/schema/
/usr/share/dirsrv/updates/
/etc/dirsrv/slapd-ALD-COMPANY-LAN/
Вот полная информация обо всех файлах 389 Directory Server на диске:
Папка
/usr/sbin/
содержит исполнимые файлы:Файл
/usr/sbin/ns-slapd
– исполнимый файл сервиса.Файл
/usr/sbin/dsctl
– утилита управления сервисом.Файл
/usr/sbin/dsсonf
– утилита настройки и мониторинга.
Папка
/usr/lib/systemd/system/
содержит файлы сервиса:Файл
/usr/lib/systemd/system/dirsrv.target
– это “целевой” файл, используемый для совместной работы со всеми экземплярами dirsrv.Файл
/usr/lib/systemd/system/dirsrv@<название-Экземпляра>.service
(если экземпляр только один, то имя сервиса будет dirsrv@.service).
Папка
/var/lock/dirsrv/slapd-<название-Экземпляра>/
содержит файлы блокировок базы данных.Папка
/var/lib/dirsrv/slapd-<название-Экземпляра>/`
содержит файлы резервных копий, базы данных, журналов изменений и LDIF-файлы:Папка
/var/lib/dirsrv/slapd-<название-Экземпляра>/bak/
содержит резервные копии LDAP-каталога, созданные командойdsconf -D "cn=Directory Manager" ldap://localhost backup create
.Папка
/var/lib/dirsrv/slapd-<название-Экземпляра>/db/
содержит базу данных каталога.Папка
/var/lib/dirsrv/slapd-<название-Экземпляра>/ldif/
содержит LDIF-файлы, которые создаются, например, при резервном копировании каталога командойsudo dsctl ALD-COMPANY-LAN db2ldif userRoot
.
Папка конфигураций
/etc/dirsrv/
содержит:Папка
/etc/dirsrv/config/
содержит конфигурационные файлы.Папка
/etc/dirsrv/schema/
содержит файлы файлы схемы LDAP-каталога.Папка
/etc/dirsrv/ssca/
содержит сертификаты и ключи самоподписанного центра сертификации (англ. Simple Self-Signed Certificate Authority, SSCA).Папка
/etc/dirsrv/slapd-<название-Экземпляра>/schema/
содержит файлы схемы LDAP-каталога для конкретного экземпляра сервера. В этом каталоге находится в том числе файл99user.ldif
с изменениями схемы каталога, которые вносятся через LDAP-запросы и реплицируются автоматически между всеми контроллерами в домене.
Папка
/usr/share/dirsrv/schema/
содержит схему каталога по умолчанию.
В нашем случае корневой суффикс каталога был задан как dc=ald,dc=company,dc=lan
, а название экземпляра, соответственно, ALD-COMPANY-LAN
. Рассмотрите самостоятельно содержимое папок /var/lib/dirsrv/slapd-ALD-COMPANY-LAN/
и /etc/dirsrv/slapd-ALD-COMPANY-LAN/
Управление LDAP-каталогом
Для управления каталогом по протоколу LDAP можно использовать различные инструменты:
Apache Directory Studio — графический инструмент, который позволяет просматривать и редактировать записи и атрибуты записей;
ldapsearch — утилита, которая позволяет просматривать и редактировать записи и атрибуты записей;
dsctl – утилита управления сервисом;
dsconf – утилита настройки и мониторинга.
Работа с каталогом из Apache Directory Studio
Для работы с LDAP-каталогом из графического интерфейса — просмотра структуры каталога, редактирования записей, импорта и экспорта данных — можно воспользоваться таким бесплатным инструментом, как Apache Directory Studio, см. рис. 243.

рис. 243 Интерфейс Apache Directory Studio
Загрузить приложение можно с официального сайта. На контроллерах запускать приложение можно будет сразу, а на клиентской машине потребуется установить виртуальную машину Java (англ. Java Runtime Environment, JRE).
Для установки Apache Directory Studio необходимо:
Получить актуальную ссылку на архив с программой на сайте разработчика и скачать этот архив на клиентскую виртуальную машину, например, с помощью утилиты
wget
.
wget https://dlcdn.apache.org/directory/studio/2.0.0.v20210717-M17/ApacheDirectoryStudio-2.0.0.v20210717-M17-linux.gtk.x86_64.tar.gz
Распаковать архив в текущий каталог:
tar -xvzf ApacheDirectoryStudio-2.0.0.v20210717-M17-linux.gtk.x86_64.tar.gz
Установите виртуальную машину Java:
sudo apt install default-jre
Для запуска Apache Directory Studio просто кликните дважды по исполняемому файлу программы в окне файлового менеджера или выполните в окне терминала следующую команду:
~/ApacheDirectoryStudio/ApacheDirectoryStudio
Настройка соединения
Чтобы подключиться к LDAP-каталогу, нужно создать новое подключение через меню рис. 244.
. Откроется окно для создания нового подключения, см.
рис. 244 Настройка нового LDAP-подключения
Важно
По умолчанию Apache Directory Studio предлагает создать незащищенное подключение на порт 389, что допустимо только при обращении к каталогу по localhost, т.е. приложение должно быть установлено непосредственно на контроллере домена, т.к. при подключении пароль будет передаваться в открытом виде.
Если вы подключаетесь к каталогу с другого компьютера в сети, обязательно используйте порт 636 и метод шифрования SSL, чтобы перехват пароля был невозможен.
Аутентификация по паролю называется также привязкой (от англ. bind), поэтому поле для ввода имени пользователя называется рис. 245. В этом поле можно указать как имя суперпользователя каталога cn=Directory Manager, так и полное отличительное имя пользователя, например, доменного администратора uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan.
, см.Перед закрытием окна проверьте настройку текущего подключения нажатием кнопки рис. 245.
, см.
рис. 245 Настройка аутентификации для нового LDAP-подключения
После добавления подключения новый сервер появится в списке
. Вы сможете подключиться к нему, кликнув дважды по строке с названием подключения. В зависимости от выбранной учетной записи у вас будут разные права на доступ к записям и атрибутам.Давайте разберем три типовых операции: просмотр и экспорт объектов каталога, просмотр схемы каталога.
Просмотр и экспорт объектов каталога
Вы можете просмотреть записи в дереве каталога, выбрав нужный RDN на вкладке рис. 246.
. Например, если вы выберите в дереве узел , то основные атрибуты этой записи отобразятся в центральном окне с заголовком , см.
рис. 246 Окно LDAP Browser
Если вы знаете полное имя записи, то сможете перейти к ней сразу из меню cn=Directory Manager
, то сможете таким образом открыть ветку с настройками сервера, которая по умолчанию скрыта.
Рассмотрим несколько полезных DN:
cn=users,cn=accounts,суффикс_домена
— содержит учетные записи пользователей домена. У каждого пользователя есть атрибутыuid
(логин),uidNumber
(идентификатор безопасности),gidNumber
(идентификатор безопасности первичной группы),userPassword
(хеш пароля для LDAP-аутентификации),krbPrincipalKey
(ключи для Kerberos-аутентификации),ipaNTHash
(хеш пароля для NTLM-аутентификации).cn=groups,cn=accounts,суффикс_домена
— содержит записи групп пользователей. Список участников группы задается множественным атрибутомmember
. В учетных записях пользователей эта информация кэшируется в атрибутеmemberof
, что позволяет существенно ускорить получение информации об участии пользователя в группах.В службе каталогов MS AD у пользователей тоже есть атрибут
memberof
для ускорения запросов, но он содержит только группы прямого участия, то есть не учитывает механизм наследования участия для вложенных групп. Полным аналогом будет атрибутtokenGroups
, который содержит идентификаторы SID всех групп, участником которых является пользователь прямо или опосредованно. Учтите только, что ни один из этих атрибутов не отображается на вкладке в окне свойств пользователя и вы не сможете увидеть атрибутtokenGroups
в Apache Directory Studio.cn=computers,cn=accounts,суффикс_домена
— содержит учетные записи компьютеров, которые используют атрибутkrbPrincipalKey
так же как пользователи для хранения Kerberos-ключей, а атрибутuserPassword
в качестве одноразового пароля для присоединения компьютеру к домену без использования учетной записи привилегированного пользователя домена.cn=hostgroups,cn=accounts,суффикс_домена
— содержит записи групп компьютеров, например, ipaservers.cn=orgunits,cn=accounts,суффикс_домена
— содержит записи структурных подразделений ALD Pro, ссылки на которые есть у пользователей, компьютеров и групп, см. атрибут rbtadp.cn=dns,суффикс_домена
— содержит записи службы доменных имен.
Используя Apache Directory Studio, вы можете также экспортировать объекты каталога, см. рис. 247:
Щелкните по RDN
в дереве правой кнопкой мыши.В контекстном меню выберите пункт
.В дополнительном меню выберите нужный формат —
.

рис. 247 Экспорт объектов в CSV
Просмотр схемы каталога
В программе Apache Directory Studio можно легко посмотреть структуру каталога, которую называют схемой. Выберите Root DSE в дереве LDAP Browser и выполните команду меню рис. 248:
, см.
рис. 248 Меню Open Schema Browser
По умолчанию в Schema Browser открывается страница для просмотра классов объектов (Object Classes). Вы можете делать поиск и просматривать детали (Details). Например, введите в фильтр «posix», и вы найдете обсуждаемые ранее классы posixAcccount
и posixGroup
, как показано на рисунке рис. 249:

рис. 249 Schema Browser и вкладка Object Classes
Для перехода к другим группам объектов используйте ярлычки в нижней части вкладки. Для просмотра атрибутов откройте страницу :menuselection:Attribute Types
. В этом окне можно искать по списку всех атрибутов и просматривать детали выбранного атрибута. Например, введите в поле фильтра «gid», и вы увидите несколько атрибутов, в именах которых содержится эта подстрока, см. рис. 250:

рис. 250 Schema Browser и вкладка Attribute Types
Утилиты ldap-utils
Для работы с LDAP-каталогом из командной строки используются утилиты пакета ldap-utils:
Утилита
ldapwhoami
— выполняет подключение к каталогу и возвращает имя текущего пользователя.Утилита
ldapsearch
— выполняет поиск по каталогу с указанными параметрами.Утилита
ldapadd
— позволяет создать новые записи в каталоге.Утилита
ldapdelete
— позволяет удалить записи из каталога.Утилита
ldapmodify
— позволяет изменить атрибуты существующей записи в каталоге.Утилита
ldapcompare
— позволяет сравнить текущее значение атрибута конкретной записи с желаемым значением и получить результат в формате TRUE/FALSE.Утилита
ldapexop
— позволяет выполнять расширенные операции, добавленные разработчиками конкретного LDAP-сервера. Расширенные операции подобны хранимым процедурам SQL и позволяют расширять возможности взаимодействия с сервером без внесения изменений в LDAP-протокол.Утилита
ldappasswd
— позволяет сбросить пароль для учетной записи.Утилита
ldapmodrdn
— позволяет переименовывать существующие объекты каталога.
Подключение к LDAP-каталогу
Подключение к LDAP-каталогу происходит в рамках каждого вызова указанных выше утилит. Вы можете задавать параметры подключения в явном виде либо полагаться на настройки по умолчанию, описанные в файле /etc/ldap/ldap.conf
.
admin@dc-1:~$ cat /etc/ldap/ldap.conf
...
TLS_CACERT /etc/ssl/certs/ca-certificates.crt
URI ldaps://dc-1.ald.company.lan
BASE dc=ald,dc=company,dc=lan
SASL_MECH GSSAPI
Где:
TLS_CACERT
— путь к сертификату для установления безопасного соединения по протоколу LDAPS или для включения шифрования STARTTLS внутри небезопасного соединения.URI
— адрес сервера для подключения по умолчанию.BASE
— отличительное имя базовой записи по умолчанию.SASL_MECH
— механизм для простого уровня аутентификации и безопасности (англ. Simple Authentication and Security Layer, SASL). По умолчанию используется .
При вводе компьютера в домен файл /etc/ldap/ldap.conf
настраивается автоматически. По умолчанию подключение будет выполняться по протоколу LDAPS с использованием Kerberos-аутентификации через общий программный интерфейс сервисов безопасности (англ. Generic Security Services API, GSSAPI). В качестве сервера для подключения будет использоваться тот контроллер, через который хост был введен в домен.
Удалите кэш из связки ключей и проверьте возможность подключения к каталогу командой ldapwhoami
:
admin@dc-1:~$ kdestroy
admin@dc-1:~$ ldapwhoami
SASL/GSSAPI authentication started
ldap_sasl_interactive_bind_s: Local error (-2)
additional info: SASL(-1): generic failure: GSSAPI Error: Unspecified GSS failure. Minor code may provide more information (No Kerberos credentials available (default cache: KEYRING:persistent:491200000))
Ошибка «No Kerberos credentials available» говорит о том, что вы не имеете Kerberos-билета в связке ключей. Выполните Kerberos-аутентификацию и попробуйте запустить команду ldapwhoami
еще раз:
admin@dc-1:~$ kinit admin
Password for admin@ALD.COMPANY.LAN:******
admin@dc-1:~$ ldapwhoami
SASL/GSSAPI authentication started
SASL username: admin@ALD.COMPANY.LAN
SASL SSF: 256
SASL data security layer installed.
dn: uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
Теперь у нас получилось выполнить запрос к LDAP-серверу, т.к. в связке ключей был валидный TGT-билет, и система смогла с его помощью успешно получить сервисный билет на доступ к LDAP-серверу. Проверить кэш можно командой klist
без параметров:
admin@dc-1:~$ klist
Ticket cache: KEYRING:persistent:491200000:krb_ccache_JxM2PBY
Default principal: admin@ALD.COMPANY.LAN
Valid starting Expires Service principal
02.05.2025 09:58:25 03.05.2025 09:58:01 ldap/dc-1.ald.company.lan@ALD.COMPANY.LAN
02.05.2025 09:58:08 03.05.2025 09:58:01 krbtgt/ALD.COMPANY.LAN@ALD.COMPANY.LAN
Как вы видите, в кэше появился билет ldap/dc-1.ald.company.lan
, поэтому вы можете обращаться к LDAP-каталогу с помощью утилит из пакета ldap-utils без необходимости ввода учетных данных.
При подключении к серверу вы можете переопределить любой из параметров по умолчанию, задав его в явном виде:
ldapwhoami -H ldap://dc-1.ald.company.lan -ZZ -x -W \
-D "uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan"
Где:
Ключ
-H
— позволяет указать хост для подключения и протокол в явном виде, например,ldaps://dc-1.ald.company.lan
.В качестве протокола можно использовать нешифрованный LDAP или шифрованный LDAPS. Вы можете выполнять подключение к LDAP-каталогу также через UNIX-сокет, если утилита запускается на том же сервере. Тогда нужно указать
ldapi://%2fvar%2frun%2fslapd-ALD-COMPANY-LAN.socket
.Ключ
-ZZ
— позволяет включить шифрование внутри небезопасного протокола LDAP. Устанавливает требование использовать только шифрованное соединение, поэтому если сервер не поддерживает TLS, то соединение будет разорвано.Есть еще ключ
-Z
, который означает необходимость отправки серверу запроса STARTTLS, но если сервер не поддерживает TLS, обмен продолжится по небезопасному протоколу.Рекомендуется использовать ключ
-ZZ
или явно указывать протокол LDAPS.Ключ
-x
— указывает на необходимость выполнить простую аутентификацию по логину/паролю вместо SASL.Ключ
-W
— указывает, что пароль должен быть предоставлен в интерактивном режиме (а если нужно передать пароль в параметре, то это можно сделать с помощью ключа-w
).Ключ
-D
— задает отличительное имя DN пользовательской записи, которую нужно использовать для аутентификации, например:для администратора домена
uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
;для суперпользователя каталога
cn=Directory Manager
.
Поиск по каталогу ldapsearch
Для поиска информации вы можете использовать утилиту ldapsearch, которая извлекает из каталога набор записей с указанными атрибутами в соответствии с заданными критериями фильтрации. Синтаксис команды в общем виде выглядит следующим образом:
ldapsearch [options] [filter [attributes…]]
Где:
options
— определяют параметры подключения, для простоты мы будем использовать параметры по умолчанию.filter
— задает точные критерии поиска записей.attributes
— список атрибутов, которые нужно извлечь из каталога.
Для примера напишем запрос, который будет выдавать список всех пользователей домена из записи cn=users
, которая, в свою очередь, является потомком записи cn=accounts
, и все они находятся в пространстве корневого суффикса dc=ald,dc=company,dc=lan
. Таким образом, полным уникальным именем записи, в которой хранятся пользователи, будет cn=users,cn=accounts,dc=ald,dc=company,dc=lan
.
Выполните поиск по каталогу с помощью команды ldapsearch
:
ldapsearch -Q -s sub -b "cn=users,cn=accounts,dc=ald,dc=company,dc=lan" \
'(uid=*)' uid givenName sn
Где:
Ключ
-Q
— включает тихий режим SASL, в котором не выводится информация о SASL-подключении. Режим полезен при автоматизации для того, чтобы исключить техническую информацию.Можно дополнительно указать ключ
-LLL
, который определяет формат вывода: первый ключ-L
ограничит формат до LDIFv1, второй отключит комментарии, а третий уберет вывод версии LDIF.Ключ
-s
— определяет область поиска (scope), параметр может принимать следующие значения:one
— поиск выполняется по дочерним записям на один уровень ниже в иерархии;sub
— поиск выполняется по всем дочерним записям (значение по умолчанию);children
— то же, что и sub, но ограничивает поиск только прямыми потомками базовой записи;base
— ограничивает поиск базовой записью, которая задана параметром-b
.
Ключ
-b
— задает базовую запись (base), которая будет использоваться в качестве начального узла для поиска по дереву.Параметр
'(uid=*)'
— определяет критерий поиска. В приведенном примере запрашиваются все записи, у которых задано значение атрибутаuid
. Фильтры и составные фильтры мы рассмотрим далее.Параметры
uid givenName sn
— определяют список атрибутов, которые нужно извлечь из каталога для найденных записей. Если этот список не задать явно, то по умолчанию будут извлечены все хранимые атрибуты, как если бы был указан символ'*'
. Чтобы извлечь все операционные атрибуты, нужно указать символ'+'
. Если вы хотите извлечь сразу и хранимые и операционные атрибуты, то нужно указать оба символа подряд'*' '+'
.
Дополнительно можно использовать ключ -d
для изменения уровня отладки, предствляющий собой битовую маску от 0 до 65535, в которой каждый бит соответствует определенной категории сообщений отладки:
1 — LDAP_DEBUG_TRACE
2 — LDAP_DEBUG_PACKETS
4 — LDAP_DEBUG_ARGS
8 — LDAP_DEBUG_CONNS
16 — LDAP_DEBUG_BER
32 — LDAP_DEBUG_FILTER
64 — LDAP_DEBUG_CONFIG
128 — LDAP_DEBUG_ACL
256 — LDAP_DEBUG_STATS
512 — LDAP_DEBUG_STATS2
1024 — LDAP_DEBUG_SHELL
2048 — LDAP_DEBUG_PARSE
16384 — LDAP_DEBUG_SYNC
32768 — LDAP_DEBUG_NONE
После выполнения запроса вы получите следующий результат:
# extended LDIF
#
# LDAPv3
# base <cn=users,cn=accounts,dc=ald,dc=company,dc=lan> with scope subtree
# filter: (uid=*)
# requesting: uid givenName sn
#
# admin, users, accounts, ald.company.lan
dn: uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
uid: admin
sn: Administrator
# iivanov, users, accounts, ald.company.lan
dn: uid=iivanov,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
uid: iivanov
givenName:: 0JjQstCw0L0=
sn:: 0JjQstCw0L3QvtCy
# ppetrov, users, accounts, ald.company.lan
dn: uid=ppetrov,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
uid: ppetrov
givenName:: 0J/QtdGC0YA=
sn:: 0J/QtdGC0YDQvtCy
#...
# search result
search: 4
result: 0 Success
# numResponses: 8
# numEntries: 7
Результат выполнения запроса выводится в поток stdout в формате LDIF, и его можно передавать по конвейеру (pipeline) или перенаправить в файл для последующей обработки. Подробнее о формате LDIF мы поговорим далее.
Как уже упоминалось ранее, кроме обычных хранимых атрибутов, есть еще служебные атрибуты, которые встроены в LDAP-сервер и называются операционными атрибутами. Большинство операционных атрибутов доступны только для чтения, и, чтобы их увидеть, необходимо указать '+'
в списке атрибутов. Например, с помощью следующего запроса вы можете увидеть, что запись cn=users
имеет операционный атрибут numSubordinates
, в котором содержится число дочерних записей:
ldapsearch -Q -LLL -s base \
-b "cn=users,cn=accounts,dc=ald,dc=company,dc=lan" '+'
Результат выполнения команды:
admin@dc-1:~$ ldapsearch -Q -LLL -s base \
> -b "cn=users,cn=accounts,dc=ald,dc=company,dc=lan" '+'
dn: cn=users,cn=accounts,dc=ald,dc=company,dc=lan
creatorsName: cn=Directory Manager
modifiersName: uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan
createTimestamp: 20250428191035Z
modifyTimestamp: 20250428192224Z
nsUniqueId: 7662c78e-246411f0-81d3c33d-ecd7a769
parentid: 2
entryid: 3
entryUUID: b969ca8f-78f1-43f7-bf07-662a779383bf
entryusn: 11700
numSubordinates: 7
...
О том, как составлять фильтры, добавлять записи, изменять атрибуты, вы сможете узнать в нашем расширенном курсе «Автоматизация задач администрирования через LDAP-запросы».
Утилита управления сервисом dsctl
Как мы уже говорили, для запуска, остановки и перезагрузки служб FreeIPA следует использовать утилиту ipactl
. Но для управления отдельными экземплярами LDAP-каталога вам нужно будет воспользоваться утилитой dsctl
. С ее помощью вы сможете:
Запускать, перезапускать, останавливать, получать статус и уничтожать экземпляр каталога (команды
start
,restart
,stop
,status
,remove
).Управлять базой данных: выполнять переиндексацию базы данных, резервное копирование и восстановление, выгружать дамп в LDIF-файл и восстанавливать каталог из дампа, выполнять проврку целостности каталога (
db2index
,db2bak
,bak2db
,db2ldif
,ldifdb2
,dbverify
).Производить проверку здоровья экземпляра (
healthcheck
).И многое другое.
Произведем проверку здоровья нашего экземпляра ALD-COMPANY-LAN
:
admin@dc-1:~$ sudo dsctl ALD-COMPANY-LAN healthcheck
Beginning lint report, this could take a while ...
Checking config:hr_timestamp ...
Checking config:passwordscheme ...
Checking backends:changelog:cl_trimming ...
Checking backends:changelog:mappingtree ...
...
No issues found.
Сравним db2bak
и db2ldif
. Обе команды для создания резервной копии требуют остановки службы каталога. Файлы по умолчанию будут сохранены в подкаталогах /bak/
и /ldif/
директории /var/lib/dirsrv/slapd-ALD-COMPANY-LAN/
. Принципиальное отличие между командами только в формате бэкапа: команда db2bak
создает полную резервную, в которую попадают в том числе бинарные файлы индексов, а команда db2ldif
создает один ldif-файл просто с данными.
Создадим резервную копию и дамп:
admin@dc-1:~$ sudo ipactl stop
Stopping ipa-dnskeysyncd Service
...
ipa: INFO: The ipactl command was successful
admin@dc-1:~$ sudo dsctl ALD-COMPANY-LAN db2bak
...
db2bak successful
admin@dc-1:~$ sudo dsctl ALD-COMPANY-LAN db2ldif userRoot
...
db2ldif successful
admin@dc-1:~$ sudo ipactl start
...
ipa: INFO: The ipactl command was successful
Проверим созданные файлы:
admin@dc-1:~$ sudo ls -l /var/lib/dirsrv/slapd-ALD-COMPANY-LAN/bak
итого 4
drwx------ 4 dirsrv dirsrv 4096 ср 2 11:23 ALD-COMPANY-LAN-2025_04_02_11_23_51
admin@dc-1:~$ sudo ls -l /var/lib/dirsrv/slapd-ALD-COMPANY-LAN/ldif
итого 6104
-rw------- 1 dirsrv dirsrv 3120670 ноя 2 11:35 ALD-COMPANY-LAN-userroot-2025_04_02_11_35_21.ldif
Утилита настройки и мониторинга dsconf
Утилита dsconf
— это мощное средство для настройки и мониторинга сервера 389 Directory Server, у которого только справка под 7 тысяч строк, см. man dsconf
. Мы не будем подробно разбирать все возможности этой утилиты, но покажем пару полезных приемов.
Резервное копирование
Утилита dsconf
в отличии от dsctl
позволяет выполнять резервное копирование без остановки службы каталога:
admin@dc-1:~$ sudo dsconf ALD-COMPANY-LAN backup create
The backup create task has finished successfully
Проверим созданный нами файл:
admin@dc-1:~$ sudo ls -l /var/lib/dirsrv/slapd-ALD-COMPANY-LAN/bak
итого 8
drwx------ 4 dirsrv dirsrv 4096 ср 2 11:23 ALD-COMPANY-LAN-2025_11_02_11_23_51
drwx------ 4 dirsrv dirsrv 4096 ср 2 11:48 ALD-COMPANY-LAN-2025_11_02_11_48_56
Просмотр и изменение настроек сервера 389ds
Для просмотра настроек сервера можно воспользоваться командой config get
. Настроек довольно много, поэтому выведем на экран только те из них, которые относятся к управлению паролями:
admin@dc-1:~$ sudo dsconf ALD-COMPANY-LAN config get | grep password
nsslapd-allow-hashed-passwords: on
passwordAdminDN:
passwordBadWords:
passwordChange: on
passwordCheckSyntax: off
passwordDictCheck: off
passwordDictPath:
passwordExp: off
passwordGraceLimit: 0
passwordInHistory: 6
passwordIsGlobalPolicy: off
passwordLegacyPolicy: on
passwordLockout: off
passwordLockoutDuration: 3600
passwordMaxAge: 8640000
passwordMaxClassChars: 0
passwordMaxFailure: 3
passwordMaxRepeats: 0
passwordMaxSeqSets: 0
passwordMaxSequence: 0
passwordMin8bit: 0
passwordMinAge: 0
passwordMinAlphas: 0
passwordMinCategories: 3
passwordMinDigits: 0
passwordMinLength: 8
passwordMinLowers: 0
passwordMinSpecials: 0
passwordMinTokenLength: 3
passwordMinUppers: 0
passwordMustChange: off
passwordPalindrome: off
passwordResetFailureCount: 600
passwordSendExpiringTime: off
passwordStorageScheme: PBKDF2-SHA512
passwordTPRDelayExpireAt: -1
passwordTPRDelayValidFrom: -1
passwordTPRMaxUse: -1
passwordTrackUpdateTime: off
passwordUnlock: on
passwordUserAttributes:
passwordWarning: 86400
Следует учитывать, что политики паролей в службе каталога FreeIPA реализованы собственными средствами, поэтому не все параметры 389 Directory Server будут работать так, как ожидается. Например, фильтром запрещенных слов passwordBadWords
воспользоваться у вас не получится, но эту функцию для FreeIPA команда ALD Pro планирует адаптировать уже в одном из следующих релизов.
Давайте изменим схему хранения паролей passwordStorageScheme
с безопасного, но ресурсоемкого алгоритма PBKDF2-SHA512 на алгоритм попроще и побыстрее SSHA512, чтобы существенно увеличить скорость LDAP Bind операции.
Текущее значение настройки можно посмотреть следующей командой:
admin@dc-1:~$ sudo dsconf ALD-COMPANY-LAN config get passwordStorageScheme
passwordStorageScheme: PBKDF2-SHA512
Установить новое значение можно следующей командой:
admin@dc-1:~$ sudo dsconf ALD-COMPANY-LAN config replace passwordStorageScheme=SSHA512
selinux is disabled, will not relabel ports or files.
Successfully replaced "passwordStorageScheme"
С помощью следующей команды вы можете убедиться, что изменение схемы хранения не повлияло на пароль пользователя admin
, который был установлен ранее:
ldapsearch -H ldaps://dc-1.ald.company.lan \
-o ldif-wrap=no -D 'cn=Directory Manager' -W \
-b 'uid=admin,cn=users,cn=accounts,dc=ald,dc=company,dc=lan' \
| grep 'userPassword::' | cut -d" " -f 2 | base64 -d
Результат выполнения:
{PBKDF2-SHA512}10000$Dtq6lpYFcu1uLuUMs3lYFswkAermaOln$KRCzVfS3IUIv7zN+jvlbEe7DIXLDfsShEod4H5FADXDfZUv1UUBVqCpTxSzlXlMoMg5LHzlbWSh0rT0Ndh1ZaA==
Смените пароль пользователю, например, с помощью утилиты kpasswd
, повторите выполнение команды и убедитесь, что способ хеширования действительно изменился на SSHA512:
{SSHA512}3vQIJJDlA5mmj/ouIFjY1uuyHcuiDuQdiNTaEt9thneV5ZK6seJAWdaibAZpfcmeB63poARbQTRanckARmYzEOU5FB3YWFNu
Кроме команд get
и replace
доступны также add
и delete
. Дополнительную справку по командам можно получить с помощью ключа -h
:
admin@dc-1:~$ sudo dsconf ALD-COMPANY-LAN config -h
usage: dsconf instance config [-h] {get,add,replace,delete} ...
positional arguments:
{get,add,replace,delete}
action
get get
add Add attribute value to configuration
replace Replace attribute value in configuration
delete Delete attribute value in configuration
Сервер MIT Kerberos krb5-kdc
Основным протоколом аутентификации в службе каталога FreeIPA является Kerberos V5, работу которого обеспечивает эталонная реализация центра распространения ключей (англ. Key Distribution Center, KDC) от Массачусетского технологического института (агл. Massachusetts Institute of Technology, MIT).
Когда пользователь делает вход в операционную систему доменного компьютера или выполняет аутентификацию утилитой kinit
, запрос отправляется службе KDC. При успешной проверке аутентичности клиенту выдается TGT-билет, с помощью которого он может в дальнейшем проходить прозрачную аутентификацию на любом контроллере домена без повторного ввода пароля, чтобы получать сервисные билеты для аутентификации в керберизированных сервисах.
В основе протокола Kerberos лежит идея доверия:
Контроллер доверяет клиенту, т.к. они оба владеют общим ключом, в роли которого выступает пароль пользователя.
Сервис доверяет контроллеру, т.к. они оба владеют общим ключом, в роли которого выступает пароль сервиса.
Сервис транзитивно доверяет клиенту, т.к. ему доверяет контроллер, которому доверяет сам сервис.
В дальнейшем это доверие может быть расширено на взаимодействие между доменами или, как говорят, областями действия Kerberos, тогда мы получаем следующую схему:
Контроллер из домена А доверяет клиенту из домена А, т.к. они оба владеют общим ключом, в роли которого выступает пароль пользователя.
Сервис из домена Б доверяет контроллеру из домена Б, т.к. они оба владеют общим ключом, в роли которого выступает пароль сервиса.
Сервис из домена Б доверяет клиенту из домена A, т.к. оба домена владеют общим ключом, в роли которого выступает пароль объекта доверительных отношений, который создается в момент установления доверительных отношений между доменами.
Запутанно? А в лесу доменов MS AD может быть вообще несколько уровней доменов, между которыми устанавливаются транзитивные доверительные отношения, тогда возникает целая цепочка рекурсивных Kerberos-запросов, как в детской песенке:
Вот дом, который построил Джек.
А это пшеница, которая в тёмном чулане хранится в доме, который построил Джек.
А это весёлая птица-синица, которая часто ворует пшеницу, которая в тёмном чулане хранится в доме, который построил Джек.
…
Центр распространения ключей MIT KDC тесно интегрирован с LDAP-каталогом с помощью плагина ipa-kdb, который позволяет извлекать из службы каталога не только аутентификационную информацию, но и поддерживает генерацию авторизационной структуры данных MS-PAC с информацией об участии пользователя в группах, что требуется для интеграции с MS AD.
В архитектуре KDC иногда выделяют две отдельные службы:
Сервер аутентификации (Authentication Server, AS), который отвечает за аутентификацию пользователей и выдачу TGT-билетов, поэтому должен иметь доступ к паролям пользователей.
Сервер выдачи разрешений (Ticket Granting Server, TGS), который отвечает за выдачу сервисных TGS-билетов, поэтому должен иметь доступ к паролям сервисов.
Однако на практике обе службы обычно реализованы вместе под общим названием Центра распространения ключей (KDC) и такие детали можно считать несущественными.
Если не вдаваться в детали, которых будет предостаточно в следующем модуле, то процедура аутентификации по протоколу Kerberos состоит из следующих шагов, см. рис. 251:
Клиент отправляет контроллеру запрос на аутентификацию (AS_REQ).
Контроллер выдает клиенту TGT-билет (AS_REP). Билет зашифрован мастер-ключом KDC, поэтому может быть проверен любым контроллером в домене.
Клиент отправляет контроллеру запрос на получение сервисного билета для аутентификации, например, на файловом сервере (TGS_REQ), прилагая полученный ранее TGT-билет. Запрос может быть обработан любым контроллером в домене, т.к. все они располагают мастер-ключом, которым зашифрован TGT-билет.
Контроллер выдает клиенту TGS-билет (TGS_REP). Билет зашифрован паролем сервиса, поэтому может быть проверен сервисом самостоятельно без обращения к контроллеру.
Клиент обращается к сервису (AP_REQ), прилагая полученный ранее TGS-билет. Запрос может быть обработан сервисом, т.к. он располагает своим ключом, которым зашифрован TGS-билет.
Сервис подтверждает аутентичность пользователя и устанавливает с ним сессию (AP_REP).

рис. 251 Взаимодействие клиента с компонентами KDC в ходе аутентификации по протоколу Kerberos V5
Как вы можете заметить, ответственность за передачу билетов по протоколу Kerberos V5 возлагается на клиента, а для проверки аутентичности пользователя сервису не требуется обращаться к контроллеру домена. Керберизированные сервисы могут, конечно, обращаться к контроллеру по протоколу LDAP для извлечения авторизационной информации об участии пользователя в группах, но при использовании MS-PAC даже этого не требуется — пользователь приходит с билетом, в котором уже содержится вся необходимая информация.
Подробно Kerberos-аутентификацию мы рассмотрим в следующем модуле, а сейчас давайте сведем все новые технические термины в один список:
Аутентификация — процедура проверки подлинности, т.е аутентичности пользователя, например, на основании того, что обеим сторонам известен общий секрет.
Авторизация — процедура предоставления пользователю прав доступа на выполнение определённых действий. Обычно права доступа назначаются не на конкретных пользователей, а на группы, поэтому информацию об участии пользователей в группах считают авторизационной информацией.
Область действия Kerberos (англ. Realm) — совокупность пользователей и компьютеров, пароли которых хранятся в единой базе данных. Совпадает с DNS-именем домена, но пишется заглавными буквами, например,
ALD.COMPANY.LAN
.Имя принципала (англ. Principal) — это строка, уникально идентифицирующая учетную запись пользователя, компьютера или керберизированной службы в домене. Принадлежность принципала к области Kerberos задается как в адресе электронной почты с помощью символа собачки
@
, например,admin@ALD.COMPANY.LAN
.Имя сервиса (англ. Service Principal Name, SPN) — это имя принципала для сервиса, которое уникально идентифицирует учетную запись сервиса в домене. В именах сервисов может указываться имя хоста, на котором эта служба работает в домене, например,
HTTP/dc-1.ald.company.lan@ALD.COMPANY.LAN
.TGT-билет (Ticket-Granting Ticket) — билет, который позволяет клиенту проходить прозрачную аутентификацию на контроллерах домена без ввода пароля для получения сервисных билетов, которые необходимы для аутентификации в керберизированных сервисах. Называется также билетом для получения других билетов, удостоверением или мандатом.
TGS-билет (Ticket-Granting Service Ticket) — билет, который позволяет клиенту проходить прозрачную аутентификацию без ввода пароля в керберизированном сервисе, для которого этот билет был выдан. Называется так же сервисным билетом, удостоверением или мандатом сервиса.
AS_REQ/AS_REP – запрос к серверу аутентификации (Authentication Server, AS) центра распространения ключей Kerberos для получения TGT-билета и ответ от него соответственно.
TGS_REQ/TGS_REP – запрос к серверу выдачи разрешений (Ticket Granting Server, TGS) центра распространения ключей Kerberos для получения TGS-билета и ответ от него соответственно.
Как мы уже сказали, более подробно процесс Kerberos-аутентификации мы рассмотрим в следующем модуле, см. Модуль 5. Работа Linux-компьютера в домене.
Сервер Samba
Разработчики компании Red Hat изначально работали над развитием службы каталога Samba AD и только когда поняли, что, подстраиваясь под Windows, хорошую службу каталога для Linux не сделать, запустили проект FreeIPA. В то же время, когда им потребовалось реализовать интеграцию с MS AD, они задействовали свои старые наработки, поэтому в контроллер FreeIPA интегрирована служба Samba AD, которая обеспечивает NTLM-аутентификацию и обслуживает SMB RPC вызовы.
Протокол SMB позволяет выполнять RPC-вызовы, поэтому с его помощью можно предоставить доступ не только к файлам и принтерам, но и выполнять другие типы запросов, которые представляются как доступ к «файлам» через общий ресурс IPC$
. Существует несколько интерфейсов, которые предоставляются контроллерами домена, наиболее известными из которых являются локальная служба безопасности (англ. Local Security Authority, LSA) и служба аутентификации пользователей NETLOGON.
В момент установления доверительных отношений с MS AD контроллер FreeIPA через SMB RPC согласовывает общий секрет и другие настройки. В дальнейшем Samba участвует в формировании структуры данных MS-PAC для Kerberos-билетов, в которой содержится информация об участии пользователя в группах.
Удаленные вызовы LSA используются также для преобразования имен. Например, когда вы в Windows открываете свойства папки, в списке доступа ACL хранятся только идентификаторы безопасности SID, но они автоматически преобразуются в имена пользователей через обращение к контроллеру по SMB протоколу на порт 445/TCP. Если контроллер будет в этот момент недоступен, то в списке так и останутся только числа.
На рис. рис. 252 показана схема взаимодействия компонентов при обработке запросов из домена Active Directory при интеграции через механизм доверительных отношений.

рис. 252 Схема взаимодействия компонентов FreeIPA при работе в доверительных отношениях с доменом Active Directory
Приведем краткое описание назначения компонентов:
DNS (bind) — служба, которая обрабатывает DNS-запросы (порты 53/UDP и 53/TCP). Взаимодействие между доменами осуществляется в первую очередь по доменным именам.
KDC (MIT) — служба, которая обрабатывает запросы на Kerberos-аутентификацию (порт 88/TCP).
IPA-KDB - плагин к MIT KDC от разработчиков FreeIPA для получения информации из LDAP-каталога с сопоставлением атрибутов и записей по схеме Kerberos.
EPM (Endpoint Mapper) - служба, которая предоставляет клиентам RPC-сервис для определения параметров дальнейшего подключения к другим RPC-сервисам, таким как NETLOGON, LSA, SAMR (порт 135/TCP).
NETLOGON/LSARPC/SAMR — сервисы RPC для обработки запросов клиентов на NTLMSSP-аутентификацию, преобразование идентификаторов и другие операции (динамические порты).
В преобразовании идентификаторов участвует также служба winbind, которая является клиентской частью Samba и обеспечивате работу Linux-клиента в домене. В службе каталога FreeIPA большую часть этих задач для Samba выполняет уже собственная служба sssd, с которой winbind взаимодействует через плагины.
IPASAM — плагин к Samba от разработчиков FreeIPA для получения информации из LDAP-каталога с сопоставлением атрибутов по схеме Active Directory.
libndr_krb5 - библиотека для формирования структуры данных MS-PAC с авторизационной информацией об участии пользователя в группах.
SMBD — служба, которая предоставляет клиентам сервисы по протоколам SMB на порту 445/TCP. Клиенты могут выполнять RPC-запросы по протоколу SMB через обращение к общему ресурсу IPC$.
Более подробно мы обсудим роль компонентов Samba в модуле, который будет посвящен интеграции с Microsoft Active Directory.
Идентификаторы безопасности
Диапазоны идентификаторов
Мы уже знаем, что для идентификации субъектов безопасности в Linux используются идентификаторы POSIX, а в Windows эту роль выполняют идентификаторы SID (англ. Security Identifiers). Однако, в то время как в Windows идентификаторы пользователей и групп находятся в одном пространстве SID, идентификаторы POSIX представляют собой два непересекающихся множества: идентификаторы пользователей находятся в пространстве UID (англ. User Identifier), а идентификаторы групп в пространстве GID (англ. Group Identifier) соответственно.
Если взять SID с номером S-1-5-21-1491017894-2377586105-2170988794-500, то по нему никак не понять, принадлежит ли он пользователю или группе, если только вы не знаете хорошо известные идентификаторы (англ. well-known SIDs), в соответствии с которыми идентификатор 500 всегда назначается администратору.
Если разложить SID на составляющие, то последнее число 500 однозначно идентифицирует субъект относительно домена, поэтому это число называется относительным идентификатором (англ. Relative Identifier, RID), а предшествующие ему три числа 1491017894-2377586105-2170988794 идентифицируют домен, поэтому для всех SID в домене эти числа имеют одно и то же значение.
Идентификаторы POSIX, так же как RID’ы, представляют собой натуральные числа в диапазоне от 0 до 2 32 (4 млрд), но не имеют уникальной доменной части, поэтому получается, что все компьютеры работают как бы в одном общем пространстве идентификаторов. Чтобы решить обозначенную проблему, в FreeIPA используют диапазоны идентификаторов (англ. ID Range), определяющие часть общего пространства идентификаторов, которые будут использоваться конкретным доменом.
Половину диапазона из 4 млрд служба каталога FreeIPA резервирует на подчиненные (subordinate) идентификаторы, и мы не будем их затрагивать, т.к. они не используются в повседневных задачах. Вторую половину служба использует для обычных пользователей и групп, но делает это крайне экономно. При установке первого контроллера система случайным образом выбирает себе ID Range емкостью 200к идентификаторов, поэтому вероятность пересечения с другим доменом будет крайне мала, всего 1 к 10 тысячам. А если 200к вам будет мало, вы сможете создать себе дополнительный диапазон любой емкости.
Как вы знаете, в MS AD одному из контроллеров назначается FSMO-роль «RID Master», после чего он получает в свое управление весь диапазон свободных идентификаторов и выдает их другим контроллерам пачками по 500 штук. Как только у кого-то из контроллеров свободных идентификаторов становится меньше 100 единиц, этот контроллер обращается к Мастеру RID, и тот выдает ему следующую пачку из 500 идентификаторов.
В службе каталога FreeIPA любой контроллер может стать Мастером RID, для этого достаточно с помощью этого контроллера создать пользователя или группу, чтобы ему потребовался идентификатор безопасности. В этом случае контроллер обратится к соседу, заберет у него половину свободного диапазона и сможет использовать эти идентификаторы для своих нужд и передавать другим контроллерам в домене по запросу.
За работу этого механизма отвечает плагин распределенного назначения идентификаторов (англ. Distributed Numeric Assignment, DNA), а часть диапазона ID Range, которым владеет конкретный контроллер домена, называется DNA ID Range. Таким образом, в домене FreeIPA мы работаем с двумя типами диапазонов идентификаторов:
ID Range — диапазон идентификаторов, который зарезервирован за доменом в целом.
DNA ID Range — диапазон распределенного назначения идентификаторов, который является подмножеством диапазона ID Range и закреплен за конкретным контроллером домена, чтобы тот мог создавать пользователей и группы автономно.
Для совместимости с Active Directory в FreeIPA всем пользователям и группам назначаются также идентификаторы SID в стиле Windows. Их значения рассчитываются математически. Сложность этих расчетов состоит в том, что в Linux мы имеем дело с двумя пространствами идентификаторов, а в Windows пространство общее. Поэтому для идентификаторов групп, которые могут совпадать с идентификаторами пользователей, резервируется дополнительно еще один диапазон RID, который называется вторичным, см. рис. 253.

рис. 253 Преобразование POSIX-идентификаторов (UID и GID) в идентификаторы безопасности Windows (SID)
Примерно так же работает пересчет идентификаторов SID из доверенного домена MS AD в идентификаторы POSIX. В момент установления доверительных отношений в домене FreeIPA для каждого домена из леса MS AD создается ID Range, настройки которого используются для пересчета. По умолчанию емкость этих диапазонов тоже 200к идентификаторов, но, в отличие от обычного ID Range, диапазон для доверенного домена MS AD можно расширить.
Примечание
Если в лесу MS AD после установления доверительных отношений с доменом FreeIPA будут созданы новые поддомены, то на стороне FreeIPA нужно будет повторить процедуру извлечения информации о поддоменах следующей командой:
ipa trust-fetch-domains <имя_корневого_домена_AD>
Это позволит создать для новых поддоменов диапазоны ID Range и сделает их доступными для клиентов службы каталога FreeIPA.
Просмотр диапазонов идентификаторов
Посмотреть текущие диапазоны идентификаторов домена (ID Range) можно как из веб-интерфейса ALD Pro, так и через утилиту командной строки ipa.
Для просмотра через веб-интерфейс необходимо открыть страницу
. Как вы помните, существующий диапазон невозможно расширить, можно только добавить новый.https://dc-1.ald.company.lan/ad/ui/#/domainmgmt/users-and-group-settings/id-ranges

рис. 254 Настройка диапазонов в веб-интерфейсе
Список всех диапазонов идентификаторов домена и их параметры можно посмотреть из окна терминала, используя команду ipa idrange-find
:
admin@dc-2:~$ ipa idrange-find
-----------------
найден 1 диапазон
-----------------
Имя диапазона: ALD.COMPANY.LAN_id_range
Первый идентификатор POSIX диапазона: 491200000
Количество идентификаторов в диапазоне: 200000
Первый RID соответствующего диапазона RID: 1000
Первый RID вторичного диапазона RID: 100000000
Тип диапазона: local domain range
---------------------------------
Количество возвращённых записей 1
---------------------------------
Чтобы вывести параметры определенного диапазона идентификаторов домена, следует использовать команду ipa idrange-show <Имя_Диапазона>
:
admin@dc-2:~$ ipa idrange-show ALD.COMPANY.LAN_id_range
Имя диапазона: ALD.COMPANY.LAN_id_range
Первый идентификатор POSIX диапазона: 491200000
Количество идентификаторов в диапазоне: 200000
Первый RID соответствующего диапазона RID: 1000
Первый RID вторичного диапазона RID: 100000000
Тип диапазона: local domain range
Просмотреть список диапазонов распределенного назначения идентификаторов (DNA ID Range) на всех контроллерах домена можно командой sudo ipa-replica-manage dnarange-show
:
admin@dc-1:~$ sudo ipa-replica-manage dnarange-show
dc-1.ald.company.lan: 491200009-491399999
dc-2.ald.company.lan: No range set
...
Вывести список диапазонов только на конкретном контроллере можно так:
admin@dc-1:~$ sudo ipa-replica-manage dnarange-show dc-1.ald.company.lan
dc-1.ald.company.lan: 491200009-491399999
Выделение диапазона идентификатора вручную
В некоторых случаях вы можете захотеть создать еще один диапазон идентификаторов домена в дополнение к исходному. Например, когда исходный диапазон идентификаторов уже исчерпан. Для этого нужно выполнить следующие команды:
Создадим новый диапазон идентификаторов командой
sudo ipa idrange-add
на dc-1:
ipa idrange-add ALD.COMPANY.LAN_second_id_range \
--base-id=1000000 --range-size=200000 --rid-base 201000 \
--secondary-rid-base 100200000
Результат выполнения команды
admin@dc-1:~$ ipa idrange-add ALD.COMPANY.LAN_second_id_range \
> --base-id=1000000 --range-size=200000 --rid-base 201000 \
> --secondary-rid-base 100200000
-------------------------------------------------------------------
Добавлен диапазон идентификаторов "ALD.COMPANY.LAN_second_id_range"
-------------------------------------------------------------------
Имя диапазона: ALD.COMPANY.LAN_second_id_range
Первый идентификатор POSIX диапазона: 1000000
Количество идентификаторов в диапазоне: 200000
Первый RID соответствующего диапазона RID: 201000
Первый RID вторичного диапазона RID: 100200000
Тип диапазона: local domain range
Проверим доступные диапазоны идентификаторов домена:
admin@dc-1:~$ ipa idrange-find
-------------------
найдено 2 диапазона
-------------------
Имя диапазона: ALD.COMPANY.LAN_id_range
Первый идентификатор POSIX диапазона: 491200000
Количество идентификаторов в диапазоне: 200000
Первый RID соответствующего диапазона RID: 1000
Первый RID вторичного диапазона RID: 100000000
Тип диапазона: local domain range
Имя диапазона: ALD.COMPANY.LAN_second_id_range
Первый идентификатор POSIX диапазона: 1000000
Количество идентификаторов в диапазоне: 200000
Первый RID соответствующего диапазона RID: 201000
Первый RID вторичного диапазона RID: 100200000
Тип диапазона: local domain range
---------------------------------
Количество возвращённых записей 2
---------------------------------
При создании диапазона идентификаторов ID Range соответствующий ему динамический диапазон DNA ID Range не создается автоматически, поэтому его нужно будет создать вручную. Для управления диапазонами DNA ID Range предназначены команды утилиты ipa-replica-manage
.
Текущие настройки диапазона можно посмотреть командой dnarange-show
:
admin@dc-1:~$ sudo ipa-replica-manage dnarange-show dc-1.ald.company.lan
dc-1.ald.company.lan: 491200009-491399999
Давайте назначим dc-1 новый диапазон, для этого воспользуемся командой dnarange-set
:
admin@dc-1:~$ sudo ipa-replica-manage dnarange-set dc-1.ald.company.lan 1000000-1199999
У реплик может быть не только основной, но и дополнительный диапазон идентификаторов DNA ID Range, который они начнут использовать, когда в текущем диапазоне закончатся свободные идентификаторы. Давайте в качестве следующего диапазона назначим оставшиеся идентификаторы из диапазона, который был создан при установке системы. Чтобы назначить следующий диапазон идентификаторов DNA конкретному серверу, используйте команду dnanextrange-set
.
admin@dc-1:~$ sudo ipa-replica-manage dnanextrange-set dc-1.ald.company.lan 491200009-491399999
Посмотрим, что у нас получилось:
admin@dc-1:~$ sudo ipa-replica-manage dnarange-show dc-1.ald.company.lan
dc-1.ald.company.lan: 1000000-1199999
admin@dc-1:~$ sudo ipa-replica-manage dnanextrange-show dc-1.ald.company.lan
dc-1.ald.company.lan: 491200009-491399999
Примечание
Как правило, служба sssd может работать с новым диапазоном службы каталога FreeIPA сразу без выполнения дополнительных действий. Если у вас появятся какие-либо проблемы с новыми пользователями, то выполните очистку кэша службы sssd на проблемном компьютере командой sudo sssctl cache-remove
(потребуется установить пакет apt install sssd-tools
).
Практика и тестирование
Заключение
В этом модуле мы познакомились с составом службы каталога ALD Pro, рассмотрели ее компоненты и научились с ними работать. Мы узнали, что такое идентификаторы безопасности и диапазоны идентификаторов, и в общих чертах посмотрели на процесс Kerberos-аутентификации.
В следующем модуле мы познакомимся со способами аутентификации и с устройством службы sssd, обеспечивающей работу компьютера в домене.
Дополнительные источники информации
Курс «Автоматизация задач администрирования через утилиту ipa»
Курс «Автоматизация задач администрирования через LDAP-запросы»
Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names RFC 4514;
Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules RFC 4517.
Обратная связь
Если остались вопросы, то их всегда можно задать в специальной теме.