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

Материал из ALT Linux Wiki

В данном разделе рассмотрена установка сервера 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.

Внимание! Домен DNS не может быть изменен после установки.


Установщик FreeIPA довольно требователен к настройке DNS. Установщик выполняет следующие проверки:

  • имя узла не может быть localhost или localhost6.
  • имя узла должно быть полным (ipa.example.test)
  • имя узла должно быть разрешимым.
  • обратный адрес должен совпадать с именем хоста.

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

IPv6

В ядре должен быть включен протокол IPv6. Если IPv6 отключен, подключаемый модуль CLDAP, используемый службами FreeIPA, не инициализируется.

Подготовка сервера

Для корректной работы сервера необходимо, задать ему полное доменное имя (FQDN). Имя серверу можно назначить командой:

# hostnamectl set-hostname ipa.example.test
Примечание: IP-адрес сервера не должен изменяться.


Нужно отключить работающий на порту 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 в конфигурации по умолчанию не указаны CA параметры, например, --external-ca или --ca-less, сервер FreeIPA устанавливается с интегрированным CA.


Интерактивная установка

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

# ipa-server-install

На первый вопрос, нужно ли сконфигурировать DNS-сервер BIND, следует ответить утвердительно:

Do you want to configure integrated DNS (BIND)? [no]: yes

Далее нужно указать имя узла, на котором будет установлен сервер FreeIPA, доменное имя и пространство Kerberos:

Примечание: Чтобы принять значение по умолчанию, необходимо нажать Enter.
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
Примечание: Этот шаг необходим в том случае, если предполагается использовать внешний сервер для обработки запросов службы имен DNS.


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

Do you want to search for missing reverse zones? [yes]
Примечание: Использование FreeIPA для управления обратными зонами не является обязательным. Для этой цели можно использовать внешнюю службу DNS.


Далее система выведет информацию о конфигурации и попросит ее подтвердить:

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

В пакетном режиме

Примечание: Скрипт установки ipa-server-install создает файл журнала /var/log/ipaserver-install.log, который может помочь определить проблему если установка завершилась ошибкой.


Пример команды установки сервера 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, или отключить автоматическое определение обратных зон.
Примечание: Полный список параметров можно увидеть, запустив команду ipa-server-install --help


Установка сервера 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 --extSAN dns:ipa.example.test

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
Примечание: Можно так же создать отдельные сертификаты для серверов HTTP и Directory.


Экспорт сертификатов в правильные форматы

Импортировать полученный сертификат (на запрос команды, следует ввести пароль к закрытому ключу):

# 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:

Примечание: Чтобы принять значение по умолчанию, необходимо нажать Enter.
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
Примечание: Этот шаг необходим в том случае, если предполагается использовать внешний сервер для обработки запросов службы имен DNS.


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

Do you want to search for missing reverse zones? [yes]
Примечание: Использование FreeIPA для управления обратными зонами не является обязательным. Для этой цели можно использовать внешнюю службу DNS.


Далее система выведет информацию о конфигурации и попросит ее подтвердить:

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 является чистая система без каких-либо настроек.


Удаление сервера FreeIPA

Процедура удаления сервера FreeIPA ipabackup.example.test:

  1. Если в среде 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)).
  2. Если в среде используется интегрированный 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 на другой сервер.
  3. Подключиться к другому серверу в топологии:
    $ ssh ipa_user@another_server
    
  4. Получить учетные данные администратора FreeIPA:
    $ kinit admin
    
  5. Удалить сервер ipabackup.example.test из топологии:
    $ ipa server-del ipabackup.example.test
    
  6. Вернуться на ipabackup.example.test и удалить FreeIPA:
    # ipa-server-install --uninstall
    
  7. Далее необходимо убедиться, что все записи DNS сервера имен (NS), указывающие на ipabackup.example.test, удалены из ваших зон DNS.