FreeIPA

Материал из ALT Linux Wiki
Freeipa-logo-small.png

FreeIPA - это комплексное решение по управлению безопасностью Linux-систем, 389 Directory Server, MIT Kerberos, NTP, DNS, Dogtag. Оно состоит из веб-интерфейса и интерфейса командной строки.
FreeIPA является интегрированной системой проверки подлинности и авторизации в сетевой среде Linux, FreeIPA сервер обеспечивает централизованную проверку подлинности, авторизацию и контроль за аккаунтами пользователей сохраняя сведения о пользователе, группах, узлах и других объектах необходимых для обеспечения сетевой безопасности.

Сайт проекта: http://www.freeipa.org/

Установка сервера FreeIPA

Устанавливать будет со встроенным DNS сервером и доменом EXAMPLE.TEST в локальной сети 192.168.135.0/24.
Для начала отключим ahttpd, работающий на порту 8080, во избежание конфликтов с разворачиваемым tomcat и отключим HTTPS в Apache2:

# service ahttpd stop
# a2dissite 000-default_https
# service httpd2 condreload

Установим необходимые пакеты:

# apt-get install freeipa-server freeipa-server-dns

Зададим имя сервера:

# hostnamectl set-hostname ipa.example.test

Запускаем скрипт настройки сервера: В пакетном режиме:

# ipa-server-install -U --hostname=$(hostname) -r EXAMPLE.TEST -n example.test -p 12345678 -a 12345678 --setup-dns --no-forwarders --no-reverse

или интерактивно:

# ipa-server-install
Внимание! Пароли должны быть не менее 8 символов


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

Do you want to configure integrated DNS (BIND)? [no]: yes
Do you want to configure DNS forwarders? [yes]: no
Do you want to search for missing reverse zones? [yes]: no

остальные вопросы выбираем по умолчанию (можно просто нажать Enter). Так же при установке попросят ввести пароль администратора системы и пароль администратора каталогов.

Для возможности управлять FreeIPA сервером из командной строки необходимо получить билет Kerberos:

# kinit admin

Добавим в DNS запись о нашем сервере времени:

# ipa dnsrecord-add example.test _ntp._udp --srv-priority=0 --srv-weight=100 --srv-port=123 --srv-target=ipa.example.test.

Проверить работу ntp сервера можно командой:

# ntpdate -q localhost
server 127.0.0.1, stratum 3, offset 0.000018, delay 0.02568
27 Apr 10:27:00 ntpdate[3491]: adjust time server 127.0.0.1 offset 0.000018 sec

Также доступен веб-интерфейс по адресу:

https://ipa.example.test/ipa/ui/
Примечание: Если выдаёт
[error] CalledProcessError: Command '/sbin/systemctl restart httpd2.service' returned non-zero exit status 1

Выполните

# systemctl restart httpd2

Отмените установку:

# ipa-server-install -U --uninstall
и повторите снова.


Установка FreeIPA клиента и подключение к серверу

Установим необходимые пакеты:

# apt-get install freeipa-client libsss_sudo krb5-kinit bind-utils libbind

Зададим имя компьютера:

# hostnamectl set-hostname comp01.example.test

Добавим DNS сервер, для этого создадим файл /etc/net/ifaces/ens19/resolv.conf со следующим содержимым:

nameserver 192.168.135.1

192.168.135.1 - IP-адрес нашего FreeIPA сервера.
Укажем службе resolvconf использовать DNS FreeIPA и наш домен для поиска.
Для этого в файл /etc/resolvconf.conf добавим/отредактируем следующие параметры:

interface_order='lo lo[0-9]* lo.* ens19'
search_domains=example.test

Где ens19 -интерфейс на котором доступен FreeIPA сервер, example.test - наш домен.
Обновим DNS адреса:

# resolvconf -u

После этого в файле /etc/resolv.conf должны появится строки:

search example.test
nameserver 192.168.135.1

Запускаем скрипт настройки клиента: в пакетном режиме:

# ipa-client-install -U -p admin -w 12345678

или интерактивно:

# ipa-client-install

Если все настроено верно скрипт должен выдать такое сообщение:

'''Discovery was successful!'''
Client hostname: comp02.example.test
Realm: EXAMPLE.TEST
DNS Domain: example.test
IPA Server: ipa.example.test
BaseDN: dc=example,dc=test
Continue to configure the system with these values? [no]:

Отвечаем yes вводим имя пользователя, имеющего право вводить машины в домен, и его пароль.

Пример успешного ввода в домен:

Discovery was successful!
Client hostname: ipa-client1.test1.alt
Realm: TEST1.ALT
DNS Domain: test1.alt
IPA Server: ipa-server.test1.alt
BaseDN: dc=test1,dc=alt
Synchronizing time with KDC...
Attempting to sync time using ntpdate.  Will timeout after 15 seconds
Successfully retrieved CA cert
    Subject:     CN=Certificate Authority,O=TEST1.ALT
    Issuer:      CN=Certificate Authority,O=TEST1.ALT
    Valid From:  Wed Feb 15 15:17:45 2017 UTC
    Valid Until: Sun Feb 15 15:17:45 2037 UTC

Enrolled in IPA realm TEST1.ALT
Created /etc/ipa/default.conf
Configured sudoers in /etc/nsswitch.conf
Configured /etc/sssd/sssd.conf
Configured passwd in /etc/nsswitch.conf
Configured group in /etc/nsswitch.conf
Configured gshadow in /etc/nsswitch.conf
Configured services in /etc/nsswitch.conf
Configured netgroup in /etc/nsswitch.conf
Configured shadow in /etc/nsswitch.conf
Configured /etc/nsswitch.conf
Configured PAM system-auth
Configured /etc/krb5.conf for IPA realm TEST1.ALT
trying https://ipa-server.test1.alt/ipa/json
Forwarding 'ping' to json server 'https://ipa-server.test1.alt/ipa/json'
Forwarding 'ca_is_enabled' to json server 'https://ipa-server.test1.alt/ipa/json'
Hostname (ipa-client1.test1.alt) does not have A/AAAA record.
Failed to update DNS records.
Missing A/AAAA record(s) for host ipa-client1.test1.alt: 10.10.10.206.
Missing reverse record(s) for address(es): 10.10.10.206.
Adding SSH public key from /etc/openssh/ssh_host_ecdsa_key.pub
Adding SSH public key from /etc/openssh/ssh_host_ed25519_key.pub
Adding SSH public key from /etc/openssh/ssh_host_dsa_key.pub
Adding SSH public key from /etc/openssh/ssh_host_rsa_key.pub
Forwarding 'host_mod' to json server 'https://ipa-server.test1.alt/ipa/json'
Could not update DNS SSHFP records.
SSSD enabled
Configured /etc/openldap/ldap.conf
NTP enabled
Configured /etc/openssh/ssh_config
Configured /etc/openssh/sshd_config
Configuring test1.alt as NIS domain.
Client configuration complete.
Внимание! Если при входе в домен возникает такая ошибка:
Hostname (ipa-client1.test1.alt) does not have A/AAAA record.
Failed to update DNS records.
Проверьте IP-адрес доменного DNS сервера в файле /etc/resolv.conf


В случае возникновения ошибки, необходимо перед повторной установкой запустить процедуру удаления:

# ipa-client-install -U --uninstall

Для работы sudo-политик для доменных пользователей на клиентской машине необходимо разрешить доступ к sudo:

# control sudo public

Вход пользователя

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

Внимание! Если машина до этого была в других доменах или есть проблемы со входом пользователей рекомендуется очистить кэш sssd:
# systemctl stop sssd
# rm -f /var/lib/sss/db/*
# rm -f /var/lib/sss/mc/*
# systemctl start sssd


Настройка доверительных отношений с AD

FreeIPA использует Samba для интеграции в Active Directory. Для работы Samba необходим работающий стек IPv6.
Начальные данные:

  • IP адрес IPA сервера: 192.168.135.130
  • Имя IPA сервера: dcf
  • Имя IPA домена: domf.testf
  • NetBIOS имя IPA домена: DOMF
  • IP адрес AD DC: 192.168.135.150
  • Имя AD DC: dcc
  • Имя AD домена: domc.testc
  • NetBIOS имя AD домена: DOMC

Установим необходимые пакеты:

# apt-get install freeipa-server-trust-ad python-module-sss-murmur samba-winbind

Предварительная настройка IPA сервера

Настроим IPA для работы с доверительными отношениями:

# ipa-adtrust-install

Скрипт спросит необходимо ли конфигурировать slapi-nis плагин для поддержки работы старых клиентов (SSSD < 1.9) с пользователем из доверенного домена:

Enable trusted domains support in slapi-nis? [no]:

На IPA сервере добавлен хотя бы один пользователь (администратор сервера), поэтому скрипт предложит сгенерировать SID для всех существующих пользователей и груп:

Do you want to run the ipa-sidgen task? [no]:

Дата и время на серверах должны совпадать.

IPA сервер в своей работе использует следующие порты:
<pre>TCP ports: 80, 88, 443, 389, 636, 88, 464, 53, 135, 138, 139, 445, 1024-1300
UDP ports: 88, 464, 53, 123, 138, 139, 389, 445

Они должны быть открыты и доступны.
Настроим Samba:

# net conf setparm global 'dedicated keytab file' /etc/samba/samba.keytab
# systemctl restart ipa

Проверим проходит ли Samba аутентификацию Kerberos со стороны IPA сервера:

# kinit admin
# smbclient -L dcf.domf.testf -k
lp_load_ex: changing to config backend registry
Domain=[DOMF] OS=[Windows 6.1] Server=[Samba 4.5.5]

	Sharename       Type      Comment
	---------       ----      -------
	IPC$            IPC       IPC Service (Samba 4.5.5)
Domain=[DOMF] OS=[Windows 6.1] Server=[Samba 4.5.5]

	Server               Comment
	---------            -------

	Workgroup            Master
	---------            -------

Настроим DNS на обоих серверах, чтобы они знали друг о друге:
На AD сервере создадим сервер условной пересылки для зоны IPA домена:

C:\> dnscmd 127.0.0.1 /ZoneAdd domf.testf /Forwarder 192.168.135.130

На IPA сервере так же добавим зону AD домена:

# ipa dnsforwardzone-add domc.testc --forwarder=192.168.135.150 --forward-policy=only

Проверка конфигурации DNS

На AD сервере:
Проверим наличие записей для работы сервисов IPA на DNS-сервере AD.
1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:

C:\>nslookup.exe
> set type=SRV

> _kerberos._udp.domf.testf.
_kerberos._udp.domf.testf.       SRV service location:
    priority                = 0
    weight                  = 100
    port                    = 88
    svr hostname   = dcf.domf.testf.

> _ldap._tcp.domf.testf.
_ldap._tcp.ipa.example.com       SRV service location:
    priority                = 0
    weight                  = 100
    port                    = 389
    svr hostname   = dcf.domf.testf.

2. Запись отвечающая за имя Kerberos realm IPA домена:

C:\>nslookup.exe
> set type=TXT
> _kerberos.domf.testf.
_kerberos.domf.testf.        text =

    "DOMF.TESTF"

3. После выполнения команды ipa-adtrust-install должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:

C:\>nslookup.exe
> set type=SRV
> _kerberos._udp.dc._msdcs.domf.testf.
_kerberos._udp.dc._msdcs.domf.testf.        SRV service location:
    priority = 0
    weight = 100
    port = 88
    svr hostname = dcf.domf.testf.
> _ldap._tcp.dc._msdcs.domf.testf.
_ldap._tcp.dc._msdcs.domf.testf.        SRV service location:
    priority = 0
    weight = 100
    port = 389
    svr hostname = dcf.domf.testf.

Далее проверим наличие записей для работы сервисов AD на DNS-сервере AD. 4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:

C:\>nslookup.exe
> set type=SRV
> _kerberos._udp.dc._msdcs.domc.testc.
_kerberos._udp.dc._msdcs.domc.testc. 	SRV service location:
    priority = 0
    weight = 100
    port = 88
    svr hostname = dcc.domc.testc.
> _ldap._tcp.dc._msdcs.domc.testc.
_ldap._tcp.dc._msdcs.domc.testc. 	SRV service location:
    priority = 0
    weight = 100
    port = 389
    svr hostname = dcc.domc.testc.

На IPA сервере:
Проверим наличие записей для работы сервисов IPA на DNS-сервере IPA.
1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:

# dig +short -t SRV _kerberos._udp.domf.testf.
0 100 88 dcf.domf.testf.

# dig +short -t SRV _ldap._tcp.domf.testf.
0 100 389 dcf.domf.testf.

2. Запись отвечающая за имя Kerberos realm IPA домена:

dig +short -t TXT _kerberos.domf.testf.
"DOMF.TESTF"

3. После выполнения команды ipa-adtrust-install должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:

# dig +short -t SRV _kerberos._udp.dc._msdcs.domf.testf.
0 100 88 dcf.domf.testf.

# dig +short -t SRV _ldap._tcp.dc._msdcs.domf.testf.
0 100 389 dcf.domf.testf.

Далее проверим наличие записей для работы сервисов AD на DNS-сервере IPA. 4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:

# dig +short -t SRV _kerberos._udp.dc._msdcs.domc.testc.
0 100 88 dcc.domc.testc.

# dig +short -t SRV _ldap._tcp.dc._msdcs.domc.testc.
0 100 389 dcc.domc.testc.
Внимание! Если запись _kerberos._udp.dc._msdcs.domc.testc. не доступна проверьте _kerberos._tcp.dc._msdcs.domc.testc.


Настройка доверия

Добавление двунаправленных доверительных отношений леса (Forest Trust) с AD:

# kinit admin
# ipa trust-add --type=ad domc.testc --admin Administrator --password --two-way=true
Active Directory domain administrator's password: 
---------------------------------------------------
Added Active Directory trust for realm "domc.testc"
---------------------------------------------------
  Realm name: domc.testc
  Domain NetBIOS name: DOMC
  Domain Security Identifier: S-1-5-21-3611360735-1365415015-3217858865
  SID blacklist incoming: S-1-5-20, S-1-5-3, S-1-5-2, S-1-5-1, S-1-5-7, S-1-5-6, S-1-5-5, S-1-5-4, S-1-5-9, S-1-5-8, S-1-5-17, S-1-5-16, S-1-5-15, S-1-5-14, S-1-5-13,
                          S-1-5-12, S-1-5-11, S-1-5-10, S-1-3, S-1-2, S-1-1, S-1-0, S-1-5-19, S-1-5-18
  SID blacklist outgoing: S-1-5-20, S-1-5-3, S-1-5-2, S-1-5-1, S-1-5-7, S-1-5-6, S-1-5-5, S-1-5-4, S-1-5-9, S-1-5-8, S-1-5-17, S-1-5-16, S-1-5-15, S-1-5-14, S-1-5-13,
                          S-1-5-12, S-1-5-11, S-1-5-10, S-1-3, S-1-2, S-1-1, S-1-0, S-1-5-19, S-1-5-18
  Trust direction: Two-way trust
  Trust type: Active Directory domain
  Trust status: Established and verified

Необходимо ввести пароль Administrator AD.
Далее необходимо запросить сервер AD о его доверенных доменах:

# ipa trust-fetch-domains domc.testc
--------------------------------------------
List of trust domains successfully refreshed
--------------------------------------------
  Realm name: domd.domc.testc
  Domain NetBIOS name: DOMD
  Domain Security Identifier: S-1-5-21-2419724241-1549151283-3268040000
------------------------------
Количество вернутых значений 1
------------------------------

При этом IPA создаст нужные id-диапазоны для доверенных доменов.
Если мы добавим в лес еще один домен DOME.TESTE, то необходимо настроить DNS на обоих серверах, чтобы они видели друг друга.
И выполнить команду еще раз,чтобы IPA сервер узнал о нем:

# ipa trust-fetch-domains domc.testc
--------------------------------------------
List of trust domains successfully refreshed
--------------------------------------------
  Realm name: dome.teste
  Domain NetBIOS name: DOME
  Domain Security Identifier: S-1-5-21-3615012966-1241218098-4147673574
------------------------------
Количество вернутых значений 1
------------------------------

Найти все доверенные домены можно и с помощью web-интерфейса. Для Перейдем в IPA Server -> Trusts и выберем нужный нам домен:
IPATrusts.png
Нажмём кнопку Fetch domains это обновит список доверенных доменов:
IPATrustFetch.png

Для того чтобы увидеть список всех доверенных доменов из леса используйте следующую команду:

# ipa trustdomain-find domc.testc
  Domain name: domc.testc
  Domain NetBIOS name: DOMC
  Domain Security Identifier: S-1-5-21-3611360735-1365415015-3217858865
  Domain enabled: True

  Domain name: domd.domc.testc
  Domain NetBIOS name: DOMD
  Domain Security Identifier: S-1-5-21-2419724241-1549151283-3268040000
  Domain enabled: True

  Domain name: dome.teste
  Domain NetBIOS name: DOME
  Domain Security Identifier: S-1-5-21-3615012966-1241218098-4147673574
  Domain enabled: True
------------------------------
Количество вернутых значений 3
------------------------------

Проверка конфигурации Kerberos

1. Запросим ticket для IPA пользователя:

# kinit admin

2. Запросим service ticket для сервиса из IPA домена:

# kvno -S host dcf.domf.testf
host/dcf.domf.testf@DOMF.TESTF: kvno = 2

3. Запросим service ticket сервиса из AD домена:

# kvno -S cifs dcc.domc.testc
cifs/dcc.domc.testc@: kvno = 3

Если запрос service ticket для сервиса из AD домена прошел успешно, то у нас должен появиться междоменный ticket-granting ticket, его имя krbtgt/DOMC.TESTC@DOMF.TESTF:

# klist
Ticket cache: KEYRING:persistent:0:0
Default principal: admin@DOMF.TESTF

Valid starting       Expires              Service principal
14.02.2017 15:43:46  15.02.2017 01:43:46  cifs/dcc.domc.testc@DOMC.TESTC
14.02.2017 15:43:46  15.02.2017 01:43:46  cifs/dcc.domc.testc@
14.02.2017 15:43:46  15.02.2017 15:42:48  krbtgt/DOMC.TESTC@DOMF.TESTF
14.02.2017 15:43:25  15.02.2017 15:42:48  host/dcf.domf.testf@DOMF.TESTF
14.02.2017 15:42:53  15.02.2017 15:42:48  krbtgt/DOMF.TESTF@DOMF.TESTF

Проверка пользователей доверенного домена

Проверим имеет ли доступ к пользователям из доверенного домена рабочие станции IPA.
Для этого на рабочей станции IPA выполните команду:

# getent passwd u01domc@domc
u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:

Где u01domc это пользователь из AD домена. Обратите внимание, что не указана оболочка входа. Назначить оболочку входа для пользователей из доверенного домена можно добавив на сервере IPA в файл /etc/sssd/sssd.conf следующую строчку:

[domain/domf.testf]
...
default_shell = /bin/bash
...

Вывод команды должен стать таким:

# getent passwd u01domc@domc
u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:/bin/bash
Внимание! Для корректной работы сервера IPA с пользователями доверенного домена AD необходимо обеспечить доступ сервиса sssd к /etc/krb5.keytab см. bug 33115
Внимание! Для входа AD пользователя в ALT рабочую станцию из IPA вводим имя пользователя в формате DOMC\username или DOMC.TESTC\username или username@domc username@domc.testc
Внимание! Для входа IPA пользователя в windows рабочую станцию из AD вводим имя пользователя в формате DOMF.TESTF\username

Создание аккаунта для доступа к LDAP