Thank you for reading this post, don't forget to subscribe!
FreeIPA бесплатная реализация сервера хранения данных об объектах безопасности (пользователи, группы, компьютеры и так далее). Доступ к данным осуществляется с помощью протокола LDAP. Разработан FreeIPA компанией Red Hat. В качестве аналогов можно привести в пример Microsoft Active Directory, OpenLDAP, Samba (с версии 4).
По сути, FreeIPA — комплекс компонентов, которые и обеспечивают сервис:
- В качестве реализации LDAP используется 389 Directory Server.
- Для аутентификации пользователей, FreeIPA использует сетевой протокол Kerberos.
- Для интеграции с Active Directory — Samba.
- Сервис dns (для разрешения имен и поиска сервисов) — BIND.
- Управление сертификатами — DogTag.
В качестве операционных систем, на которые может быть установлен сервер FreeIPA, можно использовать Linux (например, Red Hat, CentOS, Debian, Ubuntu). В качестве клиентом также поддерживаются Windows и MacOS. Установка может быть выполнена из репозитория или в качестве контейнера Docker. Из коробки, FreeIPA также поддерживает управление по веб-интерфейсу. Подробную документацию можно найти на официальном сайте.
Подготовка сервера
Для подготовки сервера безопасности с доступом к данным по LDAP необходим сервер с правильно настроенным временем. Также необходимо правильно настроить межсетевой экран и систему безопасности SELinux.
Время
Установим часовой пояс:
cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* в данном примере используется московское время.
Затем устанавливаем и запускаем утилиту для синхронизации времени chrony.
yum install chrony
systemctl enable chronyd
systemctl start chronyd
Имя сервера
Для корректной работы сервера, необходимо, задать ему полное доменное имя (FQDN). Выполняем команду:
hostnamectl set-hostname ipa-server.test.ru
* где ipa-server.test.ru — имя сервера, которое будет использоваться.
Брандмауэр
Необходимо открыть несколько портов, которые используются службами 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
Установка и запуск FreeIPA
Установка выполняется из репозитория командой:
yum install ipa-server ipa-server-dns
После выполняем конфигурирование сервиса:
ipa-server-install
На первый вопрос, хотим ли мы использовать и сконфигурировать 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.
Проверяем, что билет получен:
klist
Ответ должен быть, примерно, следующим:
Ticket cache: KEYRING:persistent:0:0
Default principal: admin@test.ru
Valid starting Expires Service principal
23.07.2019 08:53:02 24.07.2019 08:52:55 krbtgt/test.ru@test.ru.
* где test.ru — домен в моей системе. В данном примере мы получили билет для пользователя 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.test.ru
Realm: test.ru
DNS Domain: test.ru
IPA Server: ipa-server.test.ru
BaseDN: dc=test,dc=ru
Если эти настройки верны, отвечаем положительно на запрос 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 admin@test.ru:
Начнется процесс конфигурации — после его завершения:
…
Configured /etc/openldap/ldap.conf
NTP enabled
Configured /etc/ssh/ssh_config
Configured /etc/ssh/sshd_config
Configuring test.ru as NIS domain.
Client configuration complete.
… сразу проверим, что клиент может получать билет от сервера:
kinit admin
… и вводим пароль от пользователя admin.
Проверяем, что билет получен:
klist
Ответ должен быть, примерно, следующим:
Ticket cache: KEYRING:persistent:0:0
Default principal: admin@test.ru
Valid starting Expires Service principal
25.07.2019 23:39:56 26.07.2019 23:39:52 krbtgt/test.ru@test.ru
Клиент настроен.
Создание пользователей
Создадим пользователя. Для этого рассмотрим пример использования командной строки и веб-интерфейса.
Командная строка
Авторизуемся на FreeIPA:
kinit admin
Создаем нового пользователя командой:
ipa user-add mid --first=Дикий --last=Прапор --password
* где mid — логин; first — имя пользователя; last — фамилия; password — ключ для запроса пароля.
… после ввода команды система запросит пароль для создаваемого пользователя — вводим его дважды.
Мы должны увидеть сводку по параметрам для созданного пользователя:
Добавлен пользователь «mid»
-----------------------------
Логин пользователя: mid
Имя: Дикий
Фамилия: Прапор
Полное имя: Дикий Прапор
Отображаемое имя: Дикий Прапор
Инициалы: ДП
Домашний каталог: /home/mid
GECOS: Дикий Прапор
Оболочка входа: /bin/sh
Principal name: mid@test.ru
Principal alias: mid@test.ru
User password expiration: 20190725205853Z
Электронный адрес: mid@test.ru
UID: 1798800001
ID группы: 1798800001
Пароль: True
Member of groups: ipausers
Kerberos ключей доступно: True
Веб-интерфейс
Открываем браузер и переходим по адресу имени сервера — в нашем примере, https://ipa-server.test.ru. Закрываем всплывающее окно с запросом пароля. В появившейся странице авторизации вводим логин admin и его пароль.
Откроется страница управления пользователями:
В открывшемся окне заполняем поля для создания пользователя и нажимаем по Добавить:
Проверка
На компьютере с клиентом вводим команду для проверки:
kinit mid
… и вводим пароль от созданной учетной записи:
Password for mid@test.ru:
При первом входе система попросит поменять пароль на новый:
Password expired. You must change it now.
Enter new password:
Enter it again:
SSH аутентификация через FreeIPA
По умолчанию, клиент конфигурируется на возможность входа по SSH с использованием пользователей из FreeIPA. Внесем некоторые изменения для удобства.
Открываем конфигурационный файл для pam:
vim /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.
Решение: открываем конфигурационный файл sysctl:
vi /etc/sysctl.d/99-sysctl.conf
Добавляем строку:
net.ipv6.conf.lo.disable_ipv6 = 0
Применяем настройки:
sysctl -p /etc/sysctl.d/99-sysctl.conf
2. Invalid hostname 'XXX', must be fully-qualified
Появляется при запуске команды ipa-server-install.
Причина: имя нашего сервера не является FQDN (полным доменным).
Решение: задаем полное имя с доменом командой:
hostnamectl set-hostname ipa-server.test.ru
* в данном примере у сервера будет имя ipa-server в домене test.ru.