Установка и использование FreeIPA

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

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

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

kinit admin

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

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

klist

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

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

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

DNS

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

  1. При­мер настрой­ки сети в CentOS / Rocky Linux
  2. Настрой­ка сети с помо­щью netplan (Debian, Ubuntu).
  3. В уста­ре­ва­ю­щих систе­мах на осно­ве 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

… либо отоб­ра­зить настрой­ки в кон­со­ли, например:

Если эти настрой­ки вер­ны, отве­ча­ем поло­жи­тель­но на запрос 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:

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

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

kinit admin

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

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

klist

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

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

Работа с учетными записями

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

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

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

kinit admin

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

ipa user-add test --first=test --last=testovich --password

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

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

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

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

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 поль­зо­ва­те­лей user1user2 и 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

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

 

И отправ­ля­ем ком­пью­тер в перезагрузку:

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.