Установка и настройка FreeIPA

В этой статье будет рассмотрена установка и настройка FreeIPA. Сервер FreeIPA – это система централизованного управления учетными записями пользователей. Аналог Active Directory для Linux. Однако, помимо сервера LDAP (на базе 389 Directory Server) сервер FreeIPA включает в себя еще следующий набор возможностей:

  • Аутентификация Kerberos (MIT’s Kerberos 5).
  • Встроенный сервер DNS (BIND).
  • Встроенный центр сертификации (DogTag).
  • Веб доступ до инструментов администрирования. Так же есть набор консольных утилит.

FreeIPA поддерживаем настройку доверительных отношений с Active Directory.

Правда, есть некоторые ограничения по части выбора дистрибутивов Linux. FreeIPA изначально была разработкой от RHEL. В последних вариациях Debian дистрибутивов (например, Ubuntu 20.04 и новее) пакета для установки сервера FreeIPA нет. Насколько я понял – из-за проблем с зависимыми пакетами. Для Debian дистрибутивов можно использовать вариант запуска сервера FreeIPA в виде контейнера (надеюсь, я про это напишу).

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

  • CentOS (в. ч. CentOS Stream).
  • Fedora.
  • РедОС.
  • Astra Linux.
  • ALT Linux.

Далее в статье для установки сервера FreeIPA я буду использовать Fedora Server 35.

В целом я рассматриваю эту статью как мою шпаргалку и на абсолютную истину не претендую.

Предварительные требования

Для запуска сервера FreeIPA требуется минимум 1.2 ГБ оперативной памяти. Для демонстрационной системы рекомендуется минимум 2 ГБ оперативной памяти. Соответственно, для боевой системы размер оперативной памяти должен составлять 4-8 ГБ.

Конфигурация моей демонстрационной виртуальной системы следующая:

ПараметрЗначение
Количество ядер ЦП2 х 3.6 ГГц
Объем оперативной памяти, ГБ4
Объем жесткого диска, ГБ20

Схема развертывания

Поскольку мы будем проверять как серверную, так и клиентскую составляющую, то виртуальных машин у нас будет две – сервер и клиент, соответственно. Общая схема развертывания приведена на рисунке ниже.

Подготовка операционной системы

Мы не будет рассматривать процесс остановки операционной системы, т.к. есть огромное количество соответствующего материала на просторах Интернета. Мы только рассмотрим шаги, которые необходимо выполнить сразу после установки операционной системы.

1. Актуализируем репозитории и выполняет обновление пакетов.

sudo dnf upgrade --refresh

Дожидаемся окончания процесса обновления пакетов.

2. Устанавливаем FQDN имя сервера. В соответствии с нашей схемой развертывания имя должно быть ipa1.itproblog.ru:

sudo hostnamectl set-hostname ipa1.itproblog.ru

Проверяем FQDN имя сервера:

sudo hostnamectl
 Static hostname: ipa1.itproblog.ru
       Icon name: computer-vm
         Chassis: vm
      Machine ID: 5cc3e2ab342c4ec9a3af04f65a253c5d
         Boot ID: d0025a872b074ab1bdaf0689102bc1af
  Virtualization: vmware
Operating System: Fedora Linux 35 (Server Edition)
     CPE OS Name: cpe:/o:fedoraproject:fedora:35
          Kernel: Linux 5.14.10-300.fc35.x86_64
    Architecture: x86-64

Именно то, что нам нужно.

3. Для первоначального корректного разрешения имен явно в файле hosts пропишем имена нашего сервера:

sudo vi /etc/hosts

Пример нужной нам записи:

10.10.10.26 ipa1.itproblog.ru ipa1
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

Сохраняем изменения в текстовом редакторе vi:

ESC
:wq!

Проверяем:

ping ipa1.itproblog.ru
PING ipa1.itproblog.ru (10.10.10.26) 56(84) bytes of data.
64 bytes from ipa1.itproblog.ru (10.10.10.26): icmp_seq=1 ttl=64 time=0.059 ms
64 bytes from ipa1.itproblog.ru (10.10.10.26): icmp_seq=2 ttl=64 time=0.047 ms
64 bytes from ipa1.itproblog.ru (10.10.10.26): icmp_seq=3 ttl=64 time=0.049 ms
64 bytes from ipa1.itproblog.ru (10.10.10.26): icmp_seq=4 ttl=64 time=0.050 ms
^C
--- ipa1.itproblog.ru ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3110ms
rtt min/avg/max/mdev = 0.047/0.051/0.059/0.004 ms

Разрешение FQDN имени работает корректно.

4. Переводим selinux в режим “предупреждать, но не запрещать”:

sudo vi /etc/selinux/config

Нам нужно переключить параметр SELINUX в режим permissive:

SELINUX=permissive

Сохраняем изменения в текстовом редакторе vi:

ESC
:wq!

5. Перезагружаем сервер.

6. Проверяем режим selinux. Режим должен быть permissive:

sudo getenforce
[roman@ipa1 ~]$ sudo getenforce
[sudo] password for roman:
Permissive
[roman@ipa1 ~]$

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

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

  • Рекомендуется использовать именно встроенный сервер DNS. Возможен вариант с использованием внешнего сервера DNS, но это сопряжено с гораздо более сложной настройкой внешнего сервера DNS. И, как следствие, поле для ошибок в конфигурации потенциально больше.
  • Рекомендуется развертывать два сервера – основной сервер и реплику. Про развертывание сервера реплики мы поговорим в отдельной публикации.
  • Не отключайте IPv6 командой  ipv6.disable=1.
  • Для продуктивной системы размер оперативной памяти должен составлять 4-8 ГБ.
  • Рекомендуется создавать уникальное имя для домена FreeIPA. Если у вас уже есть какие-либо системы, использующие Kerberos (MS Active Directory, например), то настройка доверительных отношений будет невозможна.
  • После установки сервера FreeIPA нельзя изменить имя домена или имя области Kerberos. Планируйте соответствующие имена с учетом этой особенности.

Установка FreeIPA

Приступим к непосредственной установке сервера FreeIPA.

1. Устанавливаем пакеты для сервера FreeIPA:

sudo dnf install ipa-server ipa-server-dns

Дожидаемся окончания процесса установки пакетов.

2. Вот теперь мы можем запустить установку сервера FreeIPA со встроенный сервером DNS:

sudo ipa-server-install --setup-dns --no-dnssec-validation  --allow-zone-overlap --reverse-zone=10.10.10.in-addr.arpa

–setup-dns – этот параметр говорит мастера установки о том, что необходимо установить и настроить встроенный сервер DNS.

–no-dnssec-validation – отключить DNSSEC. Потенциально этого можно и не делать, но если вы планируете настройку доверительных отношений с Active Directory и настройку сервера пересылки DNS, то DNSSEC необходимо выключить. Иначе сервер DNS от FreeIPA будет ожидать защищенного ответа от DNS Active Directory. В 99% случаев DNSSEC для Active Directory не настроен, и он не сможет вернуть защищенный ответ. Если кратко – разрешение имен не будет работать.

–allow-zone-overlap – если у вас уже где-то используется имя домена, то установка сервера FreeIPA может завершиться с ошибкой. Например, в моем случае мастер установки нашел, что домен itproblog.ru уже делегирован другим NS серверам и прервал процесс установки:

Checking DNS domain itproblog.ru., please wait ...
DNS zone itproblog.ru. already exists in DNS and is handled by server(s): ['ns1.beget.com.', 'ns2.beget.ru.', 'ns2.beget.com.', 'ns1.beget.ru.', 'ns1.beget.pro.', 'ns2.beget.pro.']
The ipa-server-install command failed. See /var/log/ipaserver-install.log for more information

–reverse-zon – создает зону обратного просмотра.

3. Мастер установки попросит нас указать FQDN имя сервера, имя домена и имя области Kerberos. Можем либо оставить значения по умолчанию (в квадратных скобках), либо задать свои значения. Я оставлю значения по умолчанию – они мне более чем подходят.


To accept the default shown in brackets, press the Enter key.

Enter the fully qualified domain name of the computer
on which you're setting up server software. Using the form
<hostname>.<domainname>
Example: master.example.com


Server host name [ipa1.itproblog.ru]:

Warning: skipping DNS resolution of host ipa1.itproblog.ru
The domain name has been determined based on the host name.

Please confirm the domain name [itproblog.ru]:

The kerberos protocol requires a Realm name to be defined.
This is typically the domain name converted to uppercase.

Please provide a realm name [ITPROBLOG.RU]:

4. После этого мастер установки сервера FreeIPA попросит нас указать пароль для Directory Manager:

Certain directory server operations require an administrative user.
This user is referred to as the Directory Manager and has full access
to the Directory for system management tasks and will be added to the
instance of directory server created for IPA.
The password must be at least 8 characters long.

Directory Manager password:
Password must only contain ASCII characters
Directory Manager password:
Password (confirm):

The IPA server requires an administrative user, named 'admin'.
This user is a regular system account used for IPA server administration.

Задайте необходимый пароль.

5. Теперь укажем пароль администратора сервера FreeIPA. Имя администратора – admin:

The IPA server requires an administrative user, named 'admin'.
This user is a regular system account used for IPA server administration.

IPA admin password:
Password (confirm):

6. Указываем на какие сервера необходимо перенаправлять внешние DNS запросы:

Do you want to configure DNS forwarders? [yes]: y
The following DNS servers are configured in systemd-resolved: 10.10.10.254, 10.10.10.254
Do you want to configure these servers as DNS forwarders? [yes]: y
All detected DNS servers were added. You can enter additional addresses now:
Enter an IP address for a DNS forwarder, or press Enter to skip:
DNS forwarders: 10.10.10.254, 10.10.10.254

Я буду использовать адрес моего маршрутизатора (10.10.10.254), т.к. на нем настроен сервер DNS.

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

Using reverse zone(s) 10.10.10.in-addr.arpa.

8. Теперь нужно указать параметры NetBIOS имени домена:

Trust is configured but no NetBIOS domain name found, setting it now.
Enter the NetBIOS name for the IPA domain.
Only up to 15 uppercase ASCII letters, digits and dashes are allowed.
Example: EXAMPLE.


NetBIOS domain name [ITPROBLOG]:

9. Параметры сервера точного времени мы менять не будем

Do you want to configure chrony with NTP server or pool address? [no]: no

10. В завершении мастер установки сервера FreeIPA представит нам краткую сводку – с какими параметра будет осуществляться установка:

The IPA Master Server will be configured with:
Hostname:       ipa1.itproblog.ru
IP address(es): 10.10.10.26
Domain name:    itproblog.ru
Realm name:     ITPROBLOG.RU

The CA will be configured with:
Subject DN:   CN=Certificate Authority,O=ITPROBLOG.RU
Subject base: O=ITPROBLOG.RU
Chaining:     self-signed

BIND DNS server will be configured to serve IPA domain with:
Forwarders:       10.10.10.254
Forward policy:   only
Reverse zone(s):  10.10.10.in-addr.arpa.

Continue to configure the system with these values? [no]: yes

Соглашаемся на установку сервера FreeIPA с заданными параметрами.

11. Запуститься процесс установки сервера FreeIPA. Дожидаемся его завершения. В моем случае процесс установки и настройки сервера FreeIPA заняла порядка 5 минут.

12. В случае успешной установки мастер сообщит от этом:

Setup complete

Next steps:

13. В своей работы сервера FreeIPA используется следующие порты и протоколы:

TCP Ports:
* 80, 443: HTTP/HTTPS
* 389, 636: LDAP/LDAPS
* 88, 464: kerberos
* 53: bind
UDP Ports:
* 88, 464: kerberos
* 53: bind
* 123: ntp

Настроим соответствующие исключения в брандмауэре:

sudo firewall-cmd --permanent --add-service={http,https,ldap,ldaps,dns,ntp,kerberos}
sudo firewall-cmd --reload

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

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

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

1. Попробуем запросить билет Kerberos для пользователя admin непосредственно на самом сервере:

sudo kinit admin

Указываем пароль пользователя admin:

[roman@ipa1 ~]$ sudo kinit admin
[sudo] password for roman:
Password for admin@ITPROBLOG.RU:
[roman@ipa1 ~]$

Проверяем, получилось ли у нас выписать билет Kerberos:

sudo klist

Мы должны увидеть Kerberos билет для пользователя admin.

2. Проверим статус всех подсистем FreeIPA:

sudo ipactl status

Вывод команды:

[roman@ipa1 ~]$ sudo ipactl status
Directory Service: RUNNING
krb5kdc Service: RUNNING
kadmin Service: RUNNING
named Service: RUNNING
httpd Service: RUNNING
ipa-custodia Service: RUNNING
pki-tomcatd Service: RUNNING
ipa-otpd Service: RUNNING
ipa-dnskeysyncd Service: RUNNING
ipa: INFO: The ipactl command was successful
[roman@ipa1 ~]$

Как видно из листинга выше – все сервисы запущены.

3. Теперь попробуем подключиться к веб интерфейсу администрирования.

Адрес для подключения к нашему серверу:

https://ipa1.itproblog.ru

Важный момент – подключение необходимо выполнять по FQDN имени. Например, для подключения с моей рабочей станции Windows мне пришлось сделать соответствующую запись в файле hosts.

Веб интерфейс администрирования доступен – это уже хорошо.

Теперь попробуем аутентифицироваться под пользователем admin.

Мы попали на главную страницу веб интерфейса администрирования:

4. Попробуем создать пользователя user2:

sudo ipa user-add user2
First name: User
Last name: Two
------------------
Added user "user2"
------------------
  User login: user2
  First name: User
  Last name: Two
  Full name: User Two
  Display name: User Two
  Initials: UT
  Home directory: /home/user2
  GECOS: User Two
  Login shell: /bin/sh
  Principal name: user2@ITPROBLOG.RU
  Principal alias: user2@ITPROBLOG.RU
  Email address: user2@itproblog.ru
  UID: 1946800008
  GID: 1946800008
  Password: False
  Member of groups: ipausers
  Kerberos keys available: False
[roman@ipa1 ~]$

Установим пароль для пользователя:

sudo ipa passwd user2
[roman@ipa1 ~]$ sudo ipa passwd user2
New Password:
Enter New Password again to verify:
-----------------------------------------
Changed password for "user2@ITPROBLOG.RU"
-----------------------------------------
[roman@ipa1 ~]$

Укажем дату окончания действия пароля:

sudo ipa user-mod user2 --password-expiration 20221231000000Z
---------------------
Modified user "user2"
---------------------
  User login: user2
  First name: User
  Last name: Two
  Home directory: /home/user2
  Login shell: /bin/sh
  Principal name: user2@ITPROBLOG.RU
  Principal alias: user2@ITPROBLOG.RU
  User password expiration: 20221231000000Z
  Email address: user2@itproblog.ru
  UID: 1946800008
  GID: 1946800008
  Account disabled: False
  Password: True
  Member of groups: ipausers
  Kerberos keys available: True
[roman@ipa1 ~]$

Базовая проверка первоначальной настройки завершена.

Подключение клиентского рабочего места

В качестве клиента у нас будет выступать система с Linux Mint 20.3 Сinnamon. Несмотря на то, что с совместимостью сервера FreeIPA и Debian base свежих дистрибутивов есть проблемы, проблем с совместимостью с клиентом FreeIPA нет.

1. Устанавливаем операционную систему.

2. Актуализируем репозитории:

sudo apt update

3. Выполним обновление текущих пакетов:

sudo apt upgrade

4. Указываем FQDN имя нашего клиента (client1.itproblog.ru):

sudo hostnamectl set-hostname client1.itproblog.ru

5. Настраиваем параметры адресации на сетевом интерфейсе. В качестве DNS сервера указываем адрес сервера ipa1.itproblog.ru. Я выполню статическую настройку адресации.

6. Перезагружаем клиента.

7. Проверим разрешение имен и связь до сервера FreeIPA:

ping ipa1.itproblog.ru
roman@client:~$ ping ipa1.itproblog.ru
PING ipa1.itproblog.ru (10.10.10.26) 56(84) bytes of data.
64 bytes from 10.10.10.26 (10.10.10.26): icmp_seq=1 ttl=64 time=0.301 ms
64 bytes from 10.10.10.26 (10.10.10.26): icmp_seq=2 ttl=64 time=0.266 ms
^V64 bytes from 10.10.10.26 (10.10.10.26): icmp_seq=3 ttl=64 time=0.211 ms
^C
--- ipa1.itproblog.ru ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2024ms
rtt min/avg/max/mdev = 0.211/0.259/0.301/0.037 ms
roman@client:~$ ^C

8. Устанавливаем пакет для клиента FreeIPA:

sudo apt install freeipa-client

9. Теперь все готово для того, чтобы присоединить нашего клиента к домену FreeIPA:

sudo ipa-client-install --mkhomedir --domain itproblog.ru --realm ITPROBLOG.RU --enable-dns-updates

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

roman@client:~$ sudo ipa-client-install --mkhomedir --domain itproblog.ru --realm ITPROBLOG.RU
This program will set up FreeIPA client.
Version 4.8.6

WARNING: conflicting time&date synchronization service 'ntp' will be disabled in favor of chronyd

Discovery was successful!
Do you want to configure chrony with NTP server or pool address? [no]: 
Client hostname: vcenter.home.loc
Realm: ITPROBLOG.RU
DNS Domain: itproblog.ru
IPA Server: ipa1.itproblog.ru
BaseDN: dc=itproblog,dc=ru

Continue to configure the system with these values? [no]: yes

10. Подтверждаем, что мы намерены продолжить установку. На определенном этапе мастер запросит у нас учетную запись пользователя, у которой есть привилегии для присоединения клиента к домену FreeIPA. Используем учетную запись admin. Указываем логин и пароль:

Synchronizing time
No SRV records of NTP servers found and no NTP server or pool address was provided.
Using default chrony configuration.
Attempting to sync time with chronyc.
Time synchronization was successful.
User authorized to enroll computers: admin
Password for admin@ITPROBLOG.RU:

11. Дожидаемся окончания процесса настройки клиента FreeIPA:

Successfully retrieved CA cert
    Subject:     CN=Certificate Authority,O=ITPROBLOG.RU
    Issuer:      CN=Certificate Authority,O=ITPROBLOG.RU
    Valid From:  2022-05-14 07:48:42
    Valid Until: 2042-05-14 07:48:42

Enrolled in IPA realm ITPROBLOG.RU
Created /etc/ipa/default.conf
Configured sudoers in /etc/nsswitch.conf
Configured /etc/sssd/sssd.conf
Configured /etc/krb5.conf for IPA realm ITPROBLOG.RU
Systemwide CA database updated.
Could not update DNS SSHFP records.
SSSD enabled
Configured /etc/openldap/ldap.conf
Configured /etc/ssh/ssh_config
/etc/ssh/sshd_config not found, skipping configuration
Configuring itproblog.ru as NIS domain.
Client configuration complete.
The ipa-client-install command was successful
roman@client:~$ 

12. Разрешим указывать кастомное имя пользователя в нашей оболочке Сinnamon:

13. Перезагружаем клиентский ПК.

14. Попробуем аутентифицироваться на нашей рабочей станции под пользователем user1:

15. Укажем новый пароль.

16. Проверим текущего пользователя системы:

$ whoami
user2
$ klist
Ticket cache: KEYRING:persistent:1946800008:krb_ccache_6qQ2TkW
Default principal: user2@ITPROBLOG.RU

Valid starting       Expires              Service principal
05/15/2022 01:41:47  05/16/2022 00:48:57  krbtgt/ITPROBLOG.RU@ITPROBLOG.RU
$ 

Базовая настройка клиента FreeIPA завершена.

Установка и настройка FreeIPA: 2 комментария

  1. Нужна помощь – расскажите пожалуйста как отключить DNSSEC уже на установленном сервере FreeIPA.
    Спасибо

    1. Здравствуйте! Зависит от того, какой сервер DNS вы используете для FreeIPA. Предположу, что это все-таки BIND. Попробуйте вот в этом файле /etc/bind/ipa-options-ext.conf найти строчку с “dnssec-validation”. Необходимо для это строки установить значение “no”. Т.е. итоговая строка должна быть вот такая:

      dnssec-validation no;

      Если такого файла у вас нет, то попробуйте вот такой командой найти потенциальный файл, в котором есть директива dnssec-validation:

      find /etc/ -type f -exec grep -H 'dnssec-validation' {} \;

Добавить комментарий

Ваш адрес email не будет опубликован.