Задание 3: Режим сквозной аутентификации
В этом задании мы рассмотрим механизм сквозной аутентификации, выполним настройку СУБД и пулера, проверим работу сквозной аутентификации и познакомимся с особенностями ее использования в кластере с Pangolin Manager.
Описание механизма сквозной аутентификации
Рассмотрим работу механизма сквозной аутентификации.
Подробно механизм сквозной аутентификации описан в документации в подразделе «Описание механизма».
В режиме сквозной аутентификации Pangolin Pooler снимает необходимость двойной аутентификации клиентов. Для этого пулер должен работать в режиме прокси auth_proxy = on, в котором запросы аутентификации будут перенаправляться на специальный порт. Этот порт TCP указывают в конфигурации пулера с помощью настройки auth_port, например, 5544.
Соответственно, СУБД должна иметь соответствующие настройки для обеспечения работы пулера в режиме сквозной аутентификации. При установке кластера с помощью Pangolin Installer такие настройки были добавлены по умолчанию.
Сквозная аутентификация позволяет использовать методы аутентификации, которые не поддерживает оригинальный PgBouncer.
Настройка СУБД
В кластерной конфигурации, управляемой Pangolin Manager, прямое редактирование файлов конфигурации пулера и СУБД не применяется. Вместо этого для настройки сквозной аутентификации применяется централизованный файл конфигурации Pangolin Manager /etc/pangolin-manager/postgres.yml.
В конфигурационном файле Pangolin Manager можно ознакомиться с включенными параметрами настройки Pangolin Pooler в подразделе parameters раздела postgresql:
[student@srv1 ~]$ sudo less /etc/pangolin-manager/postgres.yml
...
authentication_proxy: '1'
authentication_port: '5544'
...
Где:
authentication_proxy: '1'– включение режима сквозной аутентификации в СУБД;authentication_port: '5544'– порт аутентификации.
А полный список параметров и текущие настройки сквозной аутентификации в СУБД можно увидеть, например, через psql:
[student@srv1 ~]$ sudo su - postgres
[postgres@srv1 ~]$ psql
postgres=# \dconfig auth*
List of configuration parameters
Parameter | Value
----------------------------+-------
auth_activity_period | 1min
authentication_max_workers | 16
authentication_port | 5544
authentication_proxy | on
authentication_timeout | 1min
auth_ete_cache_size | 1024
auth_handshake_timeout | 10s
auth_idle_period | 1min
auth_resume_period | 5min
(9 rows)
postgres=# \q
[postgres@srv1 ~]$ exit
После успешного развертывания Pangolin с помощью Pangolin Installer СУБД сконфигурирована на запуск процесса authproc:
[student@srv1 ~]$ ps f -C postgres
PID TTY STAT TIME COMMAND
7597 ? S 0:00 /usr/pangolin-6.7/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=0.0.0.0 --port=5433 --cluster_name=Pobeda --wal_level
7600 ? Ss 0:00 \_ postgres: Pobeda: logger
7601 ? Ss 0:00 \_ postgres: Pobeda: checkpointer
7602 ? Ss 0:00 \_ postgres: Pobeda: background writer
7603 ? Ss 0:00 \_ postgres: Pobeda: startup recovering 0000000B0000000000000021
7604 ? Ss 0:00 \_ postgres: Pobeda: idle sessions terminator
7606 ? Ss 0:00 \_ postgres: Pobeda: integrity check launcher
7607 ? Ss 0:00 \_ postgres: Pobeda: license checker
7608 ? Ss 0:01 \_ postgres: Pobeda: authproc
7609 ? Ss 0:00 \_ postgres: Pobeda: password policy cache
7618 ? Ss 0:00 \_ postgres: Pobeda: patroni postgres 127.0.0.1(46858) idle
7622 ? Ss 0:02 \_ postgres: Pobeda: walreceiver streaming 0/21000070
Легко заметить, что процесс с PID 7608 - authproc.
Он уже настроен для прослушивания порта TCP 5544:
[student@srv1 ~]$ sudo ss -tlnp | grep 5544
LISTEN 0 364 0.0.0.0:5544 0.0.0.0:* users:(("postgres",pid=7608,fd=4))
Таким образом, сервер СУБД готов к приему сквозных запросов на аутентификацию от пулера.
Настройка пулера
Прежде, чем приступать к настройке Pangolin Pooler для сквозной аутентификации, следует убедиться, что раздел [users] пуст. Сквозная аутентификация не работает для тех пользователей, которые указаны в этом разделе конфигурации пулера. Раздел [users] позволяет настроить индивидуальные параметры подключения пользователей к СУБД.
Проверяем отсутствие настроек в разделе [users]:
[student@srv1 ~]$ sudo -u postgres fgrep -A3 '[users]' /etc/pangolin-pooler/pangolin-pooler.ini
Ранее мы выключали сквозную аутентификацию. Изменим это:
[student@srv1 ~]$ sudo -u postgres sed -i.legacy 's/^.*auth_proxy.*$/auth_proxy = on/' /etc/pangolin-pooler/pangolin-pooler.ini
auth_proxy = on
В режиме прокси пулер не способен выполнять соединения через UNIX сокет. При развертывании Pangolin с помощью Pangolin Installer такие соединения уже запрещены.
Настройка подключения для сквозной аутентификации
Проверим настройки подключения Pangolin Pooler к СУБД, сконфигурированные в настоящий момент:
[student@srv1 ~]$ sudo -u postgres fgrep -A1 '[databases]' /etc/pangolin-pooler/pangolin-pooler.ini
[databases]
* = host=<IP-Address> port=5433 auth_port=5544 auth_pool_size=1
Настройка auth_port=5544 уже добавлена.
Содержимое userlist.txt
[student@srv1 ~]$ sudo -u postgres cat /etc/pangolin-pooler/userlist.txt
"pgbouncer" "SCRAM-SHA-256$4096:6dSZcvwPBkjQxyYISRYwtg==$mhVRh0ny/2d9KTIqq3Kef19eRihnktgkVBh16XACzTE=:INzsKgwAIYvJVr5DxZ15FZGNw7uYRUAHPGtstbJVU7E="
"student" "SCRAM-SHA-256$4096:lXm6DL5vWcCEeWelkoBAMw==$3uC9VkUZUpTCsihdOdHyD48MOMG8uXHQZlF42bojBDQ=:957iPwozxOsgCcvRrydT23JJlBlRwwb3qDWweOAGvIc="
По сравнению с предыдущей темой «Задание 2: Работа в обычном режиме» изменения в этом файле не производилось.
Проверка работы сквозной аутентификации
Рестартуем пулер:
[student@srv1 ~]$ sudo systemctl restart pangolin-pooler.service
[student@srv1 ~]$ sudo systemctl status pangolin-pooler.service
● pangolin-pooler.service - Pangolin Pooler connection pooling for PostgreSQL
Loaded: loaded (/usr/lib/systemd/system/pangolin-pooler.service; enabled; preset: disabled)
Active: active (running) since Wed 2026-09-16 13:59:19 UTC; 9s ago
Process: 95267 ExecStartPre=/bin/mkdir -p /var/run/pangolin-pooler (code=exited, status=0/SUCCESS)
Process: 95268 ExecStartPre=/bin/chown -R postgres:postgres /var/run/pangolin-pooler (code=exited, status=0/SUCCESS)
Process: 95269 ExecStart=/opt/pangolin-pooler/bin/pangolin-pooler -d ${POOLERCONF} (code=exited, status=0/SUCCESS)
Process: 95273 ExecStartPost=/bin/sleep 1 (code=exited, status=0/SUCCESS)
Main PID: 95271 (pangolin-pooler)
Tasks: 2 (limit: 22804)
Memory: 3.1M (peak: 3.6M)
CPU: 24ms
CGroup: /system.slice/pangolin-pooler.service
└─95271 /opt/pangolin-pooler/bin/pangolin-pooler -d /etc/pangolin-pooler/pangolin-pooler.ini
Sep 16 13:59:18 srv1 systemd[1]: Starting Pangolin Pooler connection pooling for PostgreSQL...
Sep 16 13:59:18 srv1 pangolin-pooler[95269]: 2026-09-16 13:59:18.704 UTC [95269] ERROR The 'pgbouncer' user cannot be used as he is not admin_users or stat_users.
Sep 16 13:59:19 srv1 systemd[1]: Started Pangolin Pooler connection pooling for PostgreSQL.
Проверим, какие порты TCP открыты:
[student@srv1 ~]$ sudo ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",pid=674,fd=4),("systemd",pid=1,fd=61))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=839,fd=7))
LISTEN 0 128 0.0.0.0:6544 0.0.0.0:* users:(("pangolin-pooler",pid=95271,fd=10))
LISTEN 0 5 0.0.0.0:8008 0.0.0.0:* users:(("pangolin-manage",pid=94019,fd=10))
LISTEN 0 360 0.0.0.0:5433 0.0.0.0:* users:(("postgres",pid=94034,fd=6))
LISTEN 0 360 0.0.0.0:5544 0.0.0.0:* users:(("postgres",pid=94045,fd=4))
LISTEN 0 4096 [::]:111 [::]:* users:(("rpcbind",pid=674,fd=6),("systemd",pid=1,fd=66))
LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=839,fd=8))
LISTEN 0 4096 *:2380 *:* users:(("etcd",pid=71511,fd=8))
LISTEN 0 4096 *:2379 *:* users:(("etcd",pid=71511,fd=9))
LISTEN 0 128 [::]:6544 [::]:* users:(("pangolin-pooler",pid=95271,fd=11))
Порт пулера 6544 открыт, порт аутентификации СУБД 5544 открыт.
Помните, мы не могли подключиться к порту 6544 через пользователя postgres? А что же сейчас, когда сквозная аутентификация включена?
Проверим сквозную аутентификацию для суперпользователя. Он отсутствует в userlist.txt, поэтому аутентификацию в Pangolin Pooler он пройти не может, но пользуется сквозной аутентификацией:
[student@srv1 ~]$ sudo su - postgres
[postgres@srv1 ~]$ psql -p 6544
psql (15.5)
Type "help" for help.
Вход был выполнен через сертификат, так как в «Задании 5: Настройка аутентификации по сертификатам» в настройку config.yml в подраздел # Custom HBA была добавлена строка 'hostssl all postgres 0.0.0.0/0 cert'.
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
95350
(1 row)
postgres=# \! ss -tnp | grep ':..44'
ESTAB 0 0 <IP-Address1>:58748 <IP-Address1>:5544 users:(("pangolin-pooler",pid=95271,fd=13))
ESTAB 0 0 <IP-Address1>:36556 <IP-Address1>:6544 users:(("psql",pid=95349,fd=3))
ESTAB 0 0 <IP-Address1>:6544 <IP-Address1>:36556 users:(("pangolin-pooler",pid=95271,fd=12))
ESTAB 0 0 <IP-Address1>:5544 <IP-Address1>:58748 users:(("postgres",pid=95303,fd=6))
Обратите внимание на наличие соединения TCP на порт аутентификации 5544. Значит сквозная аутентификация работает.
Настройка одиночного сервера СУБД
Порт 5544 в системе, где вручную установлен СУБД Pangolin в одиночной конфигурации, не прослушивается. Для того чтобы СУБД прослушивала порт аутентификации для сквозного режима пулера, необходимо включить в СУБД параметр authentication_proxy:
[student@srv1 ~]$ sudo -u postgres sed -n '/PROXY/,+10p' $PGDATA/postgresql.conf
# AUTHENTICATION PROXY - add to sample when --with-auth-proxy
#------------------------------------------------------------------------------
#authentication_proxy = off
#authentication_max_workers = 16
#authentication_port = 5433
#auth_handshake_timeout = 10s
#auth_activity_period = 1min
#auth_resume_period = 5min
#auth_idle_period = 1min
#------------------------------------------------------------------------------
Добавить настройку для параметра authentication_proxy в файл автоматической конфигурации можно следующим способом:
Этот способ не подойдет для автоматически развернутого СУБД Pangolin, в этом случае используется конфигурация, установленная вручную из RPM файлов.
postgres=# ALTER SYSTEM SET authentication_port = 5544;
ALTER SYSTEM
postgres=# ALTER SYSTEM SET authentication_proxy = on;
ALTER SYSTEM
Включение режима прокси
Наиважнейшая настройка Pangolin Pooler для сквозной аутентификации — параметр auth_proxy:
[student@srv1 ~]$ sudo -u postgres grep -n 'auth_proxy' /etc/pangolin-pooler/pangolin-pooler.ini
160:;;auth_proxy = on
Запрет обращения через UNIX сокет
В режиме прокси пулер не способен выполнять соединения через UNIX сокет, поэтому их необходимо запретить, иначе пулер не стартует:
[student@srv1 ~]$ sudo -u postgres sed -i.legacy 's/^.*unix_socket_dir =.*$/unix_socket_dir =/' /etc/pangolin-pooler/pangolin-pooler.ini
Проверка:
[student@srv1 ~]$ sudo -u postgres diff /etc/pangolin-pooler/pangolin-pooler.ini{.legacy,}
67c67
< ;unix_socket_dir = /tmp
---
> unix_socket_dir =