FreeIPA - Система централизованного управления авторизацией пользователей

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.