Введение¶
В примерах используются:
инструменты IPA CLI (устанавливаются при установке FreeIPA)
веб-интерфейс FreeIPA (устанавливается при установке FreeIPA)
инструменты ldap-utils (ldapadd, ldapmodify)
Установка сервера 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:
Замечания по установке
- Синхронизировать время с контроллером домена AD, с которым планируется интегрироваться. Для этого настроить сервер FreeIPA на синхронизацию с тем же NTP сервером, что и AD
FreeIPA должен иметь собственный основной домен, т.е. не быть поддоменом AD. Домен FreeIPA для AD является отдельным лесом
Создаваемая область Kerberos (название домена с большой буквы) не должна конфликтовать с существующими областями
Устанавливать вместе с интегрированным DNS сервером (нужен флаг –setup-dns при установке)
Перед настройкой доверительных отношений между доменами 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
Создать одностороннее доверие леса FreeIPA конкретному домену или лесу AD на ваше усмотрение
Пошаговая инструкция по установке кластера FreeIPA для Centos 7¶
Установка основного сервера FreeIPA¶
Залогиниться под пользователем
root- Обновить установленные в ОС пакеты:
yum update -y - Установить полное доменное имя хоста:
hostnamectl set-hostname <ipa_hostname_1.ipa_domain> Прописать в
/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>
Отключить назначение 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
- Установить необходимые пакеты для установки FreeIPA и настройки доверительных отношений с AD
yum install -y ipa-server ipa-server-trust-ad ipa-server-dns bind bind-dyndb-ldap - Установить сервер IPA
ipa-server-install -a <admin_password> -p <dm_password> --domain=<ipa_domain> --realm=<IPA_DOMAIN> --mkhomedir --setup-dns --no-forwarders -U
где:
admin_password- пароль учетной записи admindm_password- пароль учетной записи Directory Managerdomain- название домена IPA должно отличаться от существующего домена AD и не быть поддоменом AD или наоборот.realm- название домена в верхнем регистре
- Получить билет администратора IPA:
kinit admin Проверить, что пользователи IPA доступны для системных служб:
id admin getent passwd admin
Если вышеуказанные команды не работают, перезапустите службу sssd и
попробуйте их снова.
Настройка доверительных отношений с AD¶
Запустить
ipa-adtrust-install(необходимо запустить на каждом мастер-сервере IPA):ipa-adtrust-install --netbios-name=<ipa_netbios> -a <admin_password>
где
ipa_netbios- первый компонент доменного имени (например, если домен -ipadomain.example.com,NetBIOS - IPADOMAIN)- Вендор FreeIPA рекомендует отключить
firewalldи включитьiptables.Отключитьfirewalld:systemctl stop firewalld systemctl mask firewalld
Установить
iptables:yum install -y iptables-services systemctl enable iptables
Исправить конфигурацию с целью открыть необходимые порты:
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
Перезагрузить сервис:
service iptables restart
Установить NTP и настроить синхронизацию с ntp-сервером. Требуется открыть порт 123 (указан в конфигурации
iptables)yum install -y ntp
При необходимости указать свои ntp-сервера в конфиге
vi /etc/ntp.conf
Запустить службу
ntpdи включить автозапуск:systemctl start ntpd systemctl enable ntpd
Проверить временную зону. Должна совпадать с зоной сервера AD:
timedatectl | grep "Time zone"
и исправить, если отличается:
timedatectl set-timezone Europe/Moscow
- Настроить DNS. Сервер AD и сервер IPA должны видеть друг друга по доменному имени.На контроллере домена AD добавить сервер условной пересылки для домена IPA:
C:\> dnscmd 127.0.0.1 /ZoneAdd <ipa_domain> /Forwarder <main_ip>
На сервере IPA в сетевых настройках указать в DNS1 - IP основного сервера IPA, DNS2 - IP резервного
vi /etc/sysconfig/network-scripts/ifcfg-ens192
Перезагрузить сеть:
service network restart
и добавить сервер условной пересылки для домена AD:
ipa dnsforwardzone-add <ad_domain> --forwarder=<ad_ip_address> --forward-policy=only
Установить доверительные отношения с доменом AD (потребуется ввести пароль):
ipa trust-add --type=ad <ad_domain> --admin <admin> --password
ad_domain- название домена AD, с которым необходимо установить доверительные отношенияadmin- учетная запись входящая в группу «Администраторы домена»
Команда создаст одностороннее доверительное отношение IPA домену AD. Вариант установки доверительных отношений по общему паролю:
ipa trust-add --type=ad ad_domain --trust-secret
Команда запросит общий пароль, который генерируется в AD. Так же возможно создать доверительные отношения через web-интерфейс IPA во вкладке IPA Server - Trusts или в оснастке «Домены и доверие» на контроллере домена AD.
Получить список доверенных доменов леса со стороны AD
ipa trust-fetch-domains <ad_domain>
Установка резервного сервера FreeIPA¶
Залогиниться под пользователем
root- Обновить установленные в ОС пакеты:
yum update -y - Установить полное доменное имя хоста:
hostnamectl set-hostname <ipa_hostname_2.ipa_domain> Прописать в
/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>
Отключить назначение 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
Отключить
firewalld:systemctl stop firewalld systemctl mask firewalld
Установить
iptables:yum install -y iptables-services systemctl enable iptables
Исправить конфигурацию с целью открыть необходимые порты:
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
Перезагрузить сервис:
service iptables restart
Установить NTP и настроить синхронизацию с ntp-сервером. Требуется
открыть порт 123 (указан в конфигурации
iptables)yum install -y ntp
- При необходимости указать свои ntp-сервера в конфиге
vi /etc/ntp.conf
- Запустить службу
ntpdи включить автозапуск:
systemctl start ntpd systemctl enable ntpd
- Проверить временную зону. Должна совпадать с зоной сервера AD:
timedatectl | grep "Time zone"
и исправить, если отличается:
timedatectl set-timezone Europe/Moscow
- В сетевых настройках указать в DNS1 - IP основного сервера IPA, в DNS2 - IP резервного:
vi /etc/sysconfig/network-scripts/ifcfg-ens192
- Перезагрузить сеть
service network restart
- Установить необходимые пакеты для установки реплики FreeIPA и
настройки доверительных отношений с AD
yum -y install ipa-server ipa-server-trust-ad ipa-server-dns bind bind-dyndb-ldap
- Зарегистрировать хост на основном сервере IPA:
ipa-client-install --domain=<ipa_domain> --realm=<IPA_DOMAIN> --server=<ipa_hostname_1.ipa_domain>В ходе установки ответить на вопросы -yesи ввести логин/пароль администратора IPAProceed with fixed values and no DNS discovery? [no]: yes
- На основном сервере IPA добавить хост
<ipa_hostname_2>в группу
ipaservers:ipa hostgroup-add-member ipaservers --hosts <ipa_hostname_2.ipa_domain>
- На резервном сервере запустить:
ipa-replica-installИгнорируем ошибку Reverse DNS
- На резервном сервере установить DNS:
ipa-dns-installОтвечаем «no» на вопросы про серверы условной пересылкиНа контроллере домена AD добавить IP адрес резервного сервера в серверы условной пересылки для домена IPA:![]()
- На резервном сервере установить СА сервер
ipa-ca-install
- На резервном сервере запустить ipa-adtrust-install
ipa-adtrust-install --netbios-name=<ipa_netbios> -a <admin_password>
Импорт каталога ROBIN¶
После установки и настройки сервера FreeIPA, в его каталог импортируется ветка ROBIN, используемая приложениями системы. Импорт осуществляется выполнением инструкций, содержащихся в LDIF-файлах.
Для импорта и последующих изменений каталога используется ldap-браузер Apache Directory Studio.
В LDIF-файлах по всему тексту заменяется корневая запись домена «dc=domain,dc=ru» на соответствующую вашему домену FreeIPA:
С помощью 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}В Linux:
cd {директория с ldif-файлами} dn={корневой DN FreeIPA} find . -type f -name '*.ldif' -exec sed -i -r 's/dc=domain,dc=ru/'$dn'/g' {} \;
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-сервис:
В начале проверяет состояние флага защиты от повторного запуска: если он установлен, то сервис прекращает работу, поскольку предыдущий запуск сервиса не завершил свой цикл работ. В этом случае стоит проанализировать расписание запуска сервиса - не слишком ли часто он вызывается?
Если флаг защиты от повторного запуска не установлен, то Sync-сервис устанавливает его, тем самым блокируя возможные запуски сервиса до завершения текущего.
Выполняет запрос к службе каталогов для получения списка пользователей. Запрос выполняется и обрабатывается по-фрагментно.
Выполняет сравнение результата поиска с образом кэша.
При необходимости выполняет запрос списка пользователей для сверки синхронности кэша.
Если изменений нет, то выполняется переход к п.8.
Если есть изменения, то выполняется процесс репликации - сервис отрабатывает изменения на сервере FreeIPA:
- добавляет новых пользователей или создает их переопределения в зависимости от значения параметра create_user_overrides;
- удаляет неактуальные записи пользователей;
- удаляет из домена FreeIPA пользователей, заблокированных в домене AD;
- устанавливает участие пользователей в группах;
- сохраняет текущее состояние репликации в кэше для снижения нагрузки на сервера при проверках и репликации;
- в случае регистрации новых пользователей отправляет сообщения сервису оповещения (notification-сервис).
По окончании своей работы выполняет сброс флага защиты от повторного запуска.
Диаграмма основных действий Notification-сервиса¶
Notification-сервис:
Принимает сообщения от Sync-сервиса о регистрации новых пользователей.
Формирует по шаблону сообщения для новых пользователей.
Вызывает сервис отправки сообщений новым пользователям.
Установка программного обеспечения¶
Требования к программному обеспечению¶
Для корректной работы сервиса репликации на сервере должны быть установлены:
- 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
Установка сервиса репликации¶
Для работы сервиса не требуется полномочий 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_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», видимое в сообщении).
Пример шаблона файла конфигурации¶
--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). Процедура смены пароля описана в руководстве оператора соответствующего клиентского приложения.
Ссылки¶
- Active Directory trust setup. - https://www.freeipa.org/page/Active_Directory_trust_setup
- Defining Password Policies - https://docs.fedoraproject.org/en-US/Fedora/18/html/FreeIPA_Guide/user-pwdpolicy.html
- Manage FreeIPA password policies - https://docs.ansible.com/ansible/latest/collections/community/general/ipa_pwpolicy_module.html
Создание групп и добавление в группы¶
Создание записи¶
На примере рассмотрено создание записи, являющейся группой записей о пакетах с роботами Robots For Test.
Замечание: Создание группы пользователей будет описано позже в специальном разделе.
Способ 1 - через Apache Directory Studio¶
Нужно перейти к записи, относительно которой будет создаваться новая, и кликнуть на неё правой кнопкой мыши.
- Выбрать New - New Entry…
- Выбрать Create entry from scratch и нажать кнопку Next:
- Выбрать объектные классы, необходимые для создания новой записи, и нажать Next. О том, какие объектные классы выбирать, будет написано позже при рассмотрении каждой конкретной записи.
Ввести RDN новой записи:
Нажать 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¶
Нужно перейти к нужной записи и вызвать контекстное меню для записи (правой кнопкой мыши).
Выбрать New Attribute…
В открывшемся окне набрать «member» в поле ввода Attribute type и нажать Finish.
Нажать 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¶
Перейти во вкладку Идентификация - Представления ID.
Если необходимо, то создать новое представление ID. Для этого нажать на кнопку Добавить.
Заполнить все поля и нажать кнопку Добавить.
Перейти к нужному представлению. Нажать кнопку Добавить для переопределения пользователя.
Заполнить все необходимые поля и нажать кнопку Добавить.
Способ 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¶
Перейти во вкладку Идентификация - Группы.
Нажать кнопку Добавить.
Заполнить необходимые поля и нажать кнопку Добавить.
Способ 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¶
Нужно перейти к нужной записи и вызвать контекстное меню для записи (правой кнопкой мыши)
Выбрать New Attribute
В открывшемся окне набрать «aci» в поле ввода Attribute type и нажать Finish
Для атрибута 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");)
Регулирование прав пользователей на запуск приложений¶
Право на запуск приложений выдаётся группе пользователей.
Таким образом, для того чтобы пользователь смог запустить какое-либо приложение, нужно:
- Создать (если она ещё не создана) группу пользователей, которым будет доступно приложение на запуск
- Добавить пользователя в эту группу
- Выдать право группе пользователей на запуск приложения
Выдача права группе пользователей на запуск приложения выполняется с помощью добавления 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");)
Регулирование прав пользователей на модификацию исходного кода роботов¶
Доступ к исходному коду робота выполняется путём выдачи прав группе пользователей на группу записей с исходным кодом робота.
Таким образом, для того чтобы пользователь смог модифицировать какой-то исходный код робота, создать из него робота или новую версию исходного кода, нужно:
- Создать (если она ещё не создана) группу пользователей, которым будет доступна модификация исходного кода роботов
- Добавить пользователя в эту группу
- Создать (если она ещё не создана) группу записей об исходном коде роботов, которых можно будет модифицировать определённым группам пользователей
- Добавить запись об исходном коде робота в эту группу
- Выдать право группе пользователей на модификацию исходного кода роботов
Выдача прав группе пользователей выполняется с помощью добавления 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");)
Регулирование прав пользователей на запуск роботов¶
Доступ к роботам выполняется путём выдачи прав группе пользователей на группу записей о пакетах с роботом.
Таким образом, для того чтобы пользователь смог запускать какого-то робота, нужно:
- Создать (если она ещё не создана) группу пользователей, которым будет доступна группа роботов на запуск
- Добавить пользователя в эту группу
- Создать (если она ещё не создана) группу записей о пакете с роботами, которых можно будет запускать определённым группам пользователей
- Добавить запись о пакете с роботом в эту группу
- Выдать право группе пользователей на запуск роботов
Выдача прав группе пользователей выполняется с помощью добавления 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");)
Регулирование прав пользователей на добавление записей о пакетах с исходным кодом робота в группы¶
Регулирование прав пользователей на добавление записей о пакетах с исходным кодом роботов в группы при публикации выполняется путём выдачи прав группе пользователей на группу записей с исходным кодом роботов.
Таким образом, для того чтобы пользователь смог при публикации пакета с исходным кодом робота добавить запись о нём в группу, нужно:
- Создать (если она ещё не создана) группу пользователей, которым будет доступно добавление записи в группу
- Добавить пользователя в эту группу
- Создать (если она ещё не создана) группу записей о пакетах с исходным кодом робота, в которую пользователь сможет добавлять новые записи
- Выдать право группе пользователей на добавление записей в группу
Выдача прав группе пользователей выполняется с помощью добавления 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");)
Регулирование прав пользователей на добавление записей о пакетах с роботом в группы¶
Регулирование прав пользователей на добавление записей о пакетах с роботом в группы при публикации выполняется путём выдачи прав группе пользователей на группу роботов.
Таким образом, для того чтобы пользователь смог при публикации робота добавить запись о нём в группу, нужно:
- Создать (если она ещё не создана) группу пользователей, которым будет доступно добавление записи в группу
- Добавить пользователя в эту группу
- Создать (если она ещё не создана) группу записей о пакетах с роботом, в которую пользователь сможет добавлять новые записи
- Выдать право группе пользователей на добавление записей в группу
Выдача прав группе пользователей выполняется с помощью добавления 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");)
Регулирование прав пользователей на публикацию исходного кода роботов и роботов в хранилище¶
Регулирование прав пользователей на публикацию исходного кода роботов и роботов в хранилище выполняется путём выдачи прав группе пользователей на хранилище.
Таким образом, для того чтобы пользователь смог при публикации исходного кода робота или робота указать какое-либо хранилище, нужно:
- Создать (если она ещё не создана) группу пользователей, которым будет доступна публикация в хранилище
- Добавить пользователя в эту группу
- Создать (если она ещё не создана) запись с хранилищем исходного кода роботов или роботов
- Выдать право группе пользователей на публикацию в это хранилище
Выдача прав группе пользователей выполняется с помощью добавления 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");)
Регулирование прав на запуск робота на хосте¶
Регулирование прав на запуск робота на хосте выполняется путём выдачи прав группе роботов выполняться на группе хостов.
Таким образом, для того чтобы робот мог запускаться на нужном хосте, нужно:
- Создать (если она ещё не создана) группу записей о пакетах с роботом, которым можно будет выполняться на каком-то хосте
- Добавить запись о пакете с роботом в эту группу
- Создать (если она ещё не создана) группу хостов, на которой можно будет выполняться группе роботов
- Добавить запись о хосте в эту группу
- Выдать право группе роботов на выполнение на группе хостов
Выдача прав группе роботов выполняется с помощью добавления 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");)
| [1] | Первичное значение при создании переопределения, во внутреннем представлении FreeIPA идентификатор ipaAnchorUUID может заменяться на ссылку SID. |
| [2] | Первичное значение при создании переопределения, во внутреннем представлении FreeIPA идентификатор ipaAnchorUUID может заменяться на ссылку SID. |
| [3] | Первичное значение при создании переопределения, во внутреннем представлении FreeIPA идентификатор ipaAnchorUUID может заменяться на ссылку SID. |