Введение

В примерах используются:

Установка сервера FreeIPA и настройка доверительных отношений с AD

FreeIPA - это интегрированное решение для идентификации и аутентификации для сетевых сред Linux / UNIX.

В случае, когда с системой ROBIN будут работать пользователи Active Directory, необходимо настроить доверительные отношения между доменами FreeIPA и AD.

Для отказоустойчивости FreeIPA будет работать в кластере из двух мастер-реплик. В дальнейшем при необходимости количество реплик можно увеличить.

Установка и последующая интеграция FreeIPA с существующем AD:

https://www.freeipa.org/page/Active_Directory_trust_setup

Рекомендации по установке:

https://www.freeipa.org/page/Deployment_Recommendations

Настройка репликации:

https://www.freeipa.org/page/V4/Replica_Setup

Настройка брандмауэра для доменов и доверия Active Directory:

https://docs.microsoft.com/ru-ru/troubleshoot/windows-server/identity/config-firewall-for-ad-domains-and-trusts

Замечания по установке

  1. Синхронизировать время с контроллером домена AD, с которым планируется интегрироваться. Для этого настроить сервер FreeIPA на синхронизацию с тем же NTP сервером, что и AD
  2. FreeIPA должен иметь собственный основной домен, т.е. не быть поддоменом AD. Домен FreeIPA для AD является отдельным лесом

  3. Создаваемая область Kerberos (название домена с большой буквы) не должна конфликтовать с существующими областями

  4. Устанавливать вместе с интегрированным DNS сервером (нужен флаг –setup-dns при установке)

  5. Перед настройкой доверительных отношений между доменами AD и FreeIPA необходимо чтобы серверы DNS видели друг друга. Для этого на контроллере домена AD необходимо выполнить:

    C:\> nslookup
    > set type=srv
    > _ldap._tcp.ad_domain
    > _ldap._tcp.ipa_domain
    > quit
    

    На IPA сервере:

    # dig SRV _ldap._tcp.ipa_domain
    # dig SRV _ldap._tcp.ad_domain
    
  6. Создать одностороннее доверие леса FreeIPA конкретному домену или лесу AD на ваше усмотрение

Пошаговая инструкция по установке кластера FreeIPA для Centos 7

Установка основного сервера FreeIPA

  1. Залогиниться под пользователем root

  2. Обновить установленные в ОС пакеты:
    yum update -y
  3. Установить полное доменное имя хоста:
    hostnamectl set-hostname <ipa_hostname_1.ipa_domain>
  4. Прописать в /etc/hosts адреса основного и резервного серверов FreeIPA:

    vi /etc/hosts
    
    <main_ip>  <ipa_hostname_1.ipa_domain>  <ipa_hostname_1>
    <reserve_ip>  <ipa_hostname_2.ipa_domain>  <ipa_hostname_2>
    
  5. Отключить назначение IPv6 адресов:

    vi /etc/sysctl.d/ipv6.conf
    
    #Disable IPv6
    
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.<interface0>.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 0
    
  6. Установить необходимые пакеты для установки FreeIPA и настройки доверительных отношений с AD
    yum install -y ipa-server ipa-server-trust-ad ipa-server-dns bind bind-dyndb-ldap
  7. Установить сервер IPA
    ipa-server-install -a <admin_password> -p <dm_password> --domain=<ipa_domain> --realm=<IPA_DOMAIN> --mkhomedir --setup-dns --no-forwarders -U

где:

  • admin_password - пароль учетной записи admin
    • dm_password - пароль учетной записи Directory Manager
    • domain - название домена IPA должно отличаться от существующего домена AD и не быть поддоменом AD или наоборот.
    • realm - название домена в верхнем регистре
  1. Получить билет администратора IPA:
    kinit admin
  2. Проверить, что пользователи IPA доступны для системных служб:

    id admin
    getent passwd admin
    

Если вышеуказанные команды не работают, перезапустите службу sssd и попробуйте их снова.

Установка резервного сервера FreeIPA

  1. Залогиниться под пользователем root

  2. Обновить установленные в ОС пакеты:
    yum update -y
  3. Установить полное доменное имя хоста:
    hostnamectl set-hostname <ipa_hostname_2.ipa_domain>
  4. Прописать в /etc/hosts адреса основного и резервного серверов FreeIPA:

    vi /etc/hosts
    
    <main_ip>  <ipa_hostname_1.ipa_domain>  <ipa_hostname_1>
    <reserve_ip>  <ipa_hostname_2.ipa_domain>  <ipa_hostname_2>
    
  5. Отключить назначение IPv6 адресов:

    vi /etc/sysctl.d/ipv6.conf
    
    #Disable IPv6
    
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.<interface0>.disable_ipv6 = 1
    net.ipv6.conf.lo.disable_ipv6 = 0
    
  6. Отключить firewalld:

    systemctl stop firewalld
    systemctl mask firewalld
    
  7. Установить iptables:

    yum install -y iptables-services
    systemctl enable iptables
    
  8. Исправить конфигурацию с целью открыть необходимые порты:

    vi /etc/sysconfig/iptables
    
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    # -A INPUT -s ad_ip_address -p tcp -m multiport --dports 389,636 -m state --state NEW,ESTABLISHED -j REJECT
    -A INPUT -p tcp -m multiport --dports 80,88,443,389,636,88,464,53,123,138,139,445 -m state --state NEW,ESTABLISHED -j ACCEPT
    -A INPUT -p udp -m multiport --dports 88,464,53,123,138,139,389,445 -m state --state NEW,ESTABLISHED -j ACCEPT
    -A INPUT -p udp -j REJECT
    -A INPUT -p tcp -j REJECT
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    
  9. Перезагрузить сервис:

    service iptables restart
    
  10. Установить NTP и настроить синхронизацию с ntp-сервером. Требуется

открыть порт 123 (указан в конфигурации iptables)

yum install -y ntp
  1. При необходимости указать свои ntp-сервера в конфиге
vi /etc/ntp.conf
  1. Запустить службу ntpd и включить автозапуск:
systemctl start ntpd
systemctl enable ntpd
  1. Проверить временную зону. Должна совпадать с зоной сервера AD:
timedatectl | grep "Time zone"

и исправить, если отличается:

timedatectl set-timezone Europe/Moscow
  1. В сетевых настройках указать в DNS1 - IP основного сервера IPA, в DNS2 - IP резервного:
vi /etc/sysconfig/network-scripts/ifcfg-ens192
  1. Перезагрузить сеть
service network restart
  1. Установить необходимые пакеты для установки реплики FreeIPA и

настройки доверительных отношений с AD

yum -y install ipa-server ipa-server-trust-ad ipa-server-dns bind bind-dyndb-ldap
  1. Зарегистрировать хост на основном сервере IPA:
ipa-client-install --domain=<ipa_domain> --realm=<IPA_DOMAIN> --server=<ipa_hostname_1.ipa_domain>
В ходе установки ответить на вопросы - yes и ввести логин/пароль администратора IPA
Proceed with fixed values and no DNS discovery? [no]: yes
  1. На основном сервере IPA добавить хост <ipa_hostname_2> в группу

ipaservers:

ipa hostgroup-add-member ipaservers --hosts <ipa_hostname_2.ipa_domain>
  1. На резервном сервере запустить:
ipa-replica-install

Игнорируем ошибку Reverse DNS

  1. На резервном сервере установить DNS:
ipa-dns-install
Отвечаем «no» на вопросы про серверы условной пересылки
На контроллере домена AD добавить IP адрес резервного сервера в серверы условной пересылки для домена IPA:
  1. На резервном сервере установить СА сервер
ipa-ca-install
  1. На резервном сервере запустить ipa-adtrust-install
ipa-adtrust-install --netbios-name=<ipa_netbios> -a <admin_password>

Импорт каталога ROBIN

После установки и настройки сервера FreeIPA, в его каталог импортируется ветка ROBIN, используемая приложениями системы. Импорт осуществляется выполнением инструкций, содержащихся в LDIF-файлах.

Для импорта и последующих изменений каталога используется ldap-браузер Apache Directory Studio.

  1. В LDIF-файлах по всему тексту заменяется корневая запись домена «dc=domain,dc=ru» на соответствующую вашему домену FreeIPA:

    1. С помощью PowerShell в Windows:

      cd {директория с ldif-файлами}``$dn={корневой DN FreeIPA}``foreach ($file in Get-ChildItem *.ldif) { (Get-Content $file) -Replace 'dc=domain,dc=ru', $dn | out-file $file}
      
    2. В Linux:

      cd {директория с ldif-файлами}
      dn={корневой DN FreeIPA}
      find . -type f -name '*.ldif' -exec sed -i -r 's/dc=domain,dc=ru/'$dn'/g' {} \;
      
  2. LDIF-файлы поочередно импортируются в порядке нумерации

Синхронизация пользователей корпоративного AD-каталога, смена паролей, настройка парольных политик

Цель

Обеспечить работу пользователей из корпоративного AD-каталога с клиентскими приложениями Платформы Робин с установлением и без установления доверенных отношений между корпоративным доменом AD и доменом FreeIPA.

Описание проблемы

Для того чтобы пользователи могли работать с клиентскими приложениями (Robin Player, Robin Studio, Robin Management Console) Робин Платформы, они должны быть авторизованы сервером FreeIPA. Для выполнения процедуры авторизации пользователей их учетные записи должны храниться на сервере авторизации FreeIPA. FreeIPA-сервер может работать с пользователями из корпоративного AD-каталога только путем их переопределения в БД FreeIPA. Для этого устанавливаются доверительные отношения (трасты) между доменами AD и IPA. Процедура переопределения пользователей и создания трастов выполняется штатными средствами FreeIPA и описана в разделе Настройка доверительных отношений с AD этого документа. Однако создание трастов между доменами AD и IPA предъявляет определенные требования к согласованности версий AD-сервера и FreeIPA-сервера [1], которые компания, владеющая AD-каталогом, не всегда может обеспечить. Поэтому целесообразно получить такое решение, которое бы обеспечивало работу пользователей из корпоративного AD-каталога с клиентскими приложениями Платформы Робин как с установлением так и без установления доверенных отношений между корпоративным доменом AD и доменом FreeIPA.

Сервис рекуррентной репликации пользователей

Сервис рекуррентной репликации пользователей обеспечивает работу пользователей из корпоративного AD-каталога с клиентскими приложениями Платформы Робин. При этом он может работать как с установленными доверенными отношениями между корпоративным доменом AD и доменом FreeIPA так и без них.

Функциональная архитектура сервиса

Функциональные компоненты

Сервис рекуррентной репликации состоит из следующих компонент:

  • Sync-сервис - сервис репликации,

  • Notification-сервис - обработчик очереди сообщений,

  • Redis Cache - сервис кэширования репликационных состояний,

  • MS Active Directory - служба каталогов Майкрософт корпоративной сети Заказчика,

  • FreeIPA - сервис идентификации пользователей Платформы Робин.

Диаграмма основных действий Sync-сервиса

Sync-сервис:

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

  2. Если флаг защиты от повторного запуска не установлен, то Sync-сервис устанавливает его, тем самым блокируя возможные запуски сервиса до завершения текущего.

  3. Выполняет запрос к службе каталогов для получения списка пользователей. Запрос выполняется и обрабатывается по-фрагментно.

  4. Выполняет сравнение результата поиска с образом кэша.

  5. При необходимости выполняет запрос списка пользователей для сверки синхронности кэша.

  6. Если изменений нет, то выполняется переход к п.8.

  7. Если есть изменения, то выполняется процесс репликации - сервис отрабатывает изменения на сервере FreeIPA:

    • добавляет новых пользователей или создает их переопределения в зависимости от значения параметра create_user_overrides;
    • удаляет неактуальные записи пользователей;
    • удаляет из домена FreeIPA пользователей, заблокированных в домене AD;
    • устанавливает участие пользователей в группах;
    • сохраняет текущее состояние репликации в кэше для снижения нагрузки на сервера при проверках и репликации;
    • в случае регистрации новых пользователей отправляет сообщения сервису оповещения (notification-сервис).
  8. По окончании своей работы выполняет сброс флага защиты от повторного запуска.

Диаграмма основных действий Notification-сервиса

Notification-сервис:

  1. Принимает сообщения от Sync-сервиса о регистрации новых пользователей.

  2. Формирует по шаблону сообщения для новых пользователей.

  3. Вызывает сервис отправки сообщений новым пользователям.

Установка программного обеспечения

Требования к программному обеспечению

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

  • python 3.6.2+
  • redis
  • FreeIPA версии 4.9.2

Установка Python

Установить Python версии 3.6 из официального репозитория для CentOS 7 (может потребоваться добавление репозитория epel):

sudo yum install python36

Обеспечить наличие менеджера пакетов Python:

python3 -m ensurepip

Обновить менеджер пакетов до актуальной версии:

sudo python3 -m pip install --upgrade pip

Установка Redis

Установка Redis рекомендуется только из официальных репозиториев Cent OS (EPEL и т.п.). Для этого надо установить один из официальных репозиториев расширений CentOS 7, например:

sudo yum install -y epel-release

Далее установить Redis:

sudo yum install -y redis

Установка vim

Установить текстовый редактор vim:

sudo yum install vim

Установка сервиса репликации

Для работы сервиса не требуется полномочий root-пользователя. Для устнавки рекомендуется создать некорневую пользовательскую учетную запись с домашней директорией:

sudo adduser robin-active-ipa

После создания пользователя, перейти в домашнюю директорию (далее называемой корневой директорией сервиса):

cd /home/robin-active-ipa

Скопировать в нее предоставленный архив приложения и распаковать его.

cp <путь к архиву> .
tar -xvf robin-active-ipa.tar

Создать виртуальное окружение

python3 -m venv venv

Активировать виртуальное окружение для последующих шагов установки

source venv/bin/activate

Обновить менеджер пакетов pip:

python3 -m pip install --upgrade pip

Установить предоставленные пакеты wheel в режиме оффлайн:

tar -xvf wheelhouse.tar
python3 -m pip install -r requirements.txt --no-index --find-links wheelhouse

Настройка программного обеспечения

Настройка имен сервиса FreeIPA

При установке требуется проверить, и, при необходимости обеспечить корректное разрешение доменного имени удаленного хоста FreeIPA, если это не обеспечивается настройками dns в сети (внимание, корректный доступ к функциям API FreeIPA по ip-адресу невозможен):

sudo vim /etc/hosts

Добавить правило в файл:

<ip address> <freeipa domain name>

Проверить корректность разрешения имени:

ping <freeipa domain name>

Настройка Redis

Настроить Redis с привязкой к локальному адресу. Допустима настройка с применением unix-socket.

sudo vim /etc/redis.conf

Проверить наличие единственной привязки сервиса для протокола IPv4:

...
bind 127.0.0.1
...

Настройка Sync-сервиса

Переменные окружения и настройки

Для хранения настроек можно использовать файл json (рекомендуется), переменные среды окружения (для простых конфигураций), директории с ограниченным доступом (secrets) для хранения учетных записей и паролей для доступа к серверам (например, /var/run/)

Параметры настроек доступа к службе MS Active Directory

Для доступа к AD серверу в настройках должен быть указан его адрес (ad_server), имя пользователя (ad_bind_user), от имени которого сервис будет выполнять запросы к AD серверу и его пароль (ad_bind_pwd).

Пользователи в домене AD могут входить в одну или несколько глобальных групп. Синхронизация пользователей происходит через их вхождение в ту или иную глобальную группу. Имена наблюдаемых групп, пользователи которых подлежат синхронизации с пользователями в домене FreeIPA, задаются в параметре ad_target_group_dn_list.

Для выполнения поиска в учетных записях AD должен быть задан базовый DN поиска - ad_search_base_dn.

Атрибут ad_server

Имя переменной среды (альтернатива): ROBIN_A2I_AD_SERVER

Тип: string

Описание: Адрес хоста Microsoft Active Directory (имя или ip).

Атрибут ad_bind_user

Имя переменной среды (альтернатива): ROBIN_A2I_AD_BIND_USER

Тип: string

Описание: Имя пользователя Microsoft Active Directory.

Атрибут ad_bind_pwd

Имя переменной среды (альтернатива): ROBIN_A2I_AD_BIND_PWD

Тип: string

Описание: Пароль пользователя Microsoft Active Directory.

Атрибут ad_search_base_dn

Имя переменной среды (альтернатива): ROBIN_A2I_AD_SEARCH_BASE_DN

Тип: string

Описание: Базовый DN поиска пользователей в локальном домене Microsoft Active Directory.

Атрибут ad_target_group_dn_list

Имя переменной среды (альтернатива): ROBIN_A2I_AD_TARGET_GROUP_DN

Тип: array[string]

Описание: Наблюдаемые группы в Microsoft Active Directory. При использовании в переменной окружения - строка JSON заключенная в одинарные кавычки. Имеет более низкий приоритет, чем ROBIN_A2I_GROUPS_MATCHING. При работе по этому списку пользователи создаются без принадлежности к какой-либо дополнительной группе

Параметры настроек FreeIPA сервера

Для доступа к FreeIPA серверу в настройках должно быть указано его доменное имя (freeipa_server), имя пользователя (freeipa_bind_user), от имени которого сервис будет выполнять запросы к FreeIPA серверу, DN пользователя (freeipa_bind_user_dn) и его пароль (freeipa_bind_pwd).

Атрибут freeipa_bind_user

Имя переменной среды (альтернатива): ROBIN_A2I_FREEIPA_BIND_USER

Тип: string

Описание: Имя пользователя FreeIPA (CN).

Атрибут freeipa_bind_user_dn

Имя переменной среды (альтернатива): ROBIN_A2I_FREEIPA_BIND_USER_DN

Тип: string

Описание: Имя пользователя FreeIPA (DN).

Атрибут freeipa_bind_pwd

Имя переменной среды (альтернатива): ROBIN_A2I_FREEIPA_BIND_PWD

Тип: string

Описание: Пароль пользователя FreeIPA.

Параметры настроек реплицированных пользователей

Пользователи в FreeIPA располагаются в двух областях:

  • основной - для реплицированных пользователей в случае отсутствия доверенных отношений между AD и FreeIPA.
  • дополнительной - для переопределений пользователей в случае установления доверенных отношений между AD и FreeIPA.

Область для реплицированных пользователей задается параметром freeipa_user_search_base - DN для родительского узла / контейнера пользователей. Область для переопределений задается параметрами freeipa_trust_id_view_dn и freeipa_trust_id_view_cn.

В основной области располагаются также и не модифицируемые сервисом пользователи, зарегистрированные администратором FreeIPA. Эти пользователи указываются в параметре freeipa_readonly_users и не попадают в область действия sync-сервиса.

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

cd /home/robin-active-ipa
./cache-reset --conf=config.json

Атрибут freeipa_user_search_base

Имя переменной среды (альтернатива): ROBIN_A2I_FREEIPA_USER_SEARCH_BASE

Тип: string

Описание: DN для родительского узла / контейнера пользователей.

Атрибут freeipa_trust_id_view_dn

Имя переменной среды (альтернатива): ROBIN_A2I_FREEIPA_TRUST_ID_VIEW_DN

Тип: string

Описание: DN для ID View

Атрибут freeipa_trust_id_view_cn

Имя переменной среды (альтернатива): ROBIN_A2I_FREEIPA_TRUST_ID_VIEW_CN

Тип: string

Описание: CN для ID View.

Атрибут freeipa_readonly_users

Имя переменной среды (альтернатива): ROBIN_A2I_FREEIPA_READONLY_USERS

Тип: array[string]

Описание: Пользователи FreeIPA, которые не должны изменяться при репликации. Указываются короткие имена (uid в терминологии FreeIPA). При использовании в переменной окружения - строка JSON заключенная в одинарные кавычки.

Отображение атрибутов пользователя при репликации

При репликации пользователей AD во FreeIPA транслируются не все их атрибуты, а только их часть. (см. Таблицу 1).

Таблица 1. Отображение атрибутов пользователя при репликации.

Active Directory FreeIPA (user) FreeIPA (id override)
` userPrincipalName`   ipaOriginalUID, ip aAnchorUUID[3]
name, sAMAccountName uid uid
givenname givenname  
cn cn  
name sn  
mail mail  
memberOf memberOf, memberof_group memberOf, memberof_group

Параметры настройки работы Sync-сервиса

Сервис позволяет:

  • создавать пользователей либо их переопределения (параметр create_user_overrides) во FreeIPA из пользователей отдельной группы либо групп, выбранной внутри MS Active Directory (параметр ad_target_group_dn_list),
  • отображать группы Active Directory на указанные группы во FreeIPA, а также отображать участие пользователей в группах соответвии с заданными правилами (параметр groups_matching),
  • удалять пользователей (либо переопределения) FreeIPA, для которых уже не существует оригинала в MS Active Directory (параметр remove_unrelated_freeipa_anchors),
  • отслеживать статус постоянной блокировки пользователей в Active Directory и удалять пользователей FreeIPA, заблокированных в домене AD (параметр remove_disabled_users) ,
  • при необходимости автоматически создавать non-posix группы во FreeIPA и помещать в них пользователей FreeIPA на основе таблицы сопоставления «группа Active Directory - группа FreeIPA» (параметр groups_matching),
  • опционально отслеживать изменения участия пользователя в группах Active Directory и актуализировать участия пользователей FreeIPA в локальных группах на основе таблицы сопоставления (параметр groups_matching),
  • опционально создавать локальные группы, указанные в таблице сопоставления, если они отсутствует во FreeIPA (параметр allow_create_local_groups),
  • хранить предыдущее состояние репликации в кэше для снижения нагрузки на сервера при проверках и репликации (см. настройки Redis Cache),
  • для режима с созданием пользователей во FreeIPA создавать очереди сообщений для отправлять пользовательские уведомлений о регистрации с данными учетной записи (см. настройки SMTP-сервера),
  • параметр search_page_size позволяет ограничивать размер фрагмента результатов для итерационного поиска, единиц записей, а также включать режим «постраничного» итерационного запроса для каталогов Active Directory с большим количеством записей (для решения проблемы с ограничением количества записей в результате запроса в Active Directory).

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

Атрибут create_user_overrides

Имя переменной среды (альтернатива): ROBIN_A2I_CREATE_USER_OVERRIDES

Тип: boolean (true/false)

Описание: Создавать во FreeIPA переопределения пользователей (idoverride) вместо пользователей (user), включено по умолчанию. В переменных среды окружения допустимо указание (yes/no). Значение по умолчанию равно true.

Атрибут freeipa_request_timeout_sec

Имя переменной среды (альтернатива): ROBIN_A2I_FREEIPA_REQUEST_TIMEOUT_SEC

Тип: integer

Описание: Макс время ожидания ответа FreeIPA (сек).

Атрибут remove_unrelated_freeipa_anchors

Имя переменной среды (альтернатива): ROBIN_A2I_REMOVE_UNRELATED_FREEIPA_ANCHORS

Тип: boolean (true/false)

Описание: Удаление пользователей FreeIPA, для которых не найден оригинал в Active Directory. В переменных среды окружения допустимо указание (yes/no).

Атрибут remove_disabled_users

Имя переменной среды (альтернатива): ROBIN_A2I_REMOVE_DISABLED_USERS

Тип: boolean (true/false)

Описание: Удаление пользователей FreeIPA, заблокированных в Active Directory. В переменных среды окружения допустимо указание (yes/no).

Атрибут groups_matching

Имя переменной среды (альтернатива): ROBIN_A2I_GROUPS_MATCHING

Тип: Объект JSON

Описание: Сопоставление групп Active Directory и FreeIPA. Ключи объекта JSON - DN групп Active Directory, значения - DN группы FreeIPA.

Пример значения параметра ``groups_matching``:

{"CN=fake-group-blue,CN=Users,DC=robin,DC=it,DC=ru":"cn=freeipa-blue,cn=groups,cn=accounts,dc=ipa,dc=it,dc=ru",
 "CN=fake-group-green,CN=Users,DC=robin,DC=it,DC=ru":"cn=freeipa-green,cn=groups,cn=accounts,dc=ipa,dc=it,dc=ru"}

Атрибут allow_create_local_groups

Имя переменной среды (альтернатива): ROBIN_A2I_ALLOW_CREATE_LOCAL_GROUPS

Тип: boolean (true/false)

Описание: Разрешить создание групп во FreeIPA если они отсутствуют. В переменных среды окружения допустимо указание (yes/no).

Атрибут search_page_size

Имя переменной среды (альтернатива): ROBIN_A2I_SEARCH_PAGE_SIZE

Тип: integer

Описание: Ограничение на размер фрагмента результатов для итерационного поиска, единиц записей.

Атрибут log_file

Имя переменной среды (альтернатива): ROBIN_A2I_LOG_FILE

Тип: string

Описание: Путь к файлу журнала (относительный, если находится внутри директории сервиса, полный - если расположен во внешних директориях).

Параметры настроек Redis Cache

Сервис позволяет :

  • хранить предыдущее состояние репликации (пользователи, группы) в кэше для снижения нагрузки на сервера при проверках и репликации
  • сверять содержимое кэша и FreeIPA (обратная сверка) - параметр sync_cache_with_freeipa.

Параметры настройки режима работы Redis Cache-сервиса:

  • параметр redis_uri задает адрес (схема://хост:порт) сервера Redis. Возможные схемы: redis://, unix://
  • параметр process_lock_expiration_sec задает интервал времени автоматической очистки флага блокировки (сек),
  • параметр cache_expiration_seconds задает время сброса кэша синхронизации в секундах, отключено - 0,

Атрибут redis_uri

Имя переменной среды (альтернатива): ROBIN_A2I_REDIS_URI

Тип: string

Описание: Адрес (схема://хост:порт) сервера Redis. Возможные схемы: redis://, unix://.

Атрибут process_lock_expiration_sec

Имя переменной среды (альтернатива): ROBIN_A2I_PROCESS_LOCK_EXPIRATION

Тип: integer

Описание: Интервал автоматической очистки флага блокировки (сек).

Атрибут cache_expiration_seconds

Имя переменной среды (альтернатива): ROBIN_A2I_CACHE_EXPIRATION_SECONDS

Тип: integer

Описание: Время сброса кэша синхронизации в секундах, отключено - 0

Атрибут sync_cache_with_freeipa

Имя переменной среды (альтернатива): ROBIN_A2I_SYNC_CACHE_WITH_FREEIPA

Тип: boolean (true/false)

Описание: Сверять содержимое кэша и FreeIPA (обратная сверка). В переменных среды окружения допустимо указание (yes/no).

Параметры настроек SMTP-сервера

SMTP-сервис используется обработчиком очереди сообщений от Sync-сервиса для отправки пользовательских уведомлений. Для настройки SMTP-сервиса используются следующие параметры:

Таблица 2. Параметры настройки работы SMTP-сервиса.

Атрибут настройки Имя переменной среды (альтернатива) Тип Описание
smtp_host ROB IN_A2I_SMTP_HOST string Адрес (имя/ip) шлюза пересылки почты
smtp_port ROB IN_A2I_SMTP_PORT integer Порт шлюза пересылки почты.
smtp_user ROB IN_A2I_SMTP_USER string Имя учетной записи для доступа к шлюзу пересылки почты
smtp_pwd RO BIN_A2I_SMTP_PWD string Пароль учетной записи для доступа к шлюзу пересылки почты

Параметры настроек Notification-сервис

Notification-сервис обрабатывает сообщения от Sync-сервиса о новых пользователях и отправляет им уведомления по электронной почте. Шаблон текста письма:

Уважаемый пользователь!
Для вас зарегистрирована учетная запись в домене linux со следующими данными:
Имя пользователя: $uname
Пароль: $pwd
P.S. Это письмо сформировано автоматически, просьба не отвечать на него.

параметры шаблона:

  • $uname - имя нового пользователя в системе,
  • $pwd - пароль нового пользователя в системе.

Важно. Уведомления пользователям по электронной почте отправляются только в режиме создания пользователей (user) во FreeIPA. В режиме с созданием переопределений (представлений ID) отправка сообщений не применяется. Для отправки сообщений пользователям необходимо, чтобы аттрибут mail в записи пользователя Active Directory содержал актуальное значение действующего адреса пользователя.

Атрибут email_ntf_user_new_template

Имя переменной среды (альтернатива): ROBIN_A2I_EMAIL_NTF_USER_NEW_TEMPLATE

Тип: string

Описание: Путь к файлу шаблона почтового сообщения для новых пользователей.

Атрибут email_ntf_user_new_subject

Имя переменной среды (альтернатива): ROBIN_A2I_EMAIL_NTF_USER_NEW_SUBJECT

Тип: string

Описание: Тема почтового сообщения для новых пользователей.

Атрибут smtp_ntf_sender

Имя переменной среды (альтернатива): ROBIN_A2I_SMTP_NTF_SENDER

Тип: string

Описание: Отправитель почтового сообщения для новых пользователей (поле «from», видимое в сообщении).

Пример шаблона файла конфигурации

Создать файл конфигурации в формате json на основе описания атрибутов из раздела «Переменные окружения и настройки».
Файл может быть создан в корневой директории сервиса, в этом случае при указании имени файла в аргументах вызова сервиса можно использовать только имя файла без полного пути (--conf=config.json).
[admin@host ~] vim config.json

следующего содержания:

{
    "ad_server": "<хост Active Directory>",
    "ad_bind_user": "<имя>",
    "ad_bind_pwd": "<пароль>",
    "ad_search_base_dn": "CN=Users,DC=robin,DC=it,DC=ru",
    "ad_target_group_dn_list": [
        "CN=freeipa-sync-test,CN=Users,DC=robin,DC=it,DC=ru"
    ],
    "freeipa_server": "<имя хоста FreeIPA>",
    "freeipa_bind_user_dn": "uid=<имя>,cn=users,cn=accounts,dc=ipa,dc=it,dc=ru",
    "freeipa_bind_user": "<имя>",
    "freeipa_bind_pwd": "<пароль>",
    "freeipa_readonly_users": [
        "admin@robin.it.ru",
        "user1@robin.it.ru",
        "test@robin.it.ru"
    ],
    "freeipa_trust_id_view_dn": "cn=Default Trust View,cn=views,cn=accounts,dc=ipa,dc=it,dc=ru",
    "freeipa_trust_id_view_cn": "Default Trust View",
    "freeipa_user_search_base": "cn=users,cn=accounts,dc=ipa,dc=it,dc=ru",
    "remove_unrelated_freeipa_anchors": false,
    "remove_disabled_users": false,
    "groups_matching": {
        "CN=fake-group-blue,CN=Users,DC=robin,DC=it,DC=ru": "cn=freeipa-blue,cn=groups,cn=accounts,dc=ipa,dc=it,dc=ru",
        "CN=fake-group-green,CN=Users,DC=robin,DC=it,DC=ru": "cn=freeipa-green,cn=groups,cn=accounts,dc=ipa,dc=it,dc=ru"
    },
    "redis_uri": "redis://127.0.0.1:6379",
    "search_page_size": 50,
    "allow_create_local_groups": true,
    "sync_cache_with_freeipa": false,
    "smtp_host": "127.0.0.1",
    "smtp_port": 2500,
    "smtp_user": "",
    "smtp_pwd": "",
    "email_ntf_user_new_template": "notifyacc.html",
    "create_user_overrides": false,
    "log_file": "events.log"
}

Запуск и остановка сервисов

Запуск Redis

Разрешить автоматический запуск Redis и запустить сервис

sudo systemctl start redis.service
sudo systemctl enable redis

Настройка таблицы cron для запуска сервисов sync и notify

Проверить и скопировать путь к установленному интерпретатору Python.

which python3

Перейти к редактированию таблицы cron

crontab -e

Добавить задания для периодического запуска сервиса и для обработчика очереди сообщений (с указанием пути к ранее созданному файлу конфигурации, в примере - файл находится в корневой директории сервиса):

<* * * * * > /home/robin-active-ipa/sync.sh --conf=config.json # Активация сверки и репликации
<* * * * * > /home/robin-active-ipa/notifications.sh --conf=config.json # Активация сверки и репликации

Примечание. Интервалы выполнения задач указываются в соответствии с синтаксисом таблиц cron, в примере график времени выполнения заключен в угловые скобки. Интервалы запуска sync.sh выбираются с учетом необходимой оперативности обновления данных и с учетом рационального ограничения нагрузки на сервера, интервалы обработки очереди сообщений - порядка 15-30 минут.

Задание парольной политики

Управлять парольными политиками пользователей администратор FreeIPA может через вэб-интерфейс FreeIPA или через командную строку с помощью команд pwpolicy-add и pwpolicy-mod [2].

Задать парольную политику можно также с помощью модуля Ansible - community.general.ipa_pwpolicy [3].

Пример задания для этого модуля:

- name: Modify the global password policy
  community.general.ipa_pwpolicy:
      maxpwdlife: '90'
      minpwdlife: '1'
      historylength: '8'
      minclasses: '3'
      minlength: '16'
      maxfailcount: '6'
      failinterval: '60'
      lockouttime: '600'
      ipa_host: ipa.example.com
      ipa_user: admin
      ipa_pass: topsecret

Смена паролей

Смену пароля пользователь выполняет самостоятельно в своем клиентском приложении (Robin Player, Robin Studio, Robin Management Console). Процедура смены пароля описана в руководстве оператора соответствующего клиентского приложения.

Создание групп и добавление в группы

Создание записи

На примере рассмотрено создание записи, являющейся группой записей о пакетах с роботами Robots For Test.

Замечание: Создание группы пользователей будет описано позже в специальном разделе.

Способ 1 - через Apache Directory Studio

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

  1. Выбрать New - New Entry…
  1. Выбрать Create entry from scratch и нажать кнопку Next:
  1. Выбрать объектные классы, необходимые для создания новой записи, и нажать Next. О том, какие объектные классы выбирать, будет написано позже при рассмотрении каждой конкретной записи.
  1. Ввести RDN новой записи:

  2. Нажать Finish.

Способ 2 - через командную строку с помощью команды ldapadd (с использованием ldif-файла)

Общий вид ldif-файла при использовании команды ldapadd:

dn: DN
attr1: attrValue1
...
attrN: attrValueN
objectClass: objClass1
...
objectClass: objClass2
  • DN - DN новой записи
  • attr1, … , attrN - атрибуты новой записи
  • objClass1, … objClassN - объектные классы, используемые для создания новой записи

Тогда команда будет выглядеть следующим образом:

ldapadd parameters -f path_to_file/file.ldif

parameters - другие параметры команды ldapadd (хост для LDAP-сервера, порт, учётная запись и т. д.)

Пример ldif-файла:

dn: cn=Robots For Test,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
cn: Robots For Test
objectClass: groupOfNames
objectClass: top
objectClass: bootableDevice

Способ 3 - через командную строку с помощью команды ldapadd (без использования ldif-файла)

Ввести команду:

ldapadd parameters

parameters - другие параметры команды ldapadd (хост для LDAP-сервера, порт, учётная запись и т. д.)

После этого ввести остальные данные:

dn: cn=Robots For Test,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
cn: Robots For Test
objectClass: groupOfNames
objectClass: top
objectClass: bootableDevice

Добавление атрибута для записи

В примере рассматривается добавление записи о версии робота Robin.Department.Test2-20201202120913Z в группу Robots For Test.

Это происходит путём добавления атрибута member с DN записи Robin.Department.Test2-20201202120913Z в запись с группой Robots For Test.

Способ 1 - через Apache Directory Studio

Нужно перейти к нужной записи и вызвать контекстное меню для записи (правой кнопкой мыши).

  1. Выбрать New Attribute…

  2. В открывшемся окне набрать «member» в поле ввода Attribute type и нажать Finish.

  3. Нажать Browse…, выбрать нужную запись, нажать OK.

Способ 2 - через командную строку с помощью команды ldapmodify (с использованием ldif-файла)

Общий вид ldif-файла при использовании команды ldapmodify для добавления атрибута:

dn: DN
changetype: modify
add: attrAdd
attrAdd: attrAddValue

где:

  • DN - DN изменяемой записи
  • attrAdd - новый атрибут
  • attrAddValue - значение нового атрибута

Тогда команда будет выглядеть следующим образом:

ldapmodify parameters -f path_to_file/file.ldif

где:

  • parameters - другие параметры команды ldapmodify (хост для LDAP-сервера, порт, учётная запись и т. д.)

Пример ldif-файла:

dn: cn=Robots For Test,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: member
member: cn=Robin.Department.Test2-20201202120913Z,cn=Robin.Department.Test2,cn=Robots,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

Способ 3 - через командную строку с помощью команды ldapmodify (без использования ldif-файла)

Ввести команду:

ldapmodify parameters

где:

  • parameters - другие параметры команды ldapmodify (хост для LDAP-сервера, порт, учётная запись и т. д.)

После этого ввести остальные данные:

dn: cn=Robots For Test,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: member
member: cn=Robin.Department.Test2-20201202120913Z,cn=Robin.Department.Test2,cn=Robots,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

Пользователи и группы пользователей

Для того чтобы пользователь AD мог получить доступ к каталогу IPA, нужно создать переопределение ID этого пользователя в каталоге IPA.

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

Информация о переопределениях:

https://www.freeipa.org/page/V4/Migrating_existing_environments_to_Trust

Пользователи AD, которые будут работать с системой ROBIN должны входить в группу Robin в AD. На одном из доменов леса AD создается локальная группа, в которую добавляются все необходимые пользователи леса AD.

Только для пользователей группы Robin создается переопределение в FreeIPA.

Чтобы добавить переопределение нужно знать полное доменное имя пользователя – ad_user@ad_domain

Получить информацию о пользователях группы Robin может администратор AD через оснастку «Пользователи и компьютеры»

Или под любым аутентифицированным пользователем AD ldap-запросом

Ввести команду:

ldapsearch -D "CN=user,CN=Users,DC=example,DC=com" -w secret -h ad_host.example.com -p 389 -b "CN=Robin,CN=Users,DC=example,DC=com" -s sub "(&(objectClass=group)(cn=Robin))"

В ответе выведутся DN-ы всех пользователей, входящих в группу Robin, из которых можно составить полное доменное имя пользователя.

Создание переопределения ID пользователя из AD выполняется под администратором FreeIPA.

Создание переопределения ID пользователя

Важно: переопределения создаются на основном сервере FreeIPA

Создать переопределение можно через веб-интерфейс FreeIPA или инструмент командной строки.

Способ 1 - через веб-интерфейс FreeIPA

  1. Перейти во вкладку Идентификация - Представления ID.

  2. Если необходимо, то создать новое представление ID. Для этого нажать на кнопку Добавить.

  3. Заполнить все поля и нажать кнопку Добавить.

  4. Перейти к нужному представлению. Нажать кнопку Добавить для переопределения пользователя.

  5. Заполнить все необходимые поля и нажать кнопку Добавить.

Способ 2 - через командную строку с помощью команды ipa idoverrideuser-add

Для использования инструмента командной строки необходимо авторизоваться под административной учетной записью. Например:

kinit admin

Команда для добавления переопределения ID пользователя:

ipa idoverrideuser-add view user

где:

  • view - представление, в которое будет добавлено переопределение пользователя.
  • user - пользователь, для которого нужно добавить переопределение.

Например:

ipa idoverrideuser-add 'Default Trust View' user@robin.itbs.it.ru

Переопределения ID пользователей можно добавлять в группы IPA для организации группового доступа к ресурсам IPA пользователям из AD.

Создание группы пользователей

Группы создаются через веб-интерфейс FreeIPA или инструмент командной строки.

Способ 1 - через веб-интерфейс FreeIPA

  1. Перейти во вкладку Идентификация - Группы.

  2. Нажать кнопку Добавить.

  3. Заполнить необходимые поля и нажать кнопку Добавить.

Способ 2 - через командную строку с помощью команды ipa group-add

Команда для добавления группы пользователей:

ipa group-add --desc=description groupName --nonposix

где:

  • groupName - название группы
  • description - описание группы

Например:

ipa group-add --desc='Accounting robots' my_group --nonposix

Добавление префикса артефактов в группу пользователей

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

В качестве префикса можно, например, указывать сокращенное наименование подразделения, в которое входят пользователи.

Правила именования префикса: допустимы буквы латинского алфавита в верхнем и нижнем регистрах, точка, тире и нижнее подчёркивание.

Группы пользователей расположены в поддереве

cn=groups,cn=accounts

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

Атрибут Значение
objectClass nsCustomView

Затем добавить атрибут c префиксом артефактов:

Атрибут Значение
nsDisplayName Префикс, в названии которого допустимо использовать буквы латинского алфавита в верхнем и нижнем регистрах, точку, тире и нижнее подчёркивание

Пример добавления объектного класса nsCustomView в запись с группой editors:

dn: cn=editors,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: objectClass
objectClass: nsCustomView

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

dn: cn=editors,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: nsDisplayName
nsDisplayName: Robin.Department

Добавление переопределения ID пользователя в группу

Добавление переопределения в группу FreeIPA осуществляется добавлением атрибута member с DN переопределения в качестве значения. То, как это можно сделать, было описано ранее.

Группы пользователей расположены в поддереве

cn=groups,cn=accounts

Переопределения расположены в поддереве

viewRDN,cn=views,cn=accounts

Пример добавления переопределения пользователя :SID:S-1-5-21-3493872076-3631449775-1555872641-29818 в группу robin_developers:

dn: cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: member
member: ipaanchoruuid=:SID:S-1-5-21-3493872076-3631449775-1555872641-29818,cn=Default Trust View,cn=views,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru

Группы записей о пакетах с исходным кодом робота

Запись, являющаяся корневой для групп записей о пакетах с исходным кодом робота

cn=Source Groups,cn=Source Packages,cn=Packages,cn=ROBIN

При создании группы используются следующие объектные классы:

  • groupOfNames
  • bootableDevice

И атрибуты:

Атрибут Многозначность Описание
cn Нет Уникальное наименование группы
serialNumber Нет Идентификатор группы, UUID
description Да, может быть на нескольких языках Описание группы

В группу добавляются записи о пакетах с исходным кодом робота, лежащие в поддереве:

cn=Sources,cn=Source Packages,cn=Packages,cn=ROBIN

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

Можно добавить в группу запись об отдельной версии пакета, лежащую в поддереве:

sourceRDN,cn=Sources,cn=Source Packages,cn=Packages,cn=ROBIN

Пример создания группы Sources For Developers:

dn: cn=Sources For Developers,cn=Source Groups,cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
serialNumber: 840b60de-5a30-11eb-ae93-0242ac130002
description: Description
cn: Sources For Developers
objectClass: bootableDevice
objectClass: top
objectClass: groupOfNames

Пример добавления всех версий Robin.Department.Test в группу Sources For Developers:

dn: cn=Sources For Developers,cn=Source Groups,cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: member
member: cn=Robin.Department.Test,cn=Sources,cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

Пример добавления отдельной версии Robin.Department.Test-20201216082610Z в группу Sources For Developers:

dn: cn=Sources For Developers,cn=Source Groups,cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: member
member: cn=Robin.Department.Test-20201216082610Z,cn=Robin.Department.Test,cn=Sources,cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

Группы записей о пакетах с роботом

Запись, являющаяся корневой для групп записей о пакетах с роботом:

cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN

При создании группы используются следующие объектные классы:

  • groupOfNames
  • bootableDevice

И атрибуты:

Атрибут Многозначность Описание
cn Нет Уникальное наименование группы
serialNumber Нет Идентификатор группы, UUID
description Да, может быть на нескольких языках Описание группы

В группу добавляются записи о пакетах с роботом, лежащие в поддереве:

cn=Robots,cn=Robot Packages,cn=Packages,cn=ROBIN

В этом случае в группу добавятся сразу все записи обо всех версиях пакета с роботом.

Можно добавить в группу запись об отдельной версии пакета, лежащую в поддереве:

robotRDN,cn=Robots,cn=Robot Packages,cn=Packages,cn=ROBIN

Пример создания группы Robots For Users:

dn: cn=Robots For Users,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
serialNumber: 840b60de-5a30-11eb-ae93-0242ac130002
description: Description
cn: Robots For Users
objectClass: bootableDevice
objectClass: top
objectClass: groupOfNames

Пример добавления всех версий Robin.Department.Test в группу Robots For Users:

dn: cn=Robots For Users,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: member
member: cn=Robin.Department.Test,cn=Robots,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

Пример добавления отдельной версии Robin.Department.Test-20201216082610Z в группу Robots For Users:

dn: cn=Robots For Users,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: member
member: cn=Robin.Department.Test-20201216082610Z,cn=Robin.Department.Test,cn=Robots,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

Группы записей о хостах

Запись, являющаяся корневой для групп записей о хостах:

cn=Robot Host Groups,cn=Hosts,cn=ROBIN

При создании группы используются следующие объектные классы:

  • groupOfNames

И атрибуты:

Атрибут Многозначность Описание
cn Нет Уникальное наименование группы
description Да, может быть на нескольких языках Описание группы

В группу добавляются записи о хостах, лежащие в поддереве:

cn=Hosts,cn=Hosts,cn=ROBIN

Пример создания группы Test Host Group:

dn: cn=Test Host Group,cn=Robot Host Groups,cn=Hosts,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
cn: Test Host Group
objectClass: groupOfNames
objectClass: top

Пример добавления записи о хосте Test Host в группу Test Host Groups:

dn: cn=Test Host Group,cn=Robot Host Groups,cn=Hosts,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: member
member: cn=Test Host,cn=Hosts,cn=Hosts,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

Запись о хранилище

Запись, являющаяся корневой для записей о хранилищах:

cn=Storages,cn=ROBIN

При создании записи о хранилище используются следующие объектные классы:

  • nsConfig

И атрибуты:

Атрибут Многозначность Описание
cn Нет Уникальное наименование хранилища
nsDefaultAcceptLanguage Нет Тип хранилища, указывающий на то, какие пакеты лежат в этом хранилище: с исходным кодом роботов (Source) или с роботами (Robot)
nsServerAddress Нет URL хранилища (например, URL сервиса RMS: https://rms-test.rpa-robin.ru/rpm/source или https://rms-test.rpa-robin.ru/rpm/robot)
nsServerSecurity Нет Идентификатор хранилища, UUID - создаётся новый для каждого хранилища
description Да, может быть на нескольких языках Описание хранилища

На данный момент можно создать одну запись с хранилищем исходного кода роботов и одну запись с хранилищем роботов.

Замечание: Идентификатор хранилища и его DN нужно продублировать в rpm.properties (файл свойств Robin Package Manager, находится в каталоге Wildfly: $wildfly_home/modules/rms2/main/properties): nsServerSecurity - в свойстве storage.source.id (для записи о хранилище исходного кода роботов) и storage.robot.id (для записи о хранилище роботов); dn - в свойстве storage.source.dn (для записи о хранилище исходного кода роботов) и storage.robot.dn (для записи о хранилище роботов). Это будет исправлено в следующих обновлениях.

Пример создания хранилища Storage:

dn: cn=Storage,cn=Storages,cn=ROBIN,dc=ipa,dc=it,dc=ru
cn: Storage
nsServerSecurity: a5d9f4d0-a3e8-11eb-bcbc-0242ac130002
nsServerAddress: https://rms-test.rpa-robin.ru/rpm/source
description: Source storage
nsDefaultAcceptLanguage: Source
objectClass: nsConfig
objectClass: top

Управление полномочиями

ACI

Информация, определяющая правила разграничения доступа, представляется в директориях LDAP с помощью специальных атрибутов ACI (Access Control Information instruction), которые могут быть добавлены к любому объекту директории. Атрибут ACI является множественным, то есть может принимать несколько значений, каждое из которых определяет самостоятельную инструкцию разрешающего или запрещающего характера.

Документация:

https://www.freeipa.org/page/FreeIPAv2:Access_Control

Назначение полномочий таких, как регулирование прав пользователей на запуск приложений, выполнение роботов и т. д. выполняется с помощью добавления атрибута ACI к различным записям в дереве LDAP.

Общий вид ACI:

aci: (target)(version 3.0;acl "name";permission bindRules;)

где:

  • target - запись (набор записей), атрибуты (набор атрибутов), к которым регулируется доступ
  • name - наименование ACI
  • permission - права, которые выдаются (или, наоборот, запрещаются) по отношению к target, например. право на чтение
  • bindRules - определяет пользователей, на которых распространяется ACI

Добавление ACI к записи

На примере рассмотрено добавление ACI

(targetattr = "*")(version 3.0; acl "Access to Studio"; allow (read,compare,search)(groupdn = "ldap:///cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

к записи с DN

cn=Studio,cn=Applications,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

Способ 1 - через Apache Directory Studio

Нужно перейти к нужной записи и вызвать контекстное меню для записи (правой кнопкой мыши)

  1. Выбрать New Attribute

  2. В открывшемся окне набрать «aci» в поле ввода Attribute type и нажать Finish

  3. Для атрибута aci добавить значение:

Способ 2 - через командную строку с помощью команды ldapmodify (с использованием ldif-файла)

Допустим, есть следующий файл example.ldif

dn: cn=Studio,cn=Applications,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr = "*")(version 3.0; acl "Access to Studio"; allow (read,compare,search)(groupdn = "ldap:///cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

Тогда команда будет выглядеть следующим образом:

ldapmodify parameters -f path_to_file/example.ldif

parameters - другие параметры команды ldapmodify (хост для LDAP-сервера, порт, учётная запись и т. д.)

Способ 3 - через командную строку с помощью команды ldapmodify (без использования ldif-файла)

Ввести команду:

ldapmodify parameters

parameters - другие параметры команды ldapmodify (хост для LDAP-сервера, порт, учётная запись и т. д.)

После этого ввести остальные данные:

dn: cn=Studio,cn=Applications,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr = "*")(version 3.0; acl "Access to Studio"; allow (read,compare,search)(groupdn = "ldap:///cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

Регулирование прав пользователей на запуск приложений

Право на запуск приложений выдаётся группе пользователей.

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

  1. Создать (если она ещё не создана) группу пользователей, которым будет доступно приложение на запуск
  2. Добавить пользователя в эту группу
  3. Выдать право группе пользователей на запуск приложения

Выдача права группе пользователей на запуск приложения выполняется с помощью добавления ACI к записи с приложением в дереве LDAP.

Приложения, на запуск которых регулируются права - Studio, Robot Player, RMC.

DN в дереве LDAP для Studio:

cn=Studio,cn=Applications,cn=ROBIN

DN в дереве LDAP для Robot Player:

cn=Runner,cn=Applications,cn=ROBIN

DN в дереве LDAP для RMC:

cn=RMC,cn=Applications,cn=ROBIN

ACI имеет общий вид для всех приложений и выглядит следующим образом:

(targetattr = "*")(version 3.0; acl "Access to application"; allow (read,compare,search)(groupdn = "ldap:///userGroupDN");)

где userGroupDN - DN группы пользователей, которой нужно выдать право на запуск приложения.

Пример добавления прав на запуск Studio пользователям группы robin_developers:

dn: cn=Studio,cn=Applications,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr = "*")(version 3.0; acl "Access to Studio"; allow (read,compare,search)(groupdn = "ldap:///cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

Регулирование прав пользователей на модификацию исходного кода роботов

Доступ к исходному коду робота выполняется путём выдачи прав группе пользователей на группу записей с исходным кодом робота.

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

  1. Создать (если она ещё не создана) группу пользователей, которым будет доступна модификация исходного кода роботов
  2. Добавить пользователя в эту группу
  3. Создать (если она ещё не создана) группу записей об исходном коде роботов, которых можно будет модифицировать определённым группам пользователей
  4. Добавить запись об исходном коде робота в эту группу
  5. Выдать право группе пользователей на модификацию исходного кода роботов

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

cn=Source Packages,cn=Packages,cn=ROBIN

Общий вид ACI:

(targetattr!="serialNumber")(targetfilter="(|(&(sourceGroupRDN)(objectClass=groupOfNames))(memberOf=sourceGroupDN))")(version 3.0; acl "Allow to modify sources"; allow (read,search,compare)(groupdn="ldap:///userGroupDN");)

где:

  • sourceGroupRDN - RDN группы записей об исходном коде роботов, на которую нужно выдать права
  • sourceGroupDN - DN группы записей об исходном коде роботов, на которую нужно выдать права
  • userGroupDN - DN группы пользователей, которой нужно выдать права

Пример добавления прав на модификацию исходного кода роботов из группы Sources For Developers пользователям группы robin_developers:

dn: cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr!="serialNumber")(targetfilter="(|(&(cn=Sources For Developers)(objectClass=groupOfNames))(memberOf=cn=Sources For Developers,cn=Source Groups,cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru))")(version 3.0; acl "Allow to modify sources"; allow (read,search,compare)(groupdn="ldap:///cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

Регулирование прав пользователей на запуск роботов

Доступ к роботам выполняется путём выдачи прав группе пользователей на группу записей о пакетах с роботом.

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

  1. Создать (если она ещё не создана) группу пользователей, которым будет доступна группа роботов на запуск
  2. Добавить пользователя в эту группу
  3. Создать (если она ещё не создана) группу записей о пакете с роботами, которых можно будет запускать определённым группам пользователей
  4. Добавить запись о пакете с роботом в эту группу
  5. Выдать право группе пользователей на запуск роботов

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

cn=Robot Packages,cn=Packages,cn=ROBIN

Общий вид ACI:

(targetattr!="serialNumber")(targetfilter="(|(&(robotGroupRDN)(objectClass=groupOfNames))(memberOf=robotGroupDN))")(version 3.0; acl "Allow to execute robots"; allow (read,search,compare)(groupdn="ldap:///userGroupDN");)

где:

  • robotGroupRDN - RDN группы записей о пакетах роботов, на которую нужно выдать права
  • robotGroupDN - DN группы записей о пакетах роботов, на которую нужно выдать права
  • userGroupDN - DN группы пользователей, которой нужно выдать права

Пример добавления прав на запуск роботов из группы Robots For Users пользователям группы robin_users:

dn: cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr!="serialNumber")(targetfilter="(|(&(cn=Robots For Users)(objectClass=groupOfNames))(memberOf=cn=Robots For Users,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru))")(version 3.0; acl "Allow to execute robots"; allow (read,search,compare)(groupdn="ldap:///cn=robin_users,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

Регулирование прав пользователей на добавление записей о пакетах с исходным кодом робота в группы

Регулирование прав пользователей на добавление записей о пакетах с исходным кодом роботов в группы при публикации выполняется путём выдачи прав группе пользователей на группу записей с исходным кодом роботов.

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

  1. Создать (если она ещё не создана) группу пользователей, которым будет доступно добавление записи в группу
  2. Добавить пользователя в эту группу
  3. Создать (если она ещё не создана) группу записей о пакетах с исходным кодом робота, в которую пользователь сможет добавлять новые записи
  4. Выдать право группе пользователей на добавление записей в группу

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

sourceGroupRDN,cn=Source Groups,cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

где sourceGroupRDN - RDN группы записей об исходном коде робота

Общий вид ACI:

(targetattr = "*")(version 3.0; acl "Access to add to the group"; allow (read,compare,search)(groupdn = "ldap:///userGroupDN");)

userGroupDN - DN группы пользователей, которой нужно выдать права

Пример выдачи прав на добавление в группу записей о пакетах с исходным кодом робота Sources For Developers группе пользователей robin_developers:

dn: cn=Sources For Developers,cn=Source Groups,cn=Source Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr = "*")(version 3.0; acl "Access to add to the group"; allow (read,compare,search)(groupdn = "ldap:///cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

Регулирование прав пользователей на добавление записей о пакетах с роботом в группы

Регулирование прав пользователей на добавление записей о пакетах с роботом в группы при публикации выполняется путём выдачи прав группе пользователей на группу роботов.

Таким образом, для того чтобы пользователь смог при публикации робота добавить запись о нём в группу, нужно:

  1. Создать (если она ещё не создана) группу пользователей, которым будет доступно добавление записи в группу
  2. Добавить пользователя в эту группу
  3. Создать (если она ещё не создана) группу записей о пакетах с роботом, в которую пользователь сможет добавлять новые записи
  4. Выдать право группе пользователей на добавление записей в группу

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

robotGroupRDN,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru

robotGroupRDN - RDN группы роботов

Общий вид ACI:

(targetattr = "*")(version 3.0; acl "Access to add to the group"; allow (read,compare,search)(groupdn = "ldap:///userGroupDN");)

userGroupDN - DN группы пользователей, которой нужно выдать права

Пример выдачи прав на добавление в группу роботов Robots For Users группе пользователей robin_developers:

dn: cn=Robots For Users,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr = "*")(version 3.0; acl "Access to add to the group"; allow (read,compare,search)(groupdn = "ldap:///cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

Регулирование прав пользователей на публикацию исходного кода роботов и роботов в хранилище

Регулирование прав пользователей на публикацию исходного кода роботов и роботов в хранилище выполняется путём выдачи прав группе пользователей на хранилище.

Таким образом, для того чтобы пользователь смог при публикации исходного кода робота или робота указать какое-либо хранилище, нужно:

  1. Создать (если она ещё не создана) группу пользователей, которым будет доступна публикация в хранилище
  2. Добавить пользователя в эту группу
  3. Создать (если она ещё не создана) запись с хранилищем исходного кода роботов или роботов
  4. Выдать право группе пользователей на публикацию в это хранилище

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

storageRDN,cn=Storages,cn=ROBIN

storageRDN - RDN хранилища исходного кода роботов или роботов

Общий вид ACI:

(targetattr = "*")(version 3.0; acl "Access to push to the storage"; allow (read,compare,search)(groupdn = "ldap:///userGroupDN");)

userGroupDN - DN группы пользователей, которой нужно выдать право

Пример выдачи прав на публикацию в хранилище Nexus Robot Storage группе пользователей robin_developers:

dn: cn=Nexus Robot Storage,cn=Storages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr = "*")(version 3.0; acl "Access to push to the storage"; allow (read,compare,search)(groupdn = "ldap:///cn=robin_developers,cn=groups,cn=accounts,dc=ipa,dc=itbs,dc=it,dc=ru");)

Регулирование прав на запуск робота на хосте

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

Таким образом, для того чтобы робот мог запускаться на нужном хосте, нужно:

  1. Создать (если она ещё не создана) группу записей о пакетах с роботом, которым можно будет выполняться на каком-то хосте
  2. Добавить запись о пакете с роботом в эту группу
  3. Создать (если она ещё не создана) группу хостов, на которой можно будет выполняться группе роботов
  4. Добавить запись о хосте в эту группу
  5. Выдать право группе роботов на выполнение на группе хостов

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

cn=Hosts,cn=Hosts,cn=ROBIN

Общий вид ACI:

(targetattr="*")(targetfilter="(memberOf=hostGroupDN)")(version 3.0; acl "Allow to execute on host"; allow (read,search,compare)(groupdn="ldap:///robotGroupDN");)

где:

  • hostGroupDN - DN группы хостов
  • robotGroupDN - DN группы записей о пакетах с роботом

Пример выдачи прав группе роботов Robots For Execute выполняться на группе хостов Development Host Group:

dn: cn=Hosts,cn=Hosts,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru
changetype: modify
add: aci
aci: (targetattr="*")(targetfilter="(memberOf=cn=Development Host Group,cn=Robot Host Groups,cn=Hosts,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru)")(version 3.0; acl "Allow to execute on host"; allow (read,search,compare)(groupdn="ldap:///cn=Robots For Execute,cn=Robot Groups,cn=Robot Packages,cn=Packages,cn=ROBIN,dc=ipa,dc=itbs,dc=it,dc=ru");)

Регулирование прав пользователей на группы действий

По умолчанию всем группам пользователей выдаются права на все группы действий. За это отвечает атрибут aci для записи

cn=Packages,cn=ROBIN

имеющий вид:

(targetattr="*")(targetfilter="(|(&(cn=*)(nsValueType=Supergroup))(memberOf=cn=*,cn=Supergroups,cn=Action Packages,cn=Packages,cn=ROBIN,dc=domain,dc=ru))")(version 3.0; acl "Allow to use supergroups"; allow (read,search,compare)(userdn="ldap:///all");)

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

(targetattr="*")(targetfilter="(&(|(&(cn=*)(nsValueType=Supergroup))(memberOf=cn=*,cn=Supergroups,cn=Action Packages,cn=Packages,cn=ROBIN,dc=domain,dc=ru))(!(|(&(cn=actionGroupCn1)(nsValueType=Supergroup))(memberOf=cn=actionGroupCn1,cn=Supergroups,cn=Action Packages,cn=Packages,cn=ROBIN,dc=domain,dc=ru)))(!(|(&(cn=actionGroupCnN)(nsValueType=Supergroup))(memberOf=cn=actionGroupCnN,cn=Supergroups,cn=Action Packages,cn=Packages,cn=ROBIN,dc=domain,dc=ru))))")(version 3.0; acl "Allow to use supergroups"; allow (read,search,compare)(userdn="ldap:///all");)

actionGroupCn1,…,actionGroupCnN - cn записей о группах действий, которые нужно исключить

На «робота как действие» действуют такие же правила, как и на действия.

[1]Первичное значение при создании переопределения, во внутреннем представлении FreeIPA идентификатор ipaAnchorUUID может заменяться на ссылку SID.
[2]Первичное значение при создании переопределения, во внутреннем представлении FreeIPA идентификатор ipaAnchorUUID может заменяться на ссылку SID.
[3]Первичное значение при создании переопределения, во внутреннем представлении FreeIPA идентификатор ipaAnchorUUID может заменяться на ссылку SID.