Аутентификация Kerberos
Kerberos — это протокол для запросов службы аутентификации между доверенными хостами в ненадежной сети. Kerberos управляет учетными данными (аутентификация), а LDAP хранит достоверную информацию об учетных записях пользователей и их правах доступа (авторизация).
В этой статье описано создание защищенного соединения между следующими хостами с операционной системой CentOS:
-
10.92.6.36, adpg-host, adpg-host.domain.local;
-
10.92.6.201, freeipa-host, freeipa-host.domain.local.
ADPG установлен на хост adpg-host.
Установка сервера FreeIPA
Чтобы развернуть сервер FreeIPA на хосте freeipa-host, будем использовать Docker CE. Выполните шаги описанные ниже для установки:
-
Добавьте имена хостов и их IP-адреса в файл hosts:
$ sudo tee -a /etc/hosts > /dev/null <<EOT 10.92.6.36 adpg-host.domain.local adpg-host 10.92.6.201 freeipa-host.domain.local freeipa-host EOT
-
Используйте утилиту hostnamectl, чтобы задать имя хоста:
$ sudo hostnamectl set-hostname freeipa-host.domain.local
-
Выполните следующие команды, чтобы отключить SELinux:
$ sudo setenforce 0 $ sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config $ sudo reboot
-
Установите Docker CE:
$ sudo -i $ yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine $ yum install -y yum-utils $ yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo $ yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin $ systemctl start docker $ systemctl enable docker
-
Создайте каталог ipa-data для файлов конфигурации FreeIPA, укажите параметры установки FreeIPA и запишите их в файл ipa-server-install-options:
$ mkdir /var/lib/ipa-data $ tee -a /var/lib/ipa-data/ipa-server-install-options > /dev/null <<EOT --realm=DOMAIN.LOCAL --ds-password=freeipaDSpass --admin-password=freeipaADMINpass EOT
-
Установите сервер FreeIPA:
$ docker run -ti -h freeipa-host.domain.local --read-only \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ --name freeipa \ --network host \ -v /var/lib/ipa-data:/data:Z -v /etc/hosts:/etc/hosts \ -e PASSWORD=Password123 \ freeipa/freeipa-server:centos-7 ipa-server-install -U -r DOMAIN.LOCAL --no-ntp
Установка клиента FreeIPA
Установим клиент FreeIPA на хост adpg-host.
-
Добавьте имена хостов и их IP-адреса в файл hosts:
$ sudo tee -a /etc/hosts > /dev/null <<EOT 10.92.6.36 adpg-host.domain.local adpg-host 10.92.6.201 freeipa-host.domain.local freeipa-host EOT
-
Используйте утилиту
hostnamectl
, чтобы задать имя хоста:$ sudo hostnamectl set-hostname adpg-host.domain.local
-
Выполните следующие команды, чтобы отключить SELinux:
$ sudo setenforce 0 $ sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config $ sudo reboot
-
Установите клиент FreeIPA:
$ sudo -i $ yum install freeipa-client
-
Используйте команду ipa-client-install, чтобы сконфигурировать adpg-host для использования IPA:
$ ipa-client-install --mkhomedir --domain=domain.local --server=adpg-host.domain.local
Терминал отобразит следующее уведомление:
Autodiscovery of servers for failover cannot work with this configuration. If you proceed with the installation, services will be configured to always access the discovered server for all operations and will not fail over to other servers in case of failure. Proceed with fixed values and no DNS discovery? [no]:
Наберите
yes
для продолжения с фиксированными значениями. Фиксированные значения будут выведены на дисплей:Client hostname: adpg-host.domain.local Realm: DOMAIN.LOCAL DNS Domain: domain.local IPA Server: freeipa-host.domain.local BaseDN: dc=domain,dc=local Continue to configure the system with these values? [no]:
Наберите
yes
для подтверждения.Укажите
admin
в качестве авторизованного пользователя:User authorized to enroll computers: admin
Введите пароль, который был передан в качестве параметра
PASSWORD
командыdocker run
(в нашем примере —Password123
). -
Используйте команду
kinit
, чтобы получить новый мандат (ticket) Kerberos. Выполните команду klist, чтобы проверить, создан ли мандат:$ kinit admin $ klist
-
Добавьте пользователя и установите для него пароль:
$ ipa user-add pguser --first=pguser --last=PG --password
Результат:
------------------- Added user "pguser" ------------------- User login: pguser First name: pguser Last name: PG Full name: pguser PG Display name: pguser PG Initials: pP Home directory: /home/pguser GECOS: pguser PG Login shell: /bin/sh Principal name: pguser@DOMAIN.LOCAL Principal alias: pguser@DOMAIN.LOCAL User password expiration: 20220804150601Z Email address: pguser@domain.local UID: 1391600001 GID: 1391600001 Password: True Member of groups: ipausers Kerberos keys available: True
-
Службам требуется SPN (Service Principal Name) для использования аутентификации Kerberos. Зарегистрируйте службу postgres для получения SPN:
$ ipa service-add postgres/adpg-host.domain.local@DOMAIN.LOCAL --force
Результат:
--------------------------------------------------------------- Added service "postgres/adpg-host.domain.local@DOMAIN.LOCAL" --------------------------------------------------------------- Principal name: postgres/adpg-host.domain.local@DOMAIN.LOCAL Principal alias: postgres/adpg-host.domain.local@DOMAIN.LOCAL Managed by: adpg-host.domain.local
Настройка ADPG для использования Kerberos
Создайте keytab-файл на хосте adpg-host :
$ ipa-getkeytab --principal=postgres/adpg-host.domain.local@DOMAIN.LOCAL --keytab=/etc/krb5.keytab
Выполните команду chown, чтобы изменить владельца и группу файла krb5.keytab:
$ chown postgres:postgres /etc/krb5.keytab
Используйте ADCM чтобы изменить конфигурационные параметры ADPG. Откройте вкладку Clusters → ADPG cluster → Services → ADPG → Primary configuration, раскройте ноду ADPG configurations и установите в поле postgresql.conf значение listen_addresses
равным *
.
Также добавьте в поле postgresql.conf новый параметр krb_server_keyfile
.
$ krb_server_keyfile = '/etc/krb5.keytab'
Добавьте следующую строку в поле PG_HBA:
host all pguser 0.0.0.0/0 gss include_realm=0 krb_realm=DOMAIN.LOCAL
Кликните кнопку Save и выполните действие Reconfigure & Restart, чтобы применить изменения.
Создайте пользователя на хосте adpg-host:
$ sudo su - postgres
$ psql -c "CREATE USER pguser"
Проверьте соединение c использованием GSSAPI:
$ kinit pguser
$ psql -h adpg-host.domain.local -U pguser postgres
Результат:
psql (14.3) GSSAPI-encrypted connection Type "help" for help. postgres=#
Установка пакета openldap-clients
Пакет openldap-clients содержит инструменты командной строки для просмотра и изменения каталогов на сервере LDAP. Установите пакет openldap-clients на хост adpg-host:
$ yum install openldap-clients -y
Выполните команду klist
, чтобы проверить, получил ли текущий системный пользователь мандат Kerberos с правами администратора IPA. Если нет, выполните команду kinit admin
:
$ klist
$ kinit admin
Добавьте пользователя:
$ ipa user-add pgldap --first=pgldap --last=PG --password
Проверьте соединение:
$ ldapsearch -x -h freeipa-host.domain.local -b dc=domain,dc=local uid=pgldap
Настройка ADPG для использования LDAP
Создайте пользователя pgldap
:
$ sudo su - postgres
$ psql -c "CREATE USER pgldap"
Добавьте следующую строку в поле PG_HBA:
host all pgldap 0.0.0.0/0 ldap ldapserver=freeipa-host.domain.local ldapbasedn="cn=users,cn=compat,dc=domain,dc=local" ldapsearchattribute=uid
Кликните Save и выполните действие Reconfigure & Restart, чтобы применить изменения.
Проверьте соединение:
$ kinit pgldap
$ psql -h adpg-host.domain.local -U pgldap postgres
Результат:
psql (14.3) GSSAPI-encrypted connection Type "help" for help. postgres=#