postgresql - pg_hba

Очень часто приходишь на сервер и не понятно с чего вообще начать. Пароли не работают. Настройки вообще не понятны.

Начнём с файла pg_hba.conf, который находится в папочке /etc/postgresql/12/main/pg_hba.conf, где 12 - Ваша версия pgsql.

Это файл по умолчанию содержит конфигурацию касательно аутентификации. HBA - абревиатура для host-based authenticateion.

По умолчанию файл создаётся, когда инициализируется директория баз данных инициализируется через команду initdb. Возможно у вас она уже запустилась автоматически.

Файл - это это набор записей - 1 запись на строку. Одна строка состоит из нескольких полей, которые разделены пробелом или табом. Если в значении поля есть пробелы, то значение нужно обернуть в кавычки. 

Каждая запись имеет в себе

  • Тип соединения
  • IP адрес или диапазон адресов, если они нужны для данного типа соединения
  • Имя пользователя
  • Метод аутентификации

Запись может быть в одном из следующих форматов:

local      database  user  auth-method  [auth-options]
host       database  user  address  auth-method  [auth-options]
hostssl    database  user  address  auth-method  [auth-options]
hostnossl  database  user  address  auth-method  [auth-options]
host       database  user  IP-address  IP-mask  auth-method  [auth-options]
hostssl    database  user  IP-address  IP-mask  auth-method  [auth-options]
hostnossl  database  user  IP-address  IP-mask  auth-method  [auth-options]

Тип соединения 

  • local - это соединение, которое работает через unix-domain socket. То есть не через интернет, а именно через сокет в системе линукс. Если этой записи нет, то соединение через сокет работать не будет
  • host - соединение, которое будет использовать для соединения через tcp/ip протокол с ssl шифрованием (и только с ним, поэтому сервер должен быть собран с поддержкой SSL)
  • hostnossl - Аналогично предыдущему, только без ssl

database

Указывает на то, какая база данных будет использована. МОжет быть ключевым словом all - все базы данных. sameuser - будет указывать на то, что используется база данных с таким же именем как и пользователь. samerole указывает на то, что будет использована база данных с именем таким же, как роль пользователя. Ещё есть replication, нужен для соединений для реализации репликаций. Такие записи не указывают на конкретные базы данных. В любом другом случае эта строка будет названием базы данных.

user

Строка, которая содержит имя пользователя базы данных. all - все пользователи. Ещё это может быть группа, если перед строкой поставить +. Множества пользователей разделяются запятой. Можно также указать файл, который содержит имена пользователей, если сделать префикс - @.

address

Указывает адрес клиента. Адрес может бсодержать название хоста, IP адрес или диапазон адресов, или одно из ключевых слов. all - все IP адреса. samenet - все адреса подсети, в которой находится сервер.

0.0.0.0/0 - все адреса ipv4

 172.20.143.0/24 - подсеть по маске

Это поле применимо для типа соединения host, hostssl, hostnossl

 

IP-address, IP-mask - это альтернатива указанию IP адреса и маски отдельно

auth-method - метод аутентификации. 

trust - разрешает содениение безоговорочно

reject - также безоговорочно запрещает соединение

md5 - требует, чтобы пользователь указал пароль, зашифрованный через md5 алгоритм.

password - требует от пользователя незашифрованный пароль

 

ident - берёт имя пользователя операционной системы клиента из ident сервера. Проверяет на соответствие имени в базе данных.

peer - берёт имя пользователя операционной системы клиента и проверяет на соответствие имени в базе данных

ldap - проводит аутентификацию через ldap сервер

Также есть  и другие методы аутентификации, который я здесь не указал.