Установка и настройка LDAP сервера FreeIPA на Linux CentOS

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: FreeIPACentOS.

В инструкции разберем пример установки сервера FreeIPA (аналог Microsoft Active Directory, Samba DC) на Linux CentOS. В качестве клиентов будем использовать дистрибутивы на базе RPM (Red Hat, CentOS, …) и deb (Debian, Ubuntu, …).

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

Для подготовки сервера безопасности с доступом к данным по LDAP необходим сервер с правильно настроенным временем. Также необходимо правильно настроить межсетевой экран и систему безопасности SELinux.

Время

Установим часовой пояс:

timedatectl set-timezone Europe/Moscow

* в данном примере используется московское время.

Затем устанавливаем и запускаем утилиту для синхронизации времени chrony.

yum install chrony

systemctl enable chronyd —now

Имя сервера

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

hostnamectl set-hostname ipa-server.admins24.local

* где ipa-server.admins24.local — имя сервера, которое будет использоваться.

Брандмауэр

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

firewall-cmd —permanent —add-port=53/{tcp,udp} —add-port=80/tcp —add-port=88/{tcp,udp} —add-port=123/udp —add-port=389/tcp —add-port=443/tcp —add-port=464/{tcp,udp} —add-port=636/tcp

firewall-cmd —reload

SELinux

Отключаем SELinux командами:

setenforce 0

sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config

Установка и запуск FreeIPA

Установка выполняется из репозитория. Команды немного отличаются в зависимости от версии CentOS.

а) для CentOS 8:

dnf install @idm:DL1

dnf install ipa-server

* первая команда установит модуль DL1 Stream-репозитория. Вторая — сам freeipa.

б) для CentOS 7:

yum install ipa-server

Если мы хотим использовать наш сервер еще и как DNS, то устанавливаем:

yum install ipa-server-dns

После выполняем конфигурирование сервиса:

ipa-server-install

* если система ругнется на IPv6, переходим к решению.

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

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

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

Когда система запросит пароль для Directory Manager, необходимо придумать и ввести его дважды:

Directory Manager password: 
Password (confirm): 

… будет создана учетная запись для подключения к LDAP.

Затем также нужно придумать и задать пароль для IPA admin:

IPA admin password: 
Password (confirm):

… будет создана учетная запись IPA Administrator для первого пользователя FreeIPA с правами администратора.

Для настройки 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]

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

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

Начнется процесс конфигурации. После его завершения мы увидим подсказку со следующими шагами:

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
                UDP Ports:
                  * 88, 464: kerberos
                  * 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.

… и так как порты мы уже настраивали, переходим ко второму шагу — проверим, что система может выдать билет:

kinit admin

… после вводим пароль администратора, который указывали при конфигурировании FreeIPA.

Проверяем, что билет получен:

Ответ должен быть, примерно, следующим:

Ticket cache: KEYRING:persistent:0:0
Default principal: [email protected]

Valid starting       Expires              Service principal
23.07.2019 08:53:02  24.07.2019 08:52:55  krbtgt/[email protected]

* где DMOSK.LOCAL — домен в моей системе. В данном примере мы получили билет для пользователя admin.

Настройка и подключение клиента

Клиентские компьютеры должны быть настроены на использование DNS-сервера, который мы сконфигурировали на сервере FreeIPA во время его установки. В сетевых настройках указываем использовать наш сервер ipa для разрешения имен и перезапускаем сетевую службу:

systemctl restart network || systemctl restart networking

Устанавливаем клиента.

а) на компьютеры с Red Hat / CentOS:

yum install freeipa-client

б) на компьютеры с Debian / Ubuntu:

apt-get install freeipa-client

Выполним конфигурирование клиента:

ipa-client-install —mkhomedir

… система на основе данных из DNS попробует определить настройки и отобразить их в консоли, например:

Discovery was successful!
Client hostname: freeipa-client.admins24.local
Realm: DMOSK.LOCAL
DNS Domain: DMOSK.LOCAL
IPA Server: ipa-server.admins24.local
BaseDN: dc=admins24,dc=local

Если эти настройки верны, отвечаем положительно на запрос Continue to configure the system with these values?

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

Система спросит, от какого пользователя производить настройку — вводим admin:

User authorized to enroll computers: admin

… и пароль:

Password for [email protected]:

Начнется процесс конфигурации — после его завершения:


Configured /etc/openldap/ldap.conf
NTP enabled
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config
Configuring DMOSK.LOCAL as NIS domain.
Client configuration complete.

… сразу проверим, что клиент может получать билет от сервера:

kinit admin

…  и вводим пароль от пользователя admin.

Проверяем, что билет получен:

Ответ должен быть, примерно, следующим:

Ticket cache: KEYRING:persistent:0:0
Default principal: [email protected]

Valid starting       Expires              Service principal
25.07.2019 23:39:56  26.07.2019 23:39:52  krbtgt/[email protected]

Клиент настроен.

Создание пользователей

Создадим пользователя. Для этого рассмотрим пример использования командной строки и веб-интерфейса.

Командная строка

Авторизуемся на FreeIPA:

kinit admin

Создаем нового пользователя командой:

ipa user-add admins24 —first=Дмитрий —last=Моск —password

* где admins24 — логин; first — имя пользователя; last — фамилия; password — ключ для запроса пароля.

… после ввода команды система запросит пароль для создаваемого пользователя — вводим его дважды.

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

Добавлен пользователь «admins24»
——————————
  Логин пользователя: admins24
  Имя: Дмитрий
  Фамилия: Моск
  Полное имя: Дмитрий Моск
  Отображаемое имя: Дмитрий Моск
  Инициалы: ДМ
  Домашний каталог: /home/admins24
  GECOS: Дмитрий Моск
  Оболочка входа: /bin/sh
  Principal name: [email protected]
  Principal alias: [email protected]
  User password expiration: 20190725205853Z
  Электронный адрес: [email protected]
  UID: 1798800001
  ID группы: 1798800001
  Пароль: True
  Member of groups: ipausers
  Kerberos ключей доступно: True

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

ipa user-add admins24 —first=Дмитрий —last=Моск —cn=»Моск Дмитрий» —displayname=»Моск Дмитрий» —[email protected] —password

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

  • cn — полное имя.
  • displayname — отображаемое имя.
  • email — адрес электронной почты.

* более полный список атрибутов можно найти на странице с мануалом Fedora Project.

Веб-интерфейс

Открываем браузер и переходим по адресу имени сервера — в нашем примере, https://ipa-server.admins24.local. Закрываем всплывающее окно с запросом пароля. В появившейся странице авторизации вводим логин admin и его пароль.

Откроется страница управления пользователями:

Управление пользователями в веб интерфейса FreeIPA

На панели справа (над списком пользователей) кликаем по Добавить:

Кнопка Добавить в веб-интерфейсе FreeIPA

В открывшемся окне заполняем поля для создания пользователя и нажимаем по Добавить:

Заполняем данные для создания пользователя

Проверка

На компьютере с клиентом вводим команду для проверки:

kinit admins24

… и вводим пароль от созданной учетной записи:

Password for [email protected]

При вервом входе система попросит поменять пароль на новый:

Password expired.  You must change it now.
Enter new password: 
Enter it again:

SSH аутентификация через FreeIPA

По умолчанию, клиент конфигурируется на возможность входа по SSH с использованием пользователей из FreeIPA. Внесем некоторые изменения для удобства.

Открываем конфигурационный файл для pam:

vi /etc/pam.d/common-session

Добавим в конец одну строку:


session required    pam_mkhomedir.so skel=/etc/skel umask=0022

* данная настройка укажет на необходимость автоматического создания домашней директории для пользователя.

Готово.

Возможные ошибки

Разберем некоторые ошибки, которые могут возникнут в процессе установки FreeIPA.

1. ipapython.admintool: ERROR    IPv6 stack is enabled in the kernel but there is no interface that has ::1 address assigned. Add ::1 address resolution to ‘lo’ interface. You might need to enable IPv6 on the interface ‘lo’ in sysctl.conf.

Ошибка появляется при попытке запустить команду ipa-server-install.

Причина: если в системе отключен IPv6 с помощью параметра в ядре net.ipv6.conf.all.disable_ipv6 или net.ipv6.conf.default.disable_ipv6, то команда выдаст ошибку, так как для локальной петли нам нужен IPv6. Если же IPv6 отключен через GRUB, то необходимо его включить.

Решение:

1. sysctl

Открываем конфигурационный файл sysctl:

vi /etc/sysctl.d/99-sysctl.conf

Добавляем строку:

net.ipv6.conf.lo.disable_ipv6 = 0

Применяем настройки:

sysctl -p /etc/sysctl.d/99-sysctl.conf

2. GRUB

Открываем конфигурационный файл grub:

vi /etc/default/grub

Находим строку опцию GRUB_CMDLINE_LINUX — в ее значении мы должны найти ipv6.disable=1:

GRUB_CMDLINE_LINUX=»crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap ipv6.disable=1 crashkernel=auto rhgb quiet»

Удаляем данную опцию из значения — в моем случае получилось:

GRUB_CMDLINE_LINUX=»crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap crashkernel=auto rhgb quiet»

Переконфигурируем grub:

grub2-mkconfig -o /boot/grub2/grub.cfg

Для применения, перезагрузим систему:

shutdown -r now

2. Invalid hostname ‘XXX’, must be fully-qualified

Появляется при запуске команды ipa-server-install.

Причина: имя нашего сервера не является FQDN (полным доменным).

Решение: задаем полное имя с доменом командой:

hostnamectl set-hostname ipa-server.admins24.local

* в данном примере у сервера будет имя ipa-server в домене admins24.local.