FreeIPA: что это и как развернуть на Rocky Linux 9 — пошагово
Москва, Щёлковское шоссе, д. 92, корп. 7 · Пн–Пт 9:00–19:00 · +7 903 729-62-41
· 18 мин чтения

FreeIPA для Linux-парка: централизованная аутентификация без Microsoft на 45 сотрудников

FreeIPA для Linux-парка: централизованная аутентификация без Microsoft на 45 сотрудников

FreeIPA централизует аутентификацию Linux-парка без Microsoft AD. За 15 лет мы в ITFresh развернули около двух десятков FreeIPA-инсталляций — от небольших на десяти узлах до распределённых систем с репликами в трёх дата-центрах. Один из таких проектов — государственный подрядчик из Новосибирска: 45 сотрудников, 8 Linux-серверов, задача — полностью вывести Microsoft Active Directory из контура, сохранив дисциплину доступа.

Почему клиент пришёл именно к FreeIPA

До нашего появления там творился настоящий хаос. На каждом из 8 серверов была своя, уникальная копия /etc/passwd. Пароли, конечно, не совпадали. SSH-ключи просто валялись в authorized_keys, и никто не думал об их ротации. Уволили сотрудника? Админ каждый раз вручную лез на все 8 машин. Доходило до того, что однажды про два сервера вообще забыли, и учётка без проблем провисела полгода — классический источник проблем с безопасностью.

На переговорах мы быстро выявили пять основных проблем, которые буквально кричали о решении:

Наша рекомендация была однозначна: FreeIPA. Мы сразу же приступили к проекту. Всего восемь рабочих дней, бюджет — 240 000 рублей. Всё чётко.

Архитектура и компоненты стека

FreeIPA по сути — это не один продукт, а пачка open-source компонентов, собранная в единый инсталлятор. Под капотом работают 389 Directory Server, MIT Kerberos KDC, Dogtag CA для PKI, интегрированный BIND DNS и клиентский SSSD для кеширования. Всё это управляется через CLI ipa и веб-интерфейс на 443-м порту.

Какой сайзинг мы выбрали для этого клиента? Основной сервер — 4 vCPU и 8 ГБ RAM, конечно, на Rocky Linux 9. Для реплики взяли точно такие же параметры, но её разместили на отдельном гипервизоре для надёжности. По диску: 40 ГБ оказалось с головой. Почему? База 389 DS, как мы знаем, растёт крайне медленно, а логи Dogtag вообще крутятся по расписанию, автоматически. Так что лишнее место там просто не нужно. Все эти виртуалки мы развернули на нашем кластере Dell Xeon Platinum 8280, который находится в дата-центре МТС Москва, а с офисом клиента всё связали через надёжный VPN-туннель. Работает как часы!

Установка сервера FreeIPA на Rocky Linux 9

Первый шаг, но очень важный: подготовка машины. Это четверть всего успеха! Что делаем? Выставляем полный FQDN, затем настраиваем синхронизацию времени — Kerberos, как известно, на дух не переносит дрейф часов больше пяти минут. И, конечно, открываем нужные порты:

hostnamectl set-hostname ipa.gk.local
echo "10.0.1.10 ipa.gk.local ipa" >> /etc/hosts

dnf install -y chrony
systemctl enable --now chronyd
chronyc tracking

firewall-cmd --permanent --add-service={freeipa-ldap,freeipa-ldaps,dns,ntp,http,https,kerberos,kpasswd}
firewall-cmd --reload
dnf update -y

Затем идёт установка серверного модуля IDM и запуск инсталлятора. Лично я всегда предпочитаю unattended-режим. Зачем? Чтобы не тратить время на бесконечные вопросы в процессе и не допустить зависаний, мы используем заранее выставленные пароли.

dnf install -y @idm:DL1
dnf install -y ipa-server ipa-server-dns ipa-server-trust-ad

ipa-server-install \
    --realm=GK.LOCAL \
    --domain=gk.local \
    --ds-password='DirMgr-Str0ng!' \
    --admin-password='Adm1n-Str0ng!' \
    --hostname=ipa.gk.local \
    --ip-address=10.0.1.10 \
    --setup-dns \
    --forwarder=8.8.8.8 \
    --forwarder=1.1.1.1 \
    --no-reverse \
    --mkhomedir \
    --unattended

Сама инсталляция занимает всего 12-15 минут. За это время система успевает сгенерировать корневой сертификат Dogtag, инициализировать Kerberos-реалм, запустить 389 DS и поднять DNS-зону. А сразу после завершения — обязательная проверка:

kinit admin
ipa user-find --all
ipa config-show

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

Создаём базовые группы под отделы, а пользователей заливаем пачкой из CSV. У нашего клиента был экспорт из 1С:ЗУП — пригодилось. Скрипт на баше по файлу users.csv:

while IFS=',' read -r login first last email group; do
    ipa user-add "$login" --first="$first" --last="$last" --email="$email" --password <<< 'Temp-P@ss2025!'
    ipa group-add-member "$group" --users="$login"
done < users.csv

# Строгая политика паролей для админов
ipa pwpolicy-add sysadmins \
    --maxlife=60 --minlife=1 --history=12 \
    --minclasses=4 --minlength=14 \
    --maxfail=3 --lockouttime=600 --priority=10

И вот, по щелчку пальцев: 45 аккаунтов уже в LDAP! С временным паролем Temp-P@ss2025! и принудительной сменой при первом же входе, разумеется.

Подключение 8 серверов командой ipa-client-install

А вот этот этап — чистая механика. На каждом клиентском хосте нужно проделать, по сути, одно и то же: меняется лишь FQDN. Чтобы не тратить уйму времени на рутину, мы заботливо завернули все действия в Ansible-плейбук. В итоге смогли прогнать всю операцию буквально за час! Базовый сценарий выглядит так:

# На клиенте меняем DNS-резолвер на FreeIPA
nmcli con mod eth0 ipv4.dns 10.0.1.10
nmcli con up eth0

hostnamectl set-hostname web01.gk.local
echo "10.0.1.20 web01.gk.local web01" >> /etc/hosts

# Rocky/AlmaLinux
dnf install -y ipa-client
# Ubuntu/Debian
# apt install -y freeipa-client

ipa-client-install \
    --domain=gk.local --realm=GK.LOCAL \
    --server=ipa.gk.local \
    --principal=admin --password='Adm1n-Str0ng!' \
    --mkhomedir --enable-dns-updates --unattended

Как только хост зарегистрирован, он моментально появляется в базе FreeIPA. SSSD в свою очередь автоматически подтягивает всю необходимую конфигурацию. После этого обязательно проверяем: пользователь корректно резолвится и без проблем может залогиниться.

id ivanov
# uid=1234(ivanov) gid=1234(ivanov) groups=1234(ivanov),5001(developers)
ssh ivanov@web01.gk.local

HBAC и sudo — разграничение доступа

Без HBAC (Host-Based Access Control) любой пользователь FreeIPA получает шелл на любой машине, присоединённой к домену. Это классическая ошибка при первом развёртывании. Первым делом гасим дефолтное правило allow_all и строим матрицу групп.

ПравилоКтоКудаСервисы
sysadmin-all-accesssysadminsвсе хостыsshd, login, sudo
developers-webdevelopersweb-serverssshd, login
dba-db-accessdbadb-serverssshd, login, sudo
monitoringzbx-agentвсе хостыsshd
emergencyroot-break-glassвсе хостывсе (disabled)
ipa hbacrule-disable allow_all
ipa hostgroup-add web-servers --desc="Веб-серверы"
ipa hostgroup-add-member web-servers --hosts=web01.gk.local --hosts=web02.gk.local

ipa hbacrule-add developers-web --desc="Devs -> web hosts"
ipa hbacrule-add-user developers-web --groups=developers
ipa hbacrule-add-host developers-web --hostgroups=web-servers
ipa hbacrule-add-service developers-web --hbacsvcs=sshd --hbacsvcs=login

# Проверка до применения
ipa hbactest --user=ivanov --host=db01.gk.local --service=sshd
# Access granted: False  — то, что нужно

Sudo-правила строятся аналогично — через sudocmd, sudocmdgroup и sudorule. Например, дать разработчикам перезапускать только nginx и php-fpm на веб-узлах:

ipa sudocmd-add "/usr/bin/systemctl restart nginx"
ipa sudocmd-add "/usr/bin/systemctl restart php-fpm"
ipa sudocmdgroup-add nginx-restart
ipa sudocmdgroup-add-member nginx-restart \
    --sudocmds="/usr/bin/systemctl restart nginx" \
    --sudocmds="/usr/bin/systemctl restart php-fpm"

ipa sudorule-add dev-restart-web --hostcat=
ipa sudorule-add-user dev-restart-web --groups=developers
ipa sudorule-add-host dev-restart-web --hostgroups=web-servers
ipa sudorule-add-allow-command dev-restart-web --sudocmdgroups=nginx-restart

Dogtag CA и автовыпуск TLS-сертификатов

Встроенный удостоверяющий центр — один из главных бонусов FreeIPA. Сертификаты для внутренних веб-сервисов выпускаются с помощью команды certmonger и продлеваются автоматически — не приходится каждый год тратиться на аналоги Let's Encrypt или мучиться с acme.sh там, где сервис попросту не доступен из интернета. Экономия времени и нервов.

# Регистрируем service principal
ipa service-add HTTP/web01.gk.local

# Запрашиваем сертификат и команду перезагрузки nginx
ipa-getcert request \
    -K HTTP/web01.gk.local \
    -D web01.gk.local \
    -f /etc/pki/tls/certs/web01.pem \
    -k /etc/pki/tls/private/web01.key \
    -N CN=web01.gk.local \
    -C '/usr/bin/systemctl reload nginx'

ipa-getcert list
# status: MONITORING — certmonger сам продлит за 28 дней до истечения

Корневой CA раздаётся клиентам через ipa-client-install автоматически — он ложится в /etc/ipa/ca.crt и добавляется в системный доверенный bundle. Браузеры на рабочих местах красного экрана не показывают.

Результаты внедрения и цифры

Мы успешно завершили проект ровно в запланированные 8 рабочих дней. Как распределилось время? Два дня ушло на развёртывание основной пары серверов с репликой. Ещё четыре дня мы потратили на подключение абсолютно всех клиентских машин и ювелирную настройку политик доступа. И последние два дня? Тщательное тестирование, а также обучение персонала. В итоге вот что мы имеем:

Грабли, на которые я наступал

За годы нашей практики мы собрали внушительный список типичных ошибок. Если вы впервые взялись за FreeIPA, рекомендую присмотреться — это поможет сэкономить вам не часы, а целые дни!

FAQ — вопросы по FreeIPA

Чем FreeIPA отличается от OpenLDAP?
OpenLDAP — это просто каталог. FreeIPA — готовый стек из 389 Directory Server, MIT Kerberos, Dogtag CA, интегрированного DNS и SSSD. То есть вы получаете не только LDAP-хранилище, но и SSO, встроенный удостоверяющий центр, веб-панель управления и клиентскую часть из коробки.
Что произойдёт при падении FreeIPA-сервера?
Ранее вошедшие пользователи продолжат работать благодаря кешу SSSD (cache_credentials = True). Новые логины и изменения политик не применятся. Для продакшена я всегда поднимаю вторую реплику командой ipa-replica-install — отказоустойчивость становится штатной.
Можно ли подключить к FreeIPA Ubuntu или Debian?
Да. Ставите freeipa-client через apt, затем ipa-client-install с параметрами домена и realm. Клиентская часть на Ubuntu 22.04/24.04 работает стабильно, хотя сам сервер FreeIPA я рекомендую поднимать только на RHEL-совместимых дистрибутивах — Rocky Linux 9 или AlmaLinux 9.
Поддерживает ли FreeIPA двухфакторку?
Да, TOTP из коробки. Включается через ipa user-mod ivanov --user-auth-type=otp и добавление токена ipa otptoken-add. Пользователь привязывает Google Authenticator или FreeOTP по QR-коду. При логине пароль вводится слитно: пароль+6 цифр кода.
Как перенести пользователей из /etc/passwd в FreeIPA?
Парсите /etc/passwd скриптом на awk, выбираете учётки с UID >= 1000, затем скармливаете в ipa user-add. UID и GID сохраняются через параметры --uid и --gidnumber. Пароли придётся сбросить всем разом — хеши из shadow в FreeIPA напрямую не загружаются.

Столкнулись с похожей задачей? Обращайтесь — решим

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

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

📄
Скачайте подробный разбор в PDF Кейсы, статистика, типовые ошибки и чек-лист самопроверки — 12 страниц
Скачать PDF

Подпишитесь на рассылку ITfresh

Хотите быть в курсе? Раз в неделю мы делимся практическими гайдами, созданными специально для руководителей IT и системных администраторов. Что внутри? Всё самое важное: безопасность, 1С, миграции, надёжные резервные копии и, конечно, лайфхаки, проверенные нашими реальными проектами!

Письмо придёт в течение минутыНе нашли его во «Входящих» — загляните в папку «Спам» или «Промоакции» и нажмите «Не спам». Так все следующие выпуски будут приходить прямо в основную почту.
Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.