FreeIPA/Установка сервера FreeIPA
В данном разделе рассмотрена установка сервера FreeIPA с доменом EXAMPLE.TEST в локальной сети 192.168.0.0/24.
Системные требования
Сервер FreeIPA следует устанавливать в чистой системе, в которой отсутствуют какие-либо пользовательские настройки для служб: DNS, Kerberos, Apache и Directory Server.
FreeIPA при настройке домена перезаписывает системные файлы. FreeIPA создает резервные копии исходных системных файлов в /var/lib/ipa/sysrestore/. При удалении сервера FreeIPA, эти файлы восстанавливаются.
RAM
Для установки с CA требуется минимально 1,2 ГБ RAM. Для демонстрационной/тестовой системы рекомендуется 2 ГБ.
Типичные требования к оперативной памяти:
- для 10 000 пользователей и 100 групп: не менее 4 ГБ RAM и 4 ГБ Swap.
- для 100 000 пользователей и 50 000 групп: не менее 16 ГБ RAM и 4 ГБ Swap.
DNS
Без правильно настроенной конфигурации DNS не будут работать должным образом Kerberos и SSL.
Установщик FreeIPA довольно требователен к настройке DNS. Установщик выполняет следующие проверки:
- имя узла не может быть localhost или localhost6.
- имя узла должно быть полным (ipa.example.test)
- имя узла должно быть разрешимым.
- обратный адрес должен совпадать с именем хоста.
Не используйте существующий домен, если вы не являетесь владельцем домена.
При пробной установке рекомендуется использовать зарезервированный домен верхнего уровня из RFC2606 для частных тестовых установок, например ipa.test.
IPv6
В ядре должен быть включен протокол IPv6. Если IPv6 отключен, подключаемый модуль CLDAP, используемый службами FreeIPA, не инициализируется.
Подготовка сервера
Для корректной работы сервера необходимо, задать ему полное доменное имя (FQDN). Имя серверу можно назначить командой:
# hostnamectl set-hostname ipa.example.test
Нужно отключить работающий на порту 8080 ahttpd во избежание конфликтов с разворачиваемым tomcat и отключить HTTPS в Apache2:
# service ahttpd stop
# a2dissite 000-default_https
# a2disport https
# service httpd2 condreload
Для ускорения установки можно установить демон энтропии haveged:
# apt-get install haveged
# systemctl enable --now haveged
Установка пакетов
Установить пакет freeipa-server:
# apt-get install freeipa-server
Если сервер FreeIPA должен включать DNS-сервер, необходимо также установить пакет freeipa-server-dns:
# apt-get install freeipa-server-dns
Установка сервера
С интегрированным DNS, с интегрированным CA в качестве корневого CA
Плюсы установки сервера FreeIPA со встроенным DNS:
- можно автоматизировать большую часть обслуживания и управления записями DNS, используя инструменты FreeIPA. Например, записи DNS SRV создаются во время установки, а затем автоматически обновляются.
- можно иметь стабильное соединение с остальной частью Интернета, настроив глобальные серверы пересылки во время установки сервера FreeIPA. Глобальные серверы пересылки также полезны для доверительных отношений с Active Directory.
- можно настроить обратную зону DNS, чтобы электронные письма из вашего домена не считались спамом почтовыми серверами за пределами домена FreeIPA.
Ограничения установки сервера FreeIPA со встроенным DNS:
- FreeIPA DNS не предназначен для использования в качестве DNS-сервера общего назначения. Некоторые расширенные функции DNS не поддерживаются.
Интерактивная установка
Для запуска интерактивной установки выполнить команду:
# ipa-server-install
На первый вопрос, нужно ли сконфигурировать DNS-сервер BIND ответить утвердительно:
Do you want to configure integrated DNS (BIND)? [no]: yes
Далее нужно указать имя узла, на котором будет установлен сервер FreeIPA, доменное имя и пространство Kerberos:
Server host name [ipa.example.test]:
Please confirm the domain name [example.test]:
Please provide a realm name [EXAMPLE.TEST]:
Задать пароль для Directory Manager (cn=Directory Manager):
Directory Manager password:
Password (confirm):
Задать пароль для администратора FreeIPA (будет создана учетная запись admin с правами администратора):
IPA admin password:
Password (confirm):
Для настройки DNS на первый запрос, нужно ли настроить перенаправления, ответить да:
Do you want to configure DNS forwarders? [yes]:
Система предложит сначала использовать DNS-серверы из настроек сети (если они прописаны) — если это устроит, оставить значение по умолчанию:
Do you want to configure these servers as DNS forwarders? [yes]:
Также можно добавить дополнительные серверы:
Enter an IP address for a DNS forwarder, or press Enter to skip: 8.8.8.8
Оставить значение по умолчанию для попытки найти обратные зоны:
Do you want to search for missing reverse zones? [yes]
Далее система выведет информацию о конфигурации и попросит ее подтвердить:
The IPA Master Server will be configured with:
Hostname: ipa.example.test
IP address(es): 192.168.0.113
Domain name: example.test
Realm name: EXAMPLE.TEST
The CA will be configured with:
Subject DN: CN=Certificate Authority,O=EXAMPLE.TEST
Subject base: O=EXAMPLE.TEST
Chaining: self-signed
BIND DNS server will be configured to serve IPA domain with:
Forwarders: 8.8.8.8
Forward policy: only
Reverse zone(s): 0.168.192.in-addr.arpa.
Continue to configure the system with these values? [no]: yes
Начнется процесс конфигурации. После его завершения будет выведена подсказка со следующими шагами:
==============================================================================
Setup complete
Next steps:
1. You must make sure these network ports are open:
TCP Ports:
* 80, 443: HTTP/HTTPS
* 389, 636: LDAP/LDAPS
* 88, 464: kerberos
* 53: bind
UDP Ports:
* 88, 464: kerberos
* 53: bind
* 123: ntp
2. You can now obtain a kerberos ticket using the command: 'kinit admin'
This ticket will allow you to use the IPA tools (e.g., ipa user-add)
and the web user interface.
Be sure to back up the CA certificates stored in /root/cacert.p12
These files are required to create replicas. The password for these
files is the Directory Manager password
The ipa-server-install command was successful
В пакетном режиме
Пример команды установки сервера FreeIPA в пакетном режиме:
# ipa-server-install -U --hostname=$(hostname) -r EXAMPLE.TEST -n example.test -p 12345678 -a 12345678 --setup-dns --no-forwarders --no-reverse
Для пакетной установки необходимо указать следующие параметры:
- -r REALM_NAME, --realm=REALM_NAME — имя области Kerberos для сервера FreeIPA;
- -n DOMAIN_NAME, --domain=DOMAIN_NAME — доменное имя;
- -p DM_PASSWORD, --ds-password=DM_PASSWORD — пароль, который будет использоваться сервером каталогов для пользователя Менеджера каталогов (DM);
- -a ADMIN_PASSWORD,--admin-password=ADMIN_PASSWORD — пароль пользователя admin, администратора FreeIPA;
- -U,--unattended — позволить процессу установки выбрать параметры по умолчанию, не запрашивая у пользователя информацию;
- --hostname=HOST_NAME — полное DNS-имя этого сервера.
Чтобы установить сервер со встроенным DNS, должны также быть добавлены следующие параметры:
- --setup-dns — создать зону DNS, если она еще не существует, и настроить DNS-сервер;
- --forwarder или --no-forwarders — в зависимости от того, нужно ли настроить серверы пересылки DNS или нет;
- --auto-reverse или --no-reverse — в зависимости от того, нужно ли настроить автоматическое обнаружение обратных зон DNS, которые должны быть созданы в FreeIPA DNS, или отключить автоматическое определение обратных зон.
Установка сервера FreeIPA в режиме CA-less
В этом разделе описывается, как можно установить сервер FreeIPA без центра сертификации (CA).
CA-less конфигурация требуется в тех случаях, когда у вас по какой-то причине нет возможности развернуть на FreeIPA сервис PKI dogtag. Например, это на данный момент невозможно сделать в некоторых сертифицированных конфигурациях.
Сертификаты, необходимые для установки сервера FreeIPA без центра сертификации (CA):
- Сертификат LDAP-сервера и закрытый ключ:
- --dirsrv-cert-file для указания сертификата и файлов закрытого ключа сервера LDAP;
- --dirsrv-pin для указания пароля доступа к закрытому ключу;
- Сертификат веб-сервера Apache и закрытый ключ:
- --http-cert-file для указания сертификата и файлов закрытого сервера Apache;
- --http-pin для указания пароля доступа к закрытому ключу;
- полная цепочка сертификатов CA, выдавших сертификаты серверов LDAP и Apache:
- --dirsrv-cert-file и --http-cert-file для файлов сертификатов с полной цепочкой сертификатов ЦС или ее частью;
- файлы сертификатов для полной цепочки сертификатов CA:
- --ca-cert-file для файла или файлов, содержащих сертификат центра сертификации, который выдал сертификаты LDAP, Apache Server и Kerberos KDC.
- сертификат PKINIT центра распространения ключей Kerberos (KDC) и закрытый ключ (опционально):
- --pkinit-cert-file для SSL-сертификата Kerberos KDC и закрытого ключа;
- --pkinit-pin для пароля доступа к закрытому ключу Kerberos KDC;
- --no-pkinit — отключить шаги настройки pkinit. Если не предоставить сертификат PKINIT, ipa-server-install настроит сервер FreeIPA с локальным KDC с самоподписанным сертификатом.
Файлы, предоставленные с помощью --dirsrv-cert-file и --http-cert-file, в сочетании с файлом, предоставленным с помощью --ca-cert-file должны содержать полную цепочку сертификатов CA, выдавших сертификаты сервера LDAP и Apache.
Подготовка сертификатов для сервера FreeIPA
Создать каталог для сертификатов:
# mkdir ~/test_ca
Создать файл password.txt с паролем к закрытому ключу (длина пароля должна быть не меньше 8 символов):
# echo "SECret.123" > ~/test_ca/password.txt
Создать базу данных NSS:
certutil -d ~/test_ca -N -f ~/test_ca/password.txt
Создать noise файл, заполненный случайными числами:
# head -c20 /dev/random > ~/test_ca/noise.txt
Выполнить экспорт переменной CERT_SERIAL:
# export CERT_SERIAL=1
Создать CA сертификат:
# SKID="0x`openssl rand -hex 20`"
# echo $SKID
0xfa012b30b9407b0750b786ff5ed9f49ce3998622
# certutil -d ~/test_ca -S -n "CA" -s "CN=Certificate Authority" -x -t CT,,C -1 -2 -5 -m $CERT_SERIAL -v 120 -z ~/test_ca/noise.txt -f ~/test_ca/password.txt --extSKID
В ответ на запросы команды дать следующие ответы (на запрос «Enter value for the key identifier fields», следует ввести вывод команды echo $SKID):
0 - Digital Signature
1 - Non-repudiation
5 - Cert signing key
9 - done
Is this a critical extension [y/N]? y
Is this a CA certificate [y/N]? y
Enter the path length constraint, enter to skip [<0 for unlimited path] 0
Is this a critical extension [y/N]? y
Enter value for the key identifier fields,enter to omit: 0xfa012b30b9407b0750b786ff5ed9f49ce3998622
Is this a critical extension [y/N]? n
5 - SSL CA
6 - S/MIME CA
7 - Object Signing CA
9 - done
Is this a critical extension [y/N]? n
Создать noise файл, заполненный случайными числами:
# head -c20 /dev/random > ~/test_ca/noise.txt
Создать запрос на сертификат (на запрос «Enter value for the key identifier fields», следует ввести вывод команды echo $SKID):
# SKID="0x`openssl rand -hex 20`"
# echo $SKID
0xb17caf72b46288bcc9c887c89894dc917e06f724
# certutil -d ~/test_ca -R -s CN=$HOSTNAME,O=IPA -o /tmp/servercert.req -k rsa -g 2048 -z ~/test_ca/noise.txt -f ~/test_ca/password.txt -a --extSKID
Generating key. This may take a few moments...
Adding Subject Key ID extension.
Enter value for the key identifier fields,enter to omit:
0xb17caf72b46288bcc9c887c89894dc917e06f724
Is this a critical extension [y/N]?
n
Подписать запрос на сертификат:
# export CERT_SERIAL=$(($CERT_SERIAL + 1))
# certutil -d ~/test_ca -C -c "CA" -i /tmp/servercert.req -o /tmp/servercert.pem -m $CERT_SERIAL -v 120 -f ~/test_ca/password.txt -1 -5 -a
В ответ на запросы команды дать следующие ответы:
2 - Key encipherment
9 - done
Is this a critical extension [y/N]? n
1 - SSL Server
9 - done
Is this a critical extension [y/N]? n
Экспорт сертификатов в правильные форматы
Импортировать полученный сертификат (на запрос команды, следует ввести пароль к закрытому ключу):
# certutil -d ~/test_ca -A -i /tmp/servercert.pem -n Server-Cert -a -t ,,
Enter Password or Pin for "NSS Certificate DB":
Экспортировать сертификат в PKCS#12:
# pk12util -o ~/test_ca/servercert.p12 -n Server-Cert -d ~/test_ca -k ~/test_ca/password.txt -w ~/test_ca/password.txt
pk12util: PKCS12 EXPORT SUCCESSFUL
Экспортировать сертификат CA в формат PEM:
# certutil -d ~/test_ca -L -n "CA" -a > ~/test_ca/cacert.pem
Установка CA-less IPA
Установить пароль к закрытому ключу в значение переменной PSWD:
# export PSWD=$(cat ~/test_ca/password.txt)
Установить CA-less IPA:
# ipa-server-install \
--http-cert-file ~/test_ca/servercert.p12 \
--http-pin $PSWD \
--dirsrv-cert-file ~/test_ca/servercert.p12 \
--dirsrv-pin $PSWD \
--ca-cert-file ~/test_ca/cacert.pem \
--no-pkinit
The log file for this installation can be found in /var/log/ipaserver-install.log
==============================================================================
This program will set up the IPA Server.
Version 4.9.7
This includes:
* Configure the NTP client (CHRONY)
* Create and configure an instance of Directory Server
* Create and configure a Kerberos Key Distribution Center (KDC)
* Configure Apache (httpd)
To accept the default shown in brackets, press the Enter key.
На первый вопрос, нужно ли сконфигурировать DNS-сервер BIND ответить утвердительно:
Do you want to configure integrated DNS (BIND)? [no]: yes
Далее нужно указать имя узла, на котором будет установлен сервер FreeIPA, доменное имя и пространство Kerberos:
Server host name [ipa.example.test]:
Please confirm the domain name [example.test]:
Please provide a realm name [EXAMPLE.TEST]:
Задать пароль для Directory Manager (cn=Directory Manager):
Directory Manager password:
Password (confirm):
Задать пароль для администратора FreeIPA (будет создана учетная запись admin с правами администратора):
IPA admin password:
Password (confirm):
Для настройки DNS на первый запрос, нужно ли настроить перенаправления, ответить да:
Do you want to configure DNS forwarders? [yes]:
Система предложит сначала использовать DNS-серверы из настроек сети (если они прописаны) — если это устроит, оставить значение по умолчанию:
Do you want to configure these servers as DNS forwarders? [yes]:
Также можно добавить дополнительные серверы:
Enter an IP address for a DNS forwarder, or press Enter to skip: 8.8.8.8
Оставить значение по умолчанию для попытки найти обратные зоны:
Do you want to search for missing reverse zones? [yes]
Далее система выведет информацию о конфигурации и попросит ее подтвердить:
The IPA Master Server will be configured with:
Hostname: ipa.example.test
IP address(es): 192.168.0.113
Domain name: example.test
Realm name: EXAMPLE.TEST
BIND DNS server will be configured to serve IPA domain with:
Forwarders: 8.8.8.8
Forward policy: only
Reverse zone(s): 0.168.192.in-addr.arpa.
Continue to configure the system with these values? [no]: yes
Начнется процесс конфигурации. После его завершения будет выведена подсказка со следующими шагами:
==============================================================================
Setup complete
Next steps:
1. You must make sure these network ports are open:
TCP Ports:
* 80, 443: HTTP/HTTPS
* 389, 636: LDAP/LDAPS
* 88, 464: kerberos
* 53: bind
UDP Ports:
* 88, 464: kerberos
* 53: bind
* 123: ntp
2. You can now obtain a kerberos ticket using the command: 'kinit admin'
This ticket will allow you to use the IPA tools (e.g., ipa user-add)
and the web user interface.
The ipa-server-install command was successful
Завершение установки
После завершения сценария установки обновите записи DNS следующим образом:
- добавить делегирование DNS из родительского домена в домен DNS FreeIPA. Например, если DNS-домен FreeIPA — ipa.example.test, добавьте запись сервера имен (NS) в родительский домен example.test;
- добавить запись службы _ntp._udp (SRV) для сервера времени в DNS (Наличие записи SRV для сервера времени только что установленного сервера FreeIPA в DNS гарантирует, что будущие установки реплик и клиентов будут автоматически настроены для синхронизации с сервером времени, используемым этим первичным сервером FreeIPA):
# ipa dnsrecord-add example.test _ntp._udp --srv-priority=0 --srv-weight=100 --srv-port=123 --srv-target=ipa.example.test
Убедиться, что сервер FreeIPA работает:
$ kinit admin
Password for admin@EXAMPLE.TEST:
$ klist
Ticket cache: KEYRING:persistent:500:500
Default principal: admin@EXAMPLE.TEST
Valid starting Expires Service principal
26.01.2022 12:08:51 27.01.2022 12:08:47 krbtgt/EXAMPLE.TEST@EXAMPLE.TEST
Отладочная информация
При установке сервера FreeIPA отладочная информация добавляется в следующие файлы журнала:
- /var/log/ipaserver-install.log
- /var/log/httpd2/error_log
- /var/log/dirsrv/slapd-INSTANCE-NAME/access
- /var/log/dirsrv/slapd-INSTANCE-NAME/errors
При установке CA отладочную информация также можно просмотреть в:
- /var/log/pki/pki-ca-spawn.$TIME_OF_INSTALLATION.log — общие вопросы, для процесса установки pkispawn
- journalctl -u pki-tomcatd@pki-tomcat
- /var/log/pki/pki-tomcat/ca/debug.$DATE.log
- /var/log/pki/pki-tomcat/ca/signedAudit/ca_audit
- /var/log/pki/pki-tomcat/ca/system, /var/log/pki/pki-tomcat/ca/transactions, /var/log/pki/pki-tomcat/catalina.$DATE.log
Удаление неудачной установки сервера FreeIPA
В случае сбоя установки сервера FreeIPA некоторые файлы конфигурации могут быть уже сконфигурированы. В этом случае дополнительные попытки установить сервер FreeIPA завершатся неудачно, и сценарий установки сообщает, что FreeIPA уже настроен. Чтобы решить эту проблему, следует удалить частичную конфигурацию сервера FreeIPA и повторить процесс установки.
Удалить частичную конфигурацию сервера FreeIPA:
# ipa-server-install --uninstall
Удаление сервера FreeIPA
Процедура удаления сервера FreeIPA ipabackup.example.test:
- Если в среде FreeIPA используется интегрированный DNS, необходимо убедиться, что ipabackup.example.test не является единственным DNS-сервером в состоянии enabled:
# ipa server-role-find --role 'DNS server' ---------------------------------------- установлено соответствие 2 ролей сервера ---------------------------------------- Имя сервера: ipa.example.test Имя роли: DNS server Состояние роли: enabled Имя сервера: ipabackup.example.test Имя роли: DNS server Состояние роли: enabled --------------------------------- Количество возвращённых записей 2 ---------------------------------
- Если ipabackup.example.test — единственный DNS-сервер в топологии, следует добавить роль DNS-сервера на другой сервер FreeIPA (см. man ipa-dns-install(1)).
- Если в среде используется интегрированный CA:
- убедиться, что ipabackup.example.test не является единственным CA в состоянии enabled:
# ipa server-role-find --role 'CA server' ---------------------------------------- установлено соответствие 2 ролей сервера ---------------------------------------- Имя сервера: ipa.example.test Имя роли: CA server Состояние роли: enabled Имя сервера: ipabackup.example.test Имя роли: CA server Состояние роли: enabled --------------------------------- Количество возвращённых записей 2 ---------------------------------
- Если ipabackup.example.test — единственный CA в топологии, следует добавить роль CA-сервера на другой сервер FreeIPA (см. man ipa-ca-install(1)).
- если в среде были активированы хранилища (enabled vaults), убедиться что ipabackup.example.test не является единственным включенным сервером Key Recovery Authority (KRA):
# ipa server-role-find --role 'KRA server' ---------------------------------------- установлено соответствие 2 ролей сервера ---------------------------------------- Имя сервера: ipa.example.test Имя роли: KRA server Состояние роли: absent Имя сервера: ipabackup.example.test Имя роли: KRA server Состояние роли: absent --------------------------------- Количество возвращённых записей 2 ---------------------------------
- Если ipabackup.example.test — единственный сервер KRA в топологии, следует добавить роль сервера KRA на другой сервер FreeIPA (см. man ipa-kra-install(1)).
- убедиться, что ipabackup.example.test не является сервером обновления CA:
# ipa config-show | grep 'CA renewal'
- Если ipabackup.example.test является сервером обновления CA, необходимо переместить роль сервера обновления CA на другой сервер.
- убедиться, что ipabackup.example.test не является издателем текущего списка отзыва сертификатов (CRL):
# ipa-crlgen-manage status
- Если вывод команды показывают, что генерация CRL включена на сервере ipabackup.example.test, следует переместить роль издателя CRL на другой сервер.
- убедиться, что ipabackup.example.test не является единственным CA в состоянии enabled:
- Подключиться к другому серверу в топологии:
$ ssh ipa_user@another_server
- Получить учетные данные администратора FreeIPA:
$ kinit admin
- Удалить сервер ipabackup.example.test из топологии:
$ ipa server-del ipabackup.example.test
- Вернуться на ipabackup.example.test и удалить FreeIPA:
# ipa-server-install --uninstall
- Далее необходимо убедиться, что все записи DNS сервера имен (NS), указывающие на ipabackup.example.test, удалены из ваших зон DNS.