|
|
(не показаны 4 промежуточные версии этого же участника) |
Строка 18: |
Строка 18: |
| # ipa-server-install -U --uninstall | | # ipa-server-install -U --uninstall |
| и повторите снова.}} | | и повторите снова.}} |
|
| |
| == Установка сервера FreeIPA в режиме CA-less ==
| |
| CA-Less конфигурация требуется в тех случаях, когда у вас по какой-то причине нет возможности развернуть на FreeIPA сервис PKI dogtag. Например, это на данный момент невозможно сделать в некоторых сертифицированных конфигурациях. Если у вас не сертифицированный дистрибутив ALT, то пропустите пункт по настройке CA-Less репликации.
| |
|
| |
| Установим необходимые пакеты:
| |
| <pre># apt-get install freeipa-server freeipa-server-dns</pre>
| |
| Зададим имя сервера:
| |
| <pre># hostnamectl set-hostname ipa.example.test</pre>
| |
| Подготовим сертификаты для сервера FreeIPA:
| |
| <pre># mkdir ~/test_ca</pre>
| |
| Создадим файл pwdfiles.txt с паролем, например 12345678:
| |
| <pre># echo 12345678 > ~/test_ca/pwdfile.txt</pre>
| |
| Создадим базу данных NSS:
| |
| <pre>/usr/bin/certutil -d ~/test_ca -N -f ~/test_ca/pwdfile.txt</pre>
| |
| Создадим noise файл с рандомом:
| |
| <pre># head -c20 /dev/random > ~/test_ca/noise.txt</pre>
| |
| Экспортируем переменную:
| |
| <pre># export CERT_SERIAL=1</pre>
| |
| Создаем CA сертификат:
| |
| <pre># /usr/bin/certutil -d ~/test_ca -S -n "CA" -s "CN=Certificate Authority" -x -t CT,,C -1 -2 -5 -m $CERT_SERIAL -v 120 -z ~/test_ca/noise.txt -f ~/test_ca/pwdfile.txt</pre>
| |
| Дайте следующие ответы:
| |
| <pre> Create key usage extension:
| |
| 0 - Digital Signature
| |
| 1 - Non-repudiation
| |
| 5 - Cert signing key
| |
| 9 - done
| |
| Is this a critical extension [y/N]? y
| |
| Create basic constraint extension
| |
| Is this a CA certificate [y/N]? y
| |
| Enter the path length constraint, enter to skip [<0 for unlimited path]
| |
| 0
| |
| Is this a critical extension [y/N]? y
| |
| Extensions:
| |
| 5 - SSL
| |
| 6 - S/MIME
| |
| 7 - Object Signing CA
| |
| 9 - done
| |
| Is this a critical extension [y/N]? n </pre>
| |
| Создадим запрос сертификата:
| |
| <pre># head -c20 /dev/random > ~/test_ca/noise.txt
| |
| # /usr/bin/certutil -d ~/test_ca -R -s CN=$HOSTNAME,O=IPA -o /tmp/servercert.req -k rsa -g 2048 -z ~/test_ca/noise.txt -f ~/test_ca/pwdfile.txt -a</pre>
| |
| Подпишите запрос о выдаче сертификата сервера:
| |
| <pre># export CERT_SERIAL=$(($CERT_SERIAL + 1))
| |
| # /usr/bin/certutil -d ~/test_ca -C -c "CA" -i /tmp/servercert.req -o /tmp/servercert.pem -m $CERT_SERIAL -v 120 -f ~/test_ca/pwdfile.txt -1 -5 -a</pre>
| |
| Дайте следующие ответы:
| |
| <pre> Create key usage extension:
| |
| 2 - Key encipherment
| |
| 9 - done
| |
| n - not critical
| |
| Create netscape cert type extension:
| |
| 1 - SSL Server
| |
| 9 - done
| |
| n - not critical</pre>
| |
| Если вы хотите, вы можете создавать отдельные сертификаты для серверов HTTP и Directory.
| |
|
| |
| '''Экспорт сертификатов в правильные форматы.'''
| |
| Импортируем полученный сертификат:
| |
| <pre># /usr/bin/certutil -d ~/test_ca -A -i /tmp/servercert.pem -n Server-Cert -a -t ,,</pre>
| |
| Экспортируем в PKCS#12:
| |
| <pre># /usr/bin/pk12util -o ~/test_ca/servercert.p12 -n Server-Cert -d ~/test_ca -k ~/test_ca/pwdfile.txt -w ~/test_ca/pwdfile.txt</pre>
| |
| Экспортируйте сертификат CA в формате PEM:
| |
| <pre># /usr/bin/certutil -d ~/test_ca -L -n "CA" -a > ~/test_ca/cacert.pem</pre>
| |
| Теперь установим CA-less IPA:
| |
| <pre># export PWD=$(cat ~/test_ca/pwdfile.txt)
| |
| # ipa-server-install --http_pkcs ~/test_ca/servercert.p12 --dirsrv_pkcs ~/test_ca/servercert.p12 --http_pin $PWD --dirsrv_pin $PWD --root-ca-file ~/test_ca/cacert.pem</pre>
| |
|
| |
| '''Вы также можете указать при установке опции --pkinit-cert-file=Файл, содержащий сертификат SSL Kerberos KDC и закрытый ключ и --pkinit-pin=Пароль от закрытого ключа Kerberos KDC.'''
| |
|
| |
| После установки выполните:
| |
| <pre>kinit admin</pre>
| |
| И после убедитесь что команды:
| |
| <pre>ipa cert-find
| |
| ipa cert-show 1</pre>
| |
| Не срабатывают и выводят ошибки.
| |
|
| |
| == Настройка IPA CA-less репликации ==
| |
| {{Attention|Перед настройкой репликации необходимо выполнить установку клиента}}
| |
| CA-Less конфигурация требуется в тех случаях, когда у вас по какой-то причине нет возможности развернуть на FreeIPA сервис PKI dogtag. Например, это на данный момент невозможно сделать в некоторых сертифицированных конфигурациях.
| |
| Если у вас не сертифицированный дистрибутив ALT, то пропустите пункт по настройке CA-Less репликации.
| |
|
| |
| Чтобы установить реплику, сначала создайте сертификаты для новой машины: создадим запрос сертификата и подпишем запрос о выдаче сертификата сервера и экспортируем сертификаты в правильные форматы, на этот раз задав $HOSTNAME имя хоста будущей реплики. Используйте Replica-Cert вместо Server-Cert и ~/test_ca/replicacert.p12 вместо ~/test_ca/servercert.p12:
| |
| Создадим запрос сертификата для реплики:
| |
| <pre># head -c20 /dev/random > ~/test_ca/noise.txt
| |
| # /usr/bin/certutil -d ~/test_ca -R -s CN=Указать хост будущей реплики,O=IPA -o /tmp/replicacert.req -k rsa -g 2048 -z ~/test_ca/noise.txt -f ~/test_ca/pwdfile.txt -a</pre>
| |
| Подпишите запрос о выдаче сертификата реплики:
| |
| <pre># /usr/bin/certutil -d ~/test_ca -C -c "CA" -i /tmp/replicacert.req -o /tmp/replicacert.pem -m 3 -v 120 -f ~/test_ca/pwdfile.txt -1 -5 -a</pre>
| |
| Дайте следующие ответы:
| |
| <pre> Create key usage extension:
| |
| 2 - Key encipherment
| |
| 9 - done
| |
| n - not critical
| |
| Create netscape cert type extension:
| |
| 1 - SSL Server
| |
| 9 - done
| |
| n - not critical
| |
| </pre>
| |
| Если вы хотите, вы можете создавать отдельные сертификаты для серверов HTTP и Directory.
| |
|
| |
| '''Экспорт сертификатов в правильные форматы.'''
| |
|
| |
| Импортируем полученный сертификат:
| |
| <pre># /usr/bin/certutil -d ~/test_ca -A -i /tmp/replicacert.pem -n Replica-Cert -a -t ,,</pre>
| |
| Экспортируем в PKCS#12:
| |
| <pre># /usr/bin/pk12util -o ~/test_ca/replicacert.p12 -n Replica-Cert -d ~/test_ca -k ~/test_ca/pwdfile.txt -w ~/test_ca/pwdfile.txt</pre>
| |
| '''Для domain-level 1'''
| |
|
| |
| <pre># ipa-replica-install --http-cert-file ~/test_ca/replicacert.p12 --dirsrv-cert-file ~/test_ca/replicacert.p12</pre>
| |
|
| |
|
| == Установка FreeIPA клиента и подключение к серверу == | | == Установка FreeIPA клиента и подключение к серверу == |
| Установим необходимые пакеты:
| | ;[[FreeIPA/Клиент]] |
| <pre># apt-get install freeipa-client libsss_sudo krb5-kinit bind-utils libbind zip</pre>
| | :Установка FreeIPA клиента и подключение к серверу |
| Зададим имя компьютера:
| |
| <pre># hostnamectl set-hostname comp01.example.test</pre>
| |
| Добавим DNS сервер, для этого создадим файл {{path|/etc/net/ifaces/ens19/resolv.conf}} со следующим содержимым:
| |
| <pre>nameserver 192.168.135.1</pre>
| |
| 192.168.135.1 - IP-адрес нашего FreeIPA сервера.<br>
| |
| Укажем службе resolvconf использовать DNS FreeIPA и наш домен для поиска.<br>
| |
| Для этого в файл {{path|/etc/resolvconf.conf}} добавим/отредактируем следующие параметры:
| |
| <pre>interface_order='lo lo[0-9]* lo.* ens19'
| |
| search_domains=example.test</pre>
| |
| Где ens19 -интерфейс на котором доступен FreeIPA сервер, example.test - наш домен.<br>
| |
| Обновим DNS адреса:
| |
| <pre># resolvconf -u</pre>
| |
| После этого в файле {{path|/etc/resolv.conf}} должны появится строки:
| |
| <pre>search example.test
| |
| nameserver 192.168.135.1</pre>
| |
| Запускаем скрипт настройки клиента:
| |
| в пакетном режиме:
| |
| # ipa-client-install -U -p admin -w 12345678
| |
| или интерактивно:
| |
| <pre># ipa-client-install</pre>
| |
| Если все настроено верно скрипт должен выдать такое сообщение:
| |
| <pre>'''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]:</pre>
| |
| Отвечаем {{cmd|yes}} вводим имя пользователя, имеющего право вводить машины в домен, и его пароль.<br>
| |
|
| |
|
| Пример успешного ввода в домен:
| | ;[[FreeIPA/Ansible]] |
| <source lang="text">Discovery was successful!
| | :Установка FreeIPA клиентов с помощью Ansible |
| 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.</source>
| |
|
| |
|
| {{Attention|Если при входе в домен возникает такая ошибка: | | {{Attention|Если при входе в домен возникает такая ошибка: |
Строка 212: |
Строка 30: |
| Failed to update DNS records.</pre> | | Failed to update DNS records.</pre> |
| Проверьте IP-адрес доменного DNS сервера в файле {{path|/etc/resolv.conf}}}} | | Проверьте IP-адрес доменного DNS сервера в файле {{path|/etc/resolv.conf}}}} |
|
| |
| В случае возникновения ошибки, необходимо перед повторной установкой запустить процедуру удаления:
| |
| # ipa-client-install -U --uninstall
| |
|
| |
|
| Для работы sudo-политик для доменных пользователей на клиентской машине необходимо разрешить доступ к sudo: | | Для работы sudo-политик для доменных пользователей на клиентской машине необходимо разрешить доступ к sudo: |
Строка 227: |
Строка 42: |
| # rm -f /var/lib/sss/mc/* | | # rm -f /var/lib/sss/mc/* |
| # systemctl start sssd</pre>}} | | # systemctl start sssd</pre>}} |
|
| |
| == IPA Automount NFS ==
| |
| Установим nfs-server:
| |
| <pre> apt-get install nfs-server </pre>
| |
|
| |
| Включим SECURE_NFS:
| |
| <pre>echo 'SECURE_NFS=yes' >> /etc/sysconfig/nfs</pre>
| |
|
| |
| Добавим сервис в автозапуск:
| |
| <pre>systemctl enable --now nfs-server</pre>
| |
| Добавим список экспорта и применим изменения:
| |
| <pre>
| |
| # mkdir -p /exports/test_share
| |
| # echo '/exports/test_share client1.testbc.testbe(rw,no_subtree_check,sec=krb5p)' >> /etc/exports
| |
| # exportfs -vra
| |
| </pre>
| |
| На IPA сервере:
| |
| <pre># kinit admin</pre>
| |
| Добавить ipa сервис где nfs.testbc.testbe наш nfs сервер:
| |
| <pre># ipa service-add nfs/nfs.testbc.testbe</pre>
| |
| Добавляем в keytab:
| |
| <pre># ipa-getkeytab -s freeipa.testbc.testbe -p nfs/nfs.testbc.testbe -k /etc/krb5.keytab</pre>
| |
| Проверим наличие:
| |
| <pre># klist -k /etc/krb5.keytab
| |
| Keytab name: FILE:/etc/krb5.keytab
| |
| KVNO Principal
| |
| ---- ----------
| |
| 2 host/nfs.testbc.testbe@TESTBC.TESTBE
| |
| 1 nfs/nfs.testbc.testbe@TESTBC.TESTBE</pre>
| |
| Перезапустим nfs сервер:
| |
| <pre># systemctl restart nfs-server</pre>
| |
| Добавим правила автомонтирования:
| |
| <pre>
| |
| # ipa automountmap-add default auto.test
| |
| # ipa automountkey-add default --key "/-" --info auto.test auto.master
| |
| # ipa automountkey-add default --key "/mnt/testshare" --info "-fstype=nfs4,rw,sec=krb5p,hard nfs.testbc.testbe:/exports/test_share" auto.test
| |
| </pre>
| |
| Удалим пустую карту монтирования:
| |
| <pre># ipa automountkey-del --key '/-' --info 'auto.direct' default auto.master</pre>
| |
| Настройка клиента:
| |
| ipa-client-install
| |
| Устанавливаем пакет freeipa-client-automount:
| |
| <pre> # apt-get install freeipa-client-automount </pre>
| |
| Проверим доступность nfs:
| |
| <pre># showmount -e nfs.testbc.testbe</pre>
| |
| Настроим автомонтирование:
| |
| <pre># ipa-client-automount --location default</pre>
| |
| На IPA сервере:
| |
| Создадим пользователя:
| |
| <pre># ipa user-add ipatest --first ipatest --last ipatest</pre>
| |
| Предоставим пользователю права на запись:
| |
| <pre># mkdir /exports/test_share/testdir
| |
| # chown ipatest:ipatest /exports/test_share/testdir</pre>
| |
| Создадим домашнюю папку пользователя на nfs сервере:
| |
| <pre># mkhomedir_helper ipatest
| |
| # echo '/home client1.testbc.testbe(rw,no_subtree_check,sec=krb5p)' >> /etc/exports
| |
| # exportfs -vra
| |
| </pre>
| |
| Добавим правила автомонтирования:
| |
| <pre>ipa automountmap-add default auto.home
| |
| ipa automountkey-add default --key "/home" --info auto.home auto.master
| |
| ipa automountkey-add default --key "*" --info "-fstype=nfs4,rw,sec=krb5p,hard nfs.testbc.testbe:/home/&" auto.home</pre>
| |
| Проверяем на клиенте:
| |
| <pre>$ df -h</pre>
| |
| Для отладки используйте:
| |
|
| |
| NFS/autofs/sssd-autofs:
| |
| <pre>systemctl stop autofs
| |
| automount -fd -vvv</pre>
| |
| krb5:
| |
| <pre>sed -i '/^GSSD_OPTIONS=/{s/"$/ -vvv"/g}' /etc/sysconfig/nfs
| |
| systemctl restart rpc-gssd</pre>
| |
|
| |
|
| == Настройка репликации == | | == Настройка репликации == |
Строка 304: |
Строка 47: |
| ;[[FreeIPA/Настройка_репликации]] | | ;[[FreeIPA/Настройка_репликации]] |
| :Настройка репликации | | :Настройка репликации |
| | |
| | ;[[FreeIPA/Настройка_репликации#С_интегрированным_DNS_и_без_CA]] |
| | :Настройка IPA CA-less репликации |
|
| |
|
| == Настройка доверительных отношений с AD == | | == Настройка доверительных отношений с AD == |
| FreeIPA использует Samba для интеграции в Active Directory. Для работы Samba необходим работающий стек IPv6.<br>
| |
| Начальные данные:
| |
| * 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'''
| |
|
| |
|
| Установим необходимые пакеты:
| | ;[[FreeIPA/Интеграция_с_AD]] |
| <pre># apt-get install freeipa-server-trust-ad python-module-sss-murmur samba-winbind</pre>
| | :Настройка доверительных отношений с AD |
| === Предварительная настройка IPA сервера ===
| |
| '''Настроим IPA''' для работы с доверительными отношениями:
| |
| <pre># ipa-adtrust-install</pre>
| |
| Скрипт спросит необходимо ли конфигурировать {{path|slapi-nis}} плагин для поддержки работы старых клиентов (SSSD < 1.9) с пользователем из доверенного домена:
| |
| <pre>Enable trusted domains support in slapi-nis? [no]:</pre>
| |
| На IPA сервере добавлен хотя бы один пользователь (администратор сервера), поэтому скрипт предложит сгенерировать SID для всех существующих пользователей и груп:
| |
| <pre>Do you want to run the ipa-sidgen task? [no]:</pre>
| |
| Дата и время на серверах должны совпадать.<pre>
| |
| 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</pre>
| |
| Они должны быть открыты и доступны.<br>
| |
| '''Настроим Samba:'''<br>
| |
| <pre># net conf setparm global 'dedicated keytab file' /etc/samba/samba.keytab
| |
| # systemctl restart ipa</pre>
| |
| Проверим проходит ли Samba аутентификацию Kerberos со стороны IPA сервера:
| |
| <pre># 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
| |
| --------- -------</pre>
| |
| '''Настроим DNS''' на обоих серверах, чтобы они знали друг о друге:<br>
| |
| На AD сервере создадим сервер условной пересылки для зоны IPA домена:
| |
| <pre>C:\> dnscmd 127.0.0.1 /ZoneAdd domf.testf /Forwarder 192.168.135.130</pre>
| |
| На IPA сервере так же добавим зону AD домена:
| |
| <pre># ipa dnsforwardzone-add domc.testc --forwarder=192.168.135.150 --forward-policy=only</pre>
| |
|
| |
| === Проверка конфигурации DNS ===
| |
| '''На AD сервере:'''<br>
| |
| Проверим наличие записей для работы сервисов IPA на DNS-сервере AD.<br>
| |
| 1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:
| |
| <pre>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.</pre>
| |
|
| |
| 2. Запись отвечающая за имя Kerberos realm IPA домена:
| |
| <pre>C:\>nslookup.exe
| |
| > set type=TXT
| |
| > _kerberos.domf.testf.
| |
| _kerberos.domf.testf. text =
| |
|
| |
| "DOMF.TESTF"</pre>
| |
|
| |
| 3. После выполнения команды {{path|ipa-adtrust-install}} должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:
| |
| <pre>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.</pre>
| |
| Далее проверим наличие записей для работы сервисов AD на DNS-сервере AD.<br>
| |
| 4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:
| |
| <pre>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.</pre>
| |
|
| |
| '''На IPA сервере:'''<br>
| |
| Проверим наличие записей для работы сервисов IPA на DNS-сервере IPA.<br>
| |
| 1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:
| |
| <pre># 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.</pre>
| |
| 2. Запись отвечающая за имя Kerberos realm IPA домена:
| |
| <pre>dig +short -t TXT _kerberos.domf.testf.
| |
| "DOMF.TESTF"</pre>
| |
| 3. После выполнения команды {{path|ipa-adtrust-install}} должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:
| |
| <pre># 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.</pre>
| |
| Далее проверим наличие записей для работы сервисов AD на DNS-сервере IPA.
| |
| 4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:
| |
| <pre># 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.</pre>
| |
| {{Attention|Если запись {{cmd|_kerberos._udp.dc._msdcs.domc.testc.}} не доступна проверьте {{cmd|_kerberos._tcp.dc._msdcs.domc.testc.}}}}
| |
|
| |
| === Настройка доверия ===
| |
| Добавление двунаправленных доверительных отношений леса (Forest Trust) с AD:<br>
| |
| Имя доменного администратора Windows должно быть на латинице, кириллицу (Администратор) IPA не принимает.<br>
| |
| <pre># 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
| |
| </pre>
| |
| Необходимо ввести пароль Administrator AD.<br>
| |
| Далее необходимо запросить сервер AD о его доверенных доменах:
| |
| <pre># 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
| |
| ------------------------------
| |
| </pre>
| |
| При этом IPA создаст нужные id-диапазоны для доверенных доменов.<br>
| |
| Если мы добавим в лес еще один домен DOME.TESTE, то необходимо настроить DNS на обоих серверах, чтобы они видели друг друга.<br>
| |
| И выполнить команду еще раз,чтобы IPA сервер узнал о нем:
| |
| <pre># 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
| |
| ------------------------------</pre>
| |
| Найти все доверенные домены можно и с помощью web-интерфейса. Для Перейдем в IPA Server -> Trusts и выберем нужный нам домен:<br>
| |
| [[Файл:IPATrusts.png|600px]]<br>
| |
| Нажмём кнопку Fetch domains это обновит список доверенных доменов:<br>
| |
| [[Файл:IPATrustFetch.png|600px]]<br>
| |
|
| |
| Для того чтобы увидеть список всех доверенных доменов из леса используйте следующую команду:
| |
| <pre># 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
| |
| ------------------------------
| |
| </pre>
| |
|
| |
| === Проверка конфигурации Kerberos ===
| |
| 1. Запросим ticket для IPA пользователя:
| |
| <pre># kinit admin</pre>
| |
| 2. Запросим service ticket для сервиса из IPA домена:
| |
| <pre># kvno -S host dcf.domf.testf
| |
| host/dcf.domf.testf@DOMF.TESTF: kvno = 2</pre>
| |
| 3. Запросим service ticket сервиса из AD домена:
| |
| <pre># kvno -S cifs dcc.domc.testc
| |
| cifs/dcc.domc.testc@: kvno = 3</pre>
| |
| Если запрос service ticket для сервиса из AD домена прошел успешно, то у нас должен появиться междоменный ticket-granting ticket, его имя krbtgt/DOMC.TESTC@DOMF.TESTF:
| |
| <pre># 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</pre>
| |
| === Проверка пользователей доверенного домена ===
| |
| Проверим имеет ли доступ к пользователям из доверенного домена рабочие станции IPA.<br>
| |
| Для этого на рабочей станции IPA выполните команду:
| |
| <pre># getent passwd u01domc@domc
| |
| u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:</pre>
| |
| Где u01domc это пользователь из AD домена. Обратите внимание, что не указана оболочка входа. Назначить оболочку входа для пользователей из доверенного домена можно добавив на сервере IPA в файл {{path|/etc/sssd/sssd.conf}} следующую строчку:
| |
| <pre>[domain/domf.testf]
| |
| ...
| |
| default_shell = /bin/bash
| |
| ...</pre>
| |
| Вывод команды должен стать таким:
| |
| <pre># getent passwd u01domc@domc
| |
| u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:/bin/bash</pre>
| |
| {{Attention|Для корректной работы сервера IPA с пользователями доверенного домена AD необходимо обеспечить доступ сервиса sssd к /etc/krb5.keytab см. [https://bugzilla.altlinux.org/33115 bug 33115]}} | | {{Attention|Для корректной работы сервера IPA с пользователями доверенного домена AD необходимо обеспечить доступ сервиса sssd к /etc/krb5.keytab см. [https://bugzilla.altlinux.org/33115 bug 33115]}} |
| {{Attention|Для входа AD пользователя в ALT рабочую станцию из IPA вводим имя пользователя в формате '''DOMC'''\username или '''DOMC.TESTC'''\username или username@'''domc''' username@'''domc.testc'''}} | | {{Attention|Для входа AD пользователя в ALT рабочую станцию из IPA вводим имя пользователя в формате '''DOMC'''\username или '''DOMC.TESTC'''\username или username@'''domc''' username@'''domc.testc'''}} |
| {{Attention|Для входа IPA пользователя в windows рабочую станцию из AD вводим имя пользователя в формате '''DOMF.TESTF'''\username}} | | {{Attention|Для входа IPA пользователя в windows рабочую станцию из AD вводим имя пользователя в формате '''DOMF.TESTF'''\username}} |
| | |
| | == Конфигурация == |
| | ;[[FreeIPA/OTP]] |
| | :Двухфакторная аутентификация |
|
| |
|
| == Создание аккаунта для доступа к LDAP == | | == Создание аккаунта для доступа к LDAP == |
Строка 822: |
Строка 334: |
| </pre> | | </pre> |
| Тоже самое можно сделать в web-интерфейсе. | | Тоже самое можно сделать в web-интерфейсе. |
| | |
| | == IPA Automount NFS == |
| | Установим nfs-server: |
| | <pre> apt-get install nfs-server </pre> |
| | |
| | Включим SECURE_NFS: |
| | <pre>echo 'SECURE_NFS=yes' >> /etc/sysconfig/nfs</pre> |
| | |
| | Добавим сервис в автозапуск: |
| | <pre>systemctl enable --now nfs-server</pre> |
| | Добавим список экспорта и применим изменения: |
| | <pre> |
| | # mkdir -p /exports/test_share |
| | # echo '/exports/test_share client1.testbc.testbe(rw,no_subtree_check,sec=krb5p)' >> /etc/exports |
| | # exportfs -vra |
| | </pre> |
| | На IPA сервере: |
| | <pre># kinit admin</pre> |
| | Добавить ipa сервис где nfs.testbc.testbe наш nfs сервер: |
| | <pre># ipa service-add nfs/nfs.testbc.testbe</pre> |
| | Добавляем в keytab: |
| | <pre># ipa-getkeytab -s freeipa.testbc.testbe -p nfs/nfs.testbc.testbe -k /etc/krb5.keytab</pre> |
| | Проверим наличие: |
| | <pre># klist -k /etc/krb5.keytab |
| | Keytab name: FILE:/etc/krb5.keytab |
| | KVNO Principal |
| | ---- ---------- |
| | 2 host/nfs.testbc.testbe@TESTBC.TESTBE |
| | 1 nfs/nfs.testbc.testbe@TESTBC.TESTBE</pre> |
| | Перезапустим nfs сервер: |
| | <pre># systemctl restart nfs-server</pre> |
| | Добавим правила автомонтирования: |
| | <pre> |
| | # ipa automountmap-add default auto.test |
| | # ipa automountkey-add default --key "/-" --info auto.test auto.master |
| | # ipa automountkey-add default --key "/mnt/testshare" --info "-fstype=nfs4,rw,sec=krb5p,hard nfs.testbc.testbe:/exports/test_share" auto.test |
| | </pre> |
| | Удалим пустую карту монтирования: |
| | <pre># ipa automountkey-del --key '/-' --info 'auto.direct' default auto.master</pre> |
| | Настройка клиента: |
| | ipa-client-install |
| | Устанавливаем пакет freeipa-client-automount: |
| | <pre> # apt-get install freeipa-client-automount </pre> |
| | Проверим доступность nfs: |
| | <pre># showmount -e nfs.testbc.testbe</pre> |
| | Настроим автомонтирование: |
| | <pre># ipa-client-automount --location default</pre> |
| | На IPA сервере: |
| | Создадим пользователя: |
| | <pre># ipa user-add ipatest --first ipatest --last ipatest</pre> |
| | Предоставим пользователю права на запись: |
| | <pre># mkdir /exports/test_share/testdir |
| | # chown ipatest:ipatest /exports/test_share/testdir</pre> |
| | Создадим домашнюю папку пользователя на nfs сервере: |
| | <pre># mkhomedir_helper ipatest |
| | # echo '/home client1.testbc.testbe(rw,no_subtree_check,sec=krb5p)' >> /etc/exports |
| | # exportfs -vra |
| | </pre> |
| | Добавим правила автомонтирования: |
| | <pre>ipa automountmap-add default auto.home |
| | ipa automountkey-add default --key "/home" --info auto.home auto.master |
| | ipa automountkey-add default --key "*" --info "-fstype=nfs4,rw,sec=krb5p,hard nfs.testbc.testbe:/home/&" auto.home</pre> |
| | Проверяем на клиенте: |
| | <pre>$ df -h</pre> |
| | Для отладки используйте: |
| | |
| | NFS/autofs/sssd-autofs: |
| | <pre>systemctl stop autofs |
| | automount -fd -vvv</pre> |
| | krb5: |
| | <pre>sed -i '/^GSSD_OPTIONS=/{s/"$/ -vvv"/g}' /etc/sysconfig/nfs |
| | systemctl restart rpc-gssd</pre> |
|
| |
|
| == Дополнительные материалы == | | == Дополнительные материалы == |
FreeIPA - это комплексное решение по управлению безопасностью Linux-систем, 389 Directory Server, MIT Kerberos, NTP, DNS, Dogtag. Оно состоит из веб-интерфейса и интерфейса командной строки.
FreeIPA является интегрированной системой проверки подлинности и авторизации в сетевой среде Linux, FreeIPA сервер обеспечивает централизованную проверку подлинности, авторизацию и контроль за аккаунтами пользователей сохраняя сведения о пользователе, группах, узлах и других объектах необходимых для обеспечения сетевой безопасности.
Сайт проекта, демонстрация интерфейса.
Установка сервера FreeIPA
- FreeIPA/Установка_сервера_FreeIPA
- Установка сервера FreeIPA
- FreeIPA/Установка_сервера_FreeIPA#Установка_сервера_FreeIPA_в_режиме_CA-less
- Установка сервера FreeIPA в режиме CA-less
Примечание: Если выдаёт
[error] CalledProcessError: Command '/sbin/systemctl restart httpd2.service' returned non-zero exit status 1
Выполните
# systemctl restart httpd2
Отмените установку:
# ipa-server-install -U --uninstall
и повторите снова.
Установка FreeIPA клиента и подключение к серверу
- FreeIPA/Клиент
- Установка FreeIPA клиента и подключение к серверу
- FreeIPA/Ansible
- Установка FreeIPA клиентов с помощью Ansible
Внимание! Если при входе в домен возникает такая ошибка:
Hostname (ipa-client1.test1.alt) does not have A/AAAA record.
Failed to update DNS records.
Проверьте IP-адрес доменного DNS сервера в файле
/etc/resolv.conf
Для работы sudo-политик для доменных пользователей на клиентской машине необходимо разрешить доступ к sudo:
# control sudo public
Вход пользователя
При первом входе пользователя будет запрошен текущий установленный администратором пароль и затем у пользователя запрашивается новый пароль и его подтверждение.
Внимание! Если машина до этого была в других доменах или есть проблемы со входом пользователей рекомендуется очистить кэш sssd:
# systemctl stop sssd
# rm -f /var/lib/sss/db/*
# rm -f /var/lib/sss/mc/*
# systemctl start sssd
Настройка репликации
- FreeIPA/Настройка_репликации
- Настройка репликации
- FreeIPA/Настройка_репликации#С_интегрированным_DNS_и_без_CA
- Настройка IPA CA-less репликации
Настройка доверительных отношений с AD
- FreeIPA/Интеграция_с_AD
- Настройка доверительных отношений с AD
Внимание! Для корректной работы сервера 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
Конфигурация
- FreeIPA/OTP
- Двухфакторная аутентификация
Создание аккаунта для доступа к 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, только права на чтение.
Добавление расширенных полей в ldap
Если необходимо добавить поля в вашу схему ldap, то реализация этого возможна через команду ldapmodify и добавление своих плагинов для отображения этих полей в WebUi.
Обычно файлы модификации схемы являются типом .ldif.
Пример:
Содержание файла addExtField.ldif
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.2 NAME 'favoriteColorName' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Extending FreeIPA' )
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.3 NAME 'redirects' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Extending FreeIPA')
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.4 NAME 'attbool' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 X-ORIGIN 'Extending FreeIPA')
dn: cn=schema
changetype: modify
add: objectclasses
objectclasses: ( 2.25.28639311321113238241701611583088740684.14.2.1 NAME 'customPerson' SUP person STRUCTURAL MAY ( favoriteColorName $ attbool $ redirects ) X-ORIGIN 'Extending FreeIPA' )
Детальное пояснение для блока:
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.2
NAME 'favoriteColorName'
EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
X-ORIGIN 'Extending FreeIPA' )
dn - dn, в котором будет проводиться изменение. Добавление/удаление классов и т.д.
changetype - атрибут, отвечающий за тип изменений, которые будут происходить.(add, delete, modify, modrdn)
add: attributeTypes - добавление атрибута, далее идёт описание атрибута.
2.25.28639311321113238241701611583088740684.14.2.2 - уникальный идентификатор атрибута. Можно написать любой.
NAME 'favoriteColorName' - По другому можно назвать - primary name. Название атрибута.
EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch - эти атрибуты заданы для проверки соответствия содержания атрибута правилам caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 - OID типа данных
Все изменения в схеме производятся от пользователя - Directory manager.
Изменение схемы ldap:
$ ldapmodify -D "cn=Directory Manager" -W -f addExtField.ldif
После изменения схемы, путем добавления нового objectclass, нужно чтобы эти поля еще можно было редактировать в web-интерфейсе. Для этого необходимо сделать палагин. В примере использовано 3 атрибута, для них сделаем 3 отдельных плагина:
1. Создание папки:
mkdir -p /usr/share/ipa/ui/js/plugins/favoriteColorName
2. Создание самого плагина:
mcedit /usr/share/ipa/ui/js/plugins/favoriteColorName/favoriteColorName.js
Тело плагина:
define(['freeipa/phases','freeipa/user'],
function(phases, user_mod) {
// helper function
function get_item(array, attr, value) {
for (var i=0,l=array.length; i<l; i++) {
if (array[i][attr] === value) return array[i];
}
return null;
}
var color_plugin = {};
color_plugin.add_favorite_color = function() {
var facet = get_item(user_mod.entity_spec.facets, '$type', 'details');
var section = get_item(facet.sections, 'name', 'identity');
section.fields.push({
name: 'favoritecolorname',
label: 'Цвет'
});
return true;
};
phases.on('customization', color_plugin.add_favorite_color);
return color_plugin;
});
В схеме бы добавлен атрибут типа boolean, для него можно сделать радиокнопки:
define(['freeipa/phases','freeipa/user'],
function(phases, user_mod) {
// helper function
function get_item(array, attr, value) {
for (var i=0,l=array.length; i<l; i++) {
if (array[i][attr] === value) return array[i];
}
return null;
}
var attrbool_plugin = {};
attrbool_plugin.add_bool = function() {
var facet = get_item(user_mod.entity_spec.facets, '$type', 'details');
var section = get_item(facet.sections, 'name', 'identity');
section.fields.push(
{
$type: 'radio',.
options:[{label:'True',value:'TRUE'},{label:'False',value:'FALSE'}],
label:'Blood type',
name: 'attbool'}
);
return true;
};
phases.on('customization', attrbool_plugin.add_bool);
return attrbool_plugin;
});
После необходимо добавить новое поле в "Default user objectclasses" (находится IPA Server -> Configuration) созданный objectclass (customPerson) и появятся поля в web-интерфейсе. Для того чтобы пользователь мог их редактировать, необходимо изменить привилегии в группе ipausers.
Использование haproxy для высокой доступности FreeIPA
Требуется:
Сервер №1 c freeipa: dc1.testbc.testgl
Сервер №2 с репликой freeipa: dc2.testbc.testgl
Сервер №3 с haproxy: haproxy.testbc.testgl
Настройка:
Инструкция для настройки сервера №1 и №2: FreeIPA
На сервере №3:
Установить
# apt-get install haproxy
Сохранить оригинальный конфигурационный файл:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxyBAK.cfg
Изменить конфигурацию:
cat << EOF > /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user _haproxy
group _haproxy
daemon
stats socket /var/lib/haproxy/stats
# LDAP and LDAP/STARTTLS
frontend ldap_service_front
mode tcp
bind *:389
description LDAP Service
option socket-stats
option tcpka
timeout client 3600s
default_backend ldap_service_back
backend ldap_service_back
server ldap-1 dc1.testbc.testgl:389 check fall 1 rise 3 inter 2s weight 150
server ldap-2 dc2.testbc.testgl:389 check fall 1 rise 3 inter 2s weight 100
mode tcp
balance roundrobin
option tcpka
option ldap-check
timeout server 1800s
timeout connect 1s
frontend ldaps_service_front
mode tcp
bind *:636
description LDAP Service
option socket-stats
option tcpka
timeout client 3600s
default_backend ldap_service_back
backend ldaps_service_back
server ldap-1 dc1.testbc.testgl:636 check fall 1 rise 3 inter 2s weight 150
server ldap-2 dc1.testbc.testgl:636 check fall 1 rise 3 inter 2s weight 150
mode tcp
balance roundrobin
option tcpka
option ssl-hello-chk
timeout server 1800s
EOF
Запустить сервис haproxy:
#systemctl start haproxy
Проверить работу можно с помощью ldapsearch сделав один из серверов недоступным:
ldapsearch -x -h haproxy.testbc.testgl -b dc=testbc,dc=testgl uid=admin
Результат: ldap всегда доступен.
Automember rebuild membership
Пользовательские или хост группы можно легко перестроить на основе новых или обновленных правил automember. Команда automember rebuild только добавляет новые отношения для групп, она не удаляет те, которые не соответствуют правилам automember. Недавно добавленная команда вызовет задачу в rebuild automember, создав запись LDAP в cn = automember rebuild membership, cn = tasks, cn = config. Плагин automember в настоящее время проверяет операции Add(добавления), чтобы увидеть, есть ли запись соответствует одному из определенных правил automember. Существующие записи не проверяются когда они изменяются. Чтобы применить правило для всех записей, надо добавить задачу к плагину automember. Создатель задачи обеспечит фильтр поиска и базу. Все совпадающие записи будут проверяться в соответствии с определенными правилами automember, чтобы увидеть если они должны быть добавлены в какие-либо группы. Это позволяет добавить запуск атрибуты(значения) после того, как запись была первоначально добавлена, а затем вызвать задачу(выполнить) обновления automember. Ipa automember-rebuild может использоваться для восстановления членства для всех объектов определенного типа:
$ ipa automember-rebuild --type=group
$ ipa automember-rebuild --type=hostgroup
Он также может использоваться для восстановления членства для указанных записей:
$ ipa automember-rebuild --hosts=HOSTNAME1 --hosts=HOSTNAME2
$ ipa automember-rebuild --users=LOGIN1 --users=LOGIN2
Добавление новой группы хостов:
$ ipa hostgroup-add --desc="Web Servers" webservers
Добавить новый хост:
$ ipa host-add web1.example.com --force
Добавить automember rule:
$ ipa automember-add --type=hostgroup webservers
$ ipa automember-add-condition --key=fqdn --type=hostgroup --inclusive-regex=^web[1-9]+\.example\.com webservers
Функция automember теперь работает для новых добавленных записей. Если мы добавим новый хост, он будет автоматически помещен в соответствующую группу хостов:
$ ipa host-add web2.example.com --force
$ ipa hostgroup-show webservers
Host-group: webservers
Description: Web Servers
Member hosts: web2.example.com
Однако старая запись хоста для web1.example.com по-прежнему не является членом или хост-группой веб-серверов. Введя новые команды automember-rebuild, мы сделаем это возможным:
$ ipa automember-rebuild --type=hostgroup
or
$ ipa automember-rebuild --hosts=web1.example.com
Хост добавится в новую группу:
$ ipa hostgroup-show webservers
Host-group: webservers
Description: Web Servers
Member hosts: web2.example.com, web1.example.com
Тоже самое можно сделать в web-интерфейсе.
IPA Automount NFS
Установим nfs-server:
apt-get install nfs-server
Включим SECURE_NFS:
echo 'SECURE_NFS=yes' >> /etc/sysconfig/nfs
Добавим сервис в автозапуск:
systemctl enable --now nfs-server
Добавим список экспорта и применим изменения:
# mkdir -p /exports/test_share
# echo '/exports/test_share client1.testbc.testbe(rw,no_subtree_check,sec=krb5p)' >> /etc/exports
# exportfs -vra
На IPA сервере:
# kinit admin
Добавить ipa сервис где nfs.testbc.testbe наш nfs сервер:
# ipa service-add nfs/nfs.testbc.testbe
Добавляем в keytab:
# ipa-getkeytab -s freeipa.testbc.testbe -p nfs/nfs.testbc.testbe -k /etc/krb5.keytab
Проверим наличие:
# klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- ----------
2 host/nfs.testbc.testbe@TESTBC.TESTBE
1 nfs/nfs.testbc.testbe@TESTBC.TESTBE
Перезапустим nfs сервер:
# systemctl restart nfs-server
Добавим правила автомонтирования:
# ipa automountmap-add default auto.test
# ipa automountkey-add default --key "/-" --info auto.test auto.master
# ipa automountkey-add default --key "/mnt/testshare" --info "-fstype=nfs4,rw,sec=krb5p,hard nfs.testbc.testbe:/exports/test_share" auto.test
Удалим пустую карту монтирования:
# ipa automountkey-del --key '/-' --info 'auto.direct' default auto.master
Настройка клиента:
ipa-client-install
Устанавливаем пакет freeipa-client-automount:
# apt-get install freeipa-client-automount
Проверим доступность nfs:
# showmount -e nfs.testbc.testbe
Настроим автомонтирование:
# ipa-client-automount --location default
На IPA сервере:
Создадим пользователя:
# ipa user-add ipatest --first ipatest --last ipatest
Предоставим пользователю права на запись:
# mkdir /exports/test_share/testdir
# chown ipatest:ipatest /exports/test_share/testdir
Создадим домашнюю папку пользователя на nfs сервере:
# mkhomedir_helper ipatest
# echo '/home client1.testbc.testbe(rw,no_subtree_check,sec=krb5p)' >> /etc/exports
# exportfs -vra
Добавим правила автомонтирования:
ipa automountmap-add default auto.home
ipa automountkey-add default --key "/home" --info auto.home auto.master
ipa automountkey-add default --key "*" --info "-fstype=nfs4,rw,sec=krb5p,hard nfs.testbc.testbe:/home/&" auto.home
Проверяем на клиенте:
$ df -h
Для отладки используйте:
NFS/autofs/sssd-autofs:
systemctl stop autofs
automount -fd -vvv
krb5:
sed -i '/^GSSD_OPTIONS=/{s/"$/ -vvv"/g}' /etc/sysconfig/nfs
systemctl restart rpc-gssd
Дополнительные материалы
- Настройка репликации во FreeIPA 4.4 с domain level 1 — Блог Pixonic на Habrahabr
- [Система централизованного управления авторизацией пользователей на FreeIPA в Docker Система централизованного управления авторизацией пользователей на FreeIPA в Docker] — frol, Habrahabr
Корпоративная инфраструктура