Thank you for reading this post, don't forget to subscribe!
В инструкции разберем пример установки сервера FreeIPA (аналог Microsoft Active Directory, Samba DC) на Linux CentOS (также протестировано на Rocky Linux). В качестве клиентов будем использовать дистрибутивы на базе 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.test.local
* где ipa-server.test.local — имя сервера, которое будет использоваться.
Брандмауэр
Необходимо открыть несколько портов, которые используются службами FreeIPA:
firewall-cmd --permanent --add-port=53/{tcp,udp} --add-port={80,443}/tcp --add-port={88,464}/{tcp,udp} --add-port=123/udp --add-port={389,636}/tcp
firewall-cmd --reload
* где:
- 53 — запросы DNS. Не обязателен, если мы не планируем использовать наш сервер в качестве сервера DNS.
- 80 и 443 — http и https для доступа к веб-интерфейсу управления.
- 88 и 464 — kerberos и kpasswd.
- 123 — синхронизация времени.
- 389 и 636 — ldap и ldaps соответственно.
SELinux
Отключаем SELinux командами:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
Установка и запуск FreeIPA
Установка выполняется из репозитория. Команды немного отличаются в зависимости от версии CentOS.
а) для Rocky Linux / 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,
vi /etc/sysctl.d/99-sysctl.conf
добавляем
net.ipv6.conf.lo.disable_ipv6 = 0
применяем:
sysctl -p /etc/sysctl.d/99-sysctl.conf
Отвечаем на первый вопрос, хотим ли мы использовать и сконфигурировать DNS-сервер BIND:
Do you want to configure integrated DNS (BIND)? [no]: yes
* в случае, если мы не хотим, чтобы сервер DNS был установлен вместе с сервером IPA, просто нажимаем Enter.
На остальные запросы можно ответить по умолчанию, нажав 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
Начнется процесс конфигурации. После его завершения мы увидим подсказку со следующими шагами:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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. |
… и так как порты мы уже настраивали, переходим ко второму шагу — проверим, что система может выдать билет:
kinit admin
… после вводим пароль администратора, который указывали при конфигурировании FreeIPA.
Проверяем, что билет получен:
klist
Ответ должен быть, примерно, следующим:
1 2 3 4 5 |
Ticket cache: KEYRING:persistent:0:0 Default principal: admin@test.LOCAL Valid starting Expires Service principal 23.07.2019 08:53:02 24.07.2019 08:52:55 krbtgt/test.LOCAL@test.LOCAL |
* где test.LOCAL — домен в моей системе. В данном примере мы получили билет для пользователя admin.
Настройка и подключение клиента
DNS
Клиентские компьютеры должны быть настроены на использование DNS-сервера, который мы сконфигурировали на сервере FreeIPA во время его установки. В сетевых настройках указываем использовать наш сервер ipa для разрешения имен:
- Пример настройки сети в CentOS / Rocky Linux
- Настройка сети с помощью netplan (Debian, Ubuntu).
- В устаревающих системах на основе deb настройка выполняется в файле /etc/network/interfaces (опция dns-nameservers) или /etc/resolv.conf (опция nameserver).
Время
Для корректной работы и подключения необходимо проверить настройки времени.
В первую очередь, укажем часовой пояс:
timedatectl set-timezone Europe/Moscow
* командой timedatectl list-timezones можно посмотреть список всех часовых поясов.
Устанавливаем утилиту для синхронизации времени, разрешаем запуск демона и стартуем его.
а) если на системе Ubuntu / Debian:
apt-get install chrony
systemctl enable chrony
б) если на системе Rocky Linux / CentOS / Red Hat:
yum install chrony
systemctl enable chronyd --now
Подключение к домену
Устанавливаем freeipa-client.
а) на компьютеры с Red Hat / CentOS:
yum install freeipa-client
б) на компьютеры с Debian / Ubuntu:
apt-get install freeipa-client
Для Debian 9 приходится использовать дополнительный репозиторий:
wget -qO - https://apt.numeezy.fr/numeezy.asc | apt-key add -
echo -e 'deb http://apt.hgb.fr jessie main' >> /etc/apt/sources.list
Обновляем список и устанавливаем:
apt-get update
apt-get install freeipa-client
Выполним конфигурирование клиента:
ipa-client-install --mkhomedir
Система на основе данных из DNS попробует определить настройки и либо попросит ввести наш домен (если не сможет найти данные автоматически):
DNS discovery failed to determine your DNS domain
Provide the domain name of your IPA server (ex: example.com): test.local
… либо отобразить настройки в консоли, например:
1 2 3 4 5 6 |
Discovery was successful! Client hostname: freeipa-client.test.local Realm: test.LOCAL DNS Domain: test.LOCAL IPA Server: ipa-server.test.local BaseDN: dc=test,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 admin@test.LOCAL:
Начнется процесс конфигурации — после его завершения:
1 2 3 4 5 6 7 8 |
... Configured /etc/openldap/ldap.conf NTP enabled Configured /etc/ssh/ssh_config Configured /etc/ssh/sshd_config Configuring test.LOCAL as NIS domain. Client configuration complete. The ipa-client-install command was successful |
… сразу проверим, что клиент может получать билет от сервера:
kinit admin
… и вводим пароль от пользователя admin.
Проверяем, что билет получен:
klist
Ответ должен быть, примерно, следующим:
1 2 3 4 5 |
Ticket cache: KEYRING:persistent:0:0 Default principal: admin@test.LOCAL Valid starting Expires Service principal 25.07.2019 23:39:56 26.07.2019 23:39:52 krbtgt/test.LOCAL@test.LOCAL |
Клиент настроен.
Работа с учетными записями
Создадим пользователя. Для этого рассмотрим пример использования командной строки и веб-интерфейса.
Командная строка
Авторизуемся на FreeIPA:
kinit admin
Создаем нового пользователя командой:
ipa user-add test --first=test --last=testovich --password
* где test— логин; first — имя пользователя; last — фамилия; password — ключ для запроса пароля.
… после ввода команды система запросит пароль для создаваемого пользователя — вводим его дважды.
Мы должны увидеть сводку по параметрам для созданного пользователя:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Добавлен пользователь «test» ----------------------------- Логин пользователя: test Имя: test Фамилия: testovich Полное имя: test testovich Отображаемое имя: test testovich Инициалы: ДМ Домашний каталог: /home/test GECOS: test testovich Оболочка входа: /bin/sh Principal name: test@test.LOCAL Principal alias: test@test.LOCAL User password expiration: 20190725205853Z Электронный адрес: test@test.local UID: 1798800001 ID группы: 1798800001 Пароль: True Member of groups: ipausers Kerberos ключей доступно: True |
Примет более полной команды для создания пользователя:
ipa user-add test --first=test --last=testovich --cn="test testovich" --displayname="test testovich" --email=master@test.ru --password
* в данном примере мы использовали дополнительные поля:
- cn — полное имя.
- displayname — отображаемое имя.
- email — адрес электронной почты.
* более полный список атрибутов можно найти на странице с мануалом Fedora Project.
Веб-интерфейс
Открываем браузер и переходим по адресу имени сервера — в нашем примере, https://ipa-server.test.local. Закрываем всплывающее окно с запросом пароля. В появившейся странице авторизации вводим логин admin и его пароль.
Откроется страница управления пользователями:
На панели справа (над списком пользователей) кликаем по Добавить:
В открывшемся окне заполняем поля для создания пользователя и нажимаем по Добавить:
Проверка
На компьютере с клиентом вводим команду для проверки:
kinit test
… и вводим пароль от созданной учетной записи:
Password for test@test.LOCAL:
При вервом входе система попросит поменять пароль на новый:
Password expired. You must change it now.
Enter new password:
Enter it again:
Редактирование учетных записей
Редактирование выполняется командой:
ipa user-mod <имя записи> <опции>
Например, поменять пароль можно командой:
ipa user-mod username --password
* в данном примере будет запрошен новый пароль для учетной записи username.
Для удаления вводим:
ipa user-del <имя записи>
Например:
ipa user-del user_name
Подробная информация
Получить информацию мы можем о любой сущности в LDAP с помощью командной строки.
Для пользователей:
ipa user-find --all
ipa user-find user_name --all
* первая команда вернет информацию по всем пользователям, вторая — по конкретному (в данном примере user_name).
Для групп:
ipa group-find --all
ipa group-find admins --all
* первая команда вернет информацию по всем группам, вторая — только для admins.
Примеры команд
Рассмотрим отдельно примеры работы с FreeIPA посредством командной строки.
Работа с группами
Создание группы безопасности:
ipa group-add --desc='Group for managers departmen' managers
* создаем группу безопасности managers.
Добавить пользователя в группу:
ipa group-add-member managers --users=user1,user2,user3
* добавим в группу managers пользователей user1, user2 и user3.
Дополнительные настройки
Рассмотрим отдельно некоторые настройки и возможности работы с FreeIPA.
SSH аутентификация через FreeIPA
По умолчанию, клиент конфигурируется на возможность входа по SSH с использованием пользователей из FreeIPA. Внесем некоторые изменения для удобства.
Открываем конфигурационный файл для pam:
vi /etc/pam.d/common-session
Добавим в конец одну строку:
…
session required pam_mkhomedir.so skel=/etc/skel umask=0022
* данная настройка укажет на необходимость автоматического создания домашней директории для пользователя.
Готово.
Вывод клиента из домена
Если необходимо вывести клиентский компьютер из домена, вводим команду:
ipa-client-install --uninstall
Система выполнит необходимые настройки самостоятельно:
1 2 3 4 5 6 7 8 9 10 11 |
Unenrolling client from IPA server Removing Kerberos service principals from /etc/krb5.keytab Disabling client Kerberos and LDAP configurations Redundant SSSD configuration file /etc/sssd/sssd.conf was moved to /etc/sssd/sssd.conf.deleted Restoring client configuration files Unconfiguring the NIS domain. nscd daemon is not installed, skip configuration nslcd daemon is not installed, skip configuration Systemwide CA database updated. Client uninstall complete. The original nsswitch.conf configuration has been restored. |
И отправляем компьютер в перезагрузку:
You may need to restart services or reboot the machine.
Do you want to reboot the machine? [no]: yes
Возможные ошибки
Разберем некоторые ошибки, которые могут возникнут в процессе установки 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.test.local
* в данном примере у сервера будет имя ipa-server в домене test.local.