FreeIPA
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
Обратите внимание на ответы на вопросы, не совпадающие с предложенными:
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
Вход пользователя
При первом входе пользователя будет запрошен текущий установленный администратором пароль и затем у пользователя запрашивается новый пароль и его подтверждение.
# 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.
Настройка доверия
Добавление двунаправленных доверительных отношений леса (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 и выберем нужный нам домен:
Нажмём кнопку Fetch domains это обновит список доверенных доменов:
Для того чтобы увидеть список всех доверенных доменов из леса используйте следующую команду:
# 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
Создание аккаунта для доступа к LDAP
Некоторые сервисы использующие LDAP требуют предварительно настроенной учетной записи. Использование обычной учетной записи пользователя предпочтительней, но не всегда это целесообразно делать. Можно сделать системную учетную запись следующим образом на сервере FreeIPA используя пароль Directory :
# ldapmodify -x -D 'cn=Directory Manager' -W dn: uid=system,cn=sysaccounts,cn=etc,dc=example,dc=test changetype: add objectclass: account objectclass: simplesecurityobject uid: ldapaccount userPassword: secret123 passwordExpirationTime: 20380119031407Z nsIdleTimeout: 0 <blank line> ^D
Замените пароль на более сложный. Параметр passwordExpirationTime: 20380119031407Z означает, что срок действия пароля неограничен Причина использования такой учетной записи, а не создание обычной учетной записи пользователя IPA, и использование этой системы заключается в том, что системная учетная запись существует только для привязки к LDAP. Это не настоящий пользователь POSIX, он не может войти в систему и ему не принадлежат файлы. У этого пользователя нет особых прав и он не может ничего записывать какие-либо данные на сервер LDAP FreeIPA, только права на чтение.