Pg hba conf, где находится этот файл

Обновлено: 21.11.2024

Я хочу получить путь к pg_hba.conf из оболочки. Путь зависит от версии PostgreSQL. Например, для 8.4 и 9.1:

Я пробовал использовать команду pg_config, но она не содержит этой информации.

Это сделано для того, чтобы я мог использовать единую команду для открытия pg_hba.conf и других файлов конфигурации PostgreSQL для редактирования.

@Pramod Их могут лежать десятки. Что делать, если вы хотите знать, какой из них используется Postgres.

@BleedingFingers В зависимости от ваших настроек вы, вероятно, могли бы просто фильтровать по времени доступа. find / -name pg_hba.conf -amin -5 (если сервер перезагружался в течение последних 5 минут; достаточно легко изменить его на -atime, если последний раз он перезапускался более длительное время назад). Или вы можете фильтровать по времени доступа, более новому, чем время изменения, или по одному из других параметров поиска, основанных на времени. (Хотя фильтрация по lsof | grep pg_hba.conf при работающем сервере не работает).

7 ответов 7

pg_config предназначен для информации о компиляции, чтобы помочь расширениям и клиентским программам компилироваться и связываться с PostgreSQL. Он ничего не знает об активных экземплярах PostgreSQL на машине, только двоичные файлы.

pg_hba.conf может появляться во многих других местах в зависимости от того, как был установлен Pg. Стандартное расположение — pg_hba.conf в каталоге data_directory базы данных (который может находиться в /home , /var/lib/pgsql , /var/lib/postgresql/[version]/ , /opt/postgres/ и т. д. и т. д. и т. д.) но пользователи и упаковщики могут поместить его куда угодно. К сожалению.

Единственный допустимый способ найти файл pg_hba.conf – это запросить у работающего экземпляра PostgreSQL, где находится файл pg_hba.conf, или спросить системного администратора, где он находится. Вы даже не можете полагаться на то, чтобы спросить, где находится каталог данных, и проанализировать postgresql.conf, потому что сценарий инициализации может передать такой параметр, как -c hba_file=/some/other/path при запуске Pg.

Вы хотите спросить у PostgreSQL:

Эта команда должна выполняться в сеансе суперпользователя, поэтому для сценариев оболочки вы можете написать что-то вроде:

и установите переменные среды PGUSER , PGDATABASE и т. д., чтобы обеспечить правильное подключение.

Да, это своего рода проблема курицы и яйца, поскольку, если пользователь не может подключиться (скажем, после неудачного редактирования pg_hba.conf ), вы не можете найти pg_hba.conf, чтобы исправить это. .

Еще один вариант — просмотреть вывод команды ps и посмотреть, виден ли там аргумент каталога данных postmaster -D, например,

поскольку pg_hba.conf будет находиться внутри каталога данных (если только вы не используете Debian/Ubuntu или какую-либо производную версию и не используете их пакеты).

Если вы нацелены конкретно на системы Ubuntu с PostgreSQL, установленным из пакетов Debian/Ubuntu, все становится немного проще. Вам не нужно иметь дело с Pg, скомпилированным вручную из исходного кода, для которого чей-то каталог данных initdb 'da находится в их домашнем каталоге, или с Pg EnterpriseDB, установленным в /opt, и т. д. Вы можете спросить pg_wrapper , мульти- версия диспетчера Pg, где PostgreSQL использует команду pg_lsclusters из pg_wrapper .

Где находятся файлы postgresql.conf и pg_hba.conf на сервере Linux с установленным PostgreSQL 8.4 из репозиториев Ubuntu?

Проблема в ч/б стуле и клавиатуре. Это зависит от того, как вы его установили. Вы использовали исходный файл tar-gz или использовали утилиту apt. Если вы скачаете файл в формате tar-gzip и установите его. Файл pg_hba.conf еще не существует, если вы не инициализируете свой каталог данных. В файле INSTALL/Readme есть эта информация. Вы найдете файл pg_hba.conf в том каталоге, который вы выбрали в качестве каталога данных. Во-вторых, если вы использовали утилиту apt, вы должны найти ее в /etc/postgresql/8.4/main, вы также можете выполнить «найти» по имени файла, но выполнение этого на всем диске потребляет ресурсы процессора.

При установке из исходного кода в папку установки по умолчанию выполните следующее: /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data перед запуском postgres, и в этом каталоге будет создан файл hba.

6 ответов 6

Поиск "pg_hba.conf ubuntu" в Google дает вам

который показывает расположение файлов.

В документации указано следующее:

Аутентификация клиента контролируется файлом конфигурации, который традиционно называется pg_hba.conf и хранится в каталоге данных кластера базы данных. (HBA означает аутентификацию на основе хоста.) Файл pg_hba.conf по умолчанию устанавливается при инициализации каталога данных с помощью initdb. Однако файл конфигурации аутентификации можно поместить в другое место; см. параметр конфигурации hba_file.

Обратите внимание, что он хранится в каталоге данных кластера базы данных и что его можно разместить в другом месте с помощью параметра конфигурации.Официальная документация не может указать вам на конкретную папку, потому что фактическое местоположение зависит от того, как производитель ОС и администратор машины настроили PostgreSQL. Помните, что PostgreSQL поддерживает множество различных операционных систем (и дистрибутивов Linux).

Как показывает Neutrino, если вы можете получить доступ к своему серверу через psql, вы можете указать ему показать расположение файла.

сообщить об этом объявлении

Файл pg_hba.conf

Мы упоминали ранее в этом разделе, что файл pg_hba.conf обеспечивает аутентификацию клиента между сервером PostgreSQL и клиентским приложением. Этот файл состоит из набора записей , которые определяют хост и связанные с ним разрешения (например, базу данных, к которой ему разрешено подключаться, используемый метод аутентификации и т. д.).

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

Примечание: PostgreSQL имеет собственные таблицы пользователей и паролей, которые отделены от системных учетных записей. Не обязательно, чтобы ваши пользователи PostgreSQL совпадали с пользователями, доступными для операционной системы.

Когда PostgreSQL получает запрос на подключение, он проверяет файл pg_hba.conf, чтобы убедиться, что компьютер, с которого приложение запрашивает подключение, имеет права на подключение к указанной базе данных. Если машина, запрашивающая доступ, имеет разрешение на подключение, PostgreSQL проверит условия, которым должно соответствовать приложение для успешной аутентификации. Это влияет на соединения, которые инициируются как локально, так и удаленно.

При инициализации соединения PostgreSQL будет читать pg_hba.conf по одной записи за раз, сверху вниз. Как только соответствующая запись будет найдена, PostgreSQL прекратит поиск и разрешит или отклонит соединение в зависимости от найденной записи. Если PostgreSQL не находит совпадающую запись в файле pg_hba.conf, соединение завершается сбоем.

Структура файла pg_hba.conf

Файл pg_hba.conf содержит последовательные записи, определяющие настройки, которые PostgreSQL должен использовать в процессе аутентификации клиента для указанного хоста. Этот файл легко настраивается в соответствии с потребностями вашей системы.

В этом файле вы можете связать адрес хоста TCP/IP (или диапазон адресов) с определенной базой данных (или всеми базами данных) и одним из нескольких доступных методов аутентификации. Вы также можете указать доступ для локальных подключений, используя термин localhost или 127.0.0.1 вместо использования внешнего IP-адреса системы. К файлу pg_hba.conf применяются несколько синтаксических правил.

Что касается фактической формы каждой записи хоста, в pg_hba.conf доступны три основных типа (ключевое слово type всегда первое слово в записи хоста):

Запись host используется для указания удаленных хостов, которым разрешено подключаться к серверу PostgreSQL. Серверная часть PostgreSQL postmaster должна работать с параметром -i (TCP/IP), чтобы запись host работала правильно.

Запись local семантически аналогична записи host. Однако вам не нужно указывать хост, которому разрешено подключение. Локальная запись используется для клиентских подключений, которые инициируются с того же компьютера, на котором работает сервер PostgreSQL.

Запись hostssl — это пользователь, указывающий хосты (удаленные или локальные), которым разрешено подключаться к серверу PostgreSQL с использованием SSL. Использование SSL гарантирует, что вся связь между клиентом и сервером зашифрована. Чтобы это работало, и клиент, и сервер должны поддерживать SSL. Серверная часть postmaster должна быть запущена с параметрами -l (SSL) и -i (TCP/IP).

Примечание. Подробнее о том, как запустить процесс postmaster с соответствующими параметрами времени выполнения, см. в главе 9.

Примечание. Помните, что каждая запись в pg_hba.conf должна состоять из одной строки. Вы не можете использовать перенос слов или разрывы строк.

Следующий список представляет собой описание ключевых слов для упомянутых ранее записей pg_hba.conf:

Это имя базы данных, к которой разрешено подключаться указанному хосту. Ключевое слово база данных имеет три возможных значения:

Ключевое слово all указывает, что подключающийся клиент может подключиться к любой базе данных, размещенной на сервере PostgreSQL.

Ключевое слово sameuser указывает, что клиент может подключаться только к базе данных, которая соответствует имени пользователя, прошедшего проверку подлинности клиента.

Может быть указано конкретное имя , чтобы клиент мог подключаться к базе данных только в соответствии с именем .

Поля ip_addr и netmask указывают либо конкретный IP-адрес, либо диапазон IP-адресов, разрешено подключаться к серверу PostgreSQL. Такой диапазон можно указать, описав IP-сеть с соответствующей сетевой маской. В противном случае для одного IP-адреса в поле сетевая маска должно быть установлено значение 255.255.255.255.

Метод аутентификации указывает тип аутентификации, который сервер должен использовать для пользователя, пытающегося подключиться к PostgreSQL. Ниже приведен список параметров, доступных для auth_method :

Метод trust позволяет любому пользователю с определенного хоста подключаться к базе данных PostgreSQL без использования пароля, как и любой пользователь PostgreSQL. Вы доверяете аутентификацию на основе хоста с использованием этого метода и любого пользователя на указанном хосте. Это опасно, если указанный хост не является защищенной машиной или предоставляет доступ неизвестным вам пользователям.

Метод reject автоматически запрещает доступ к PostgreSQL этому хосту или пользователю. Это может быть разумной настройкой для сайтов, которым, как вы знаете, никогда не разрешается подключаться к вашему серверу базы данных.

Метод password указывает, что для подключающегося пользователя должен существовать пароль. Использование этого метода потребует от подключающегося пользователя ввести пароль, который совпадает с паролем, найденным в глобальной системной таблице pg_shadow для его имени пользователя. Если вы используете метод password, пароль будет отправлен открытым текстом.

Метод crypt аналогичен методу password. При использовании crypt пароль передается не в виде открытого текста, а посредством простого шифрования. Использование этого метода не очень безопасно, но лучше, чем использование открытого текста пароля.

Методы krb4 и krb5 используются для указания версии 4 или 5 системы аутентификации Kerberos. Установка и настройка Kerberos выходит за рамки этой книги, но если вы хотите пройти аутентификацию через Kerberos, эти методы доступны.

Метод ident указывает, что идентификационная карта должна использоваться, когда хост запрашивает соединения с действительного IP-адреса, указанного в pg_hba.conf файл. Для этого метода требуется одна опция.

Необходимой опцией может быть либо специальный термин sameuser, либо именованная карта, определенная в файле pg_ident.conf. Дополнительные сведения об определении карты идентификаторов см. в разделе Файл pg_ident.conf ."

Поле auth_option может быть обязательным или необязательным в зависимости от типа используемого метода аутентификации; начиная с PostgreSQL 7.1.x только метод ident требует опции.

Мы не рекомендуем использовать пароль или crypt без использования внешнего механизма шифрования. См. раздел Шифрование сеансов" в этой главе для получения информации об установке центрального механизма шифрования для всего вашего трафика PostgreSQL.

Примеры записей pg_hba.conf

Помните, как было сказано ранее в этом разделе, каждая строка записи узла считывается последовательно, начиная с начала файла до конца. Используется первая запись, соответствующая хосту, пытающемуся подключиться. Если совпадающая запись не найдена, подключение полностью запрещается.

Файл pg_ident.conf

При указании термина ident в качестве метода аутентификации записи хоста PostgreSQL использует файл pg_ident.conf для сопоставления идентифицирующего имени пользователя с Имя пользователя PostgreSQL. Идентифицирующее имя пользователя — это имя, предоставляемое службой identd подключающегося клиента (RFC 1413), которое требуется для идентификации имени системной учетной записи, инициирующей подключение. Этот метод аналогичен методу trust, но ограничивает доступ на основе идентифицирующего имени пользователя.

Как указано в спецификации протокола ident, «Протокол идентификации не предназначен для использования в качестве протокола авторизации или управления доступом». Это полезный метод идентификации только для безопасных управляемых машин, и он не предназначен для безопасного управления с большого количества внешних машин. Это связано с тем, что демон identd просто возвращает произвольное имя пользователя, описывающее текущего пользователя системы. Например, разрешение использовать имя пользователя jworsley для целой подсети IP-адресов создаст серьезную дыру в безопасности, потому что любой, у кого есть компьютер в этой подсети, может создать пользователя с именем jworsley и в результате пройти "аутентификацию".

Файл pg_ident.conf должен располагаться по тому же пути, что и файл pg_hba.conf.Это должен быть путь, определенный переменной среды PGDATA (например, /usr/local/pgsql/data ). Как и в случае с pg_hba.conf, изменения в файле pg_ident.conf не требуют перезапуска PostgreSQL.

Каждая карта идентификации member определяется в одной строке, которая связывает имя карты с идентифицирующим именем пользователя и переведенным именем пользователя PostgreSQL.

Файл pg_ident.conf может содержать несколько имен карт. Каждая группа отдельных линий с одинаковым ассоциативным именем карты считается одной картой.

Файл pg_hba.conf определяет типы подключений, которые относятся к пользователям в этом файле.

Однострочная запись для определения карты идентификаторов состоит из трех токенов: имени карты, идентификационного имени пользователя и переведенного имени пользователя PostgreSQL. Этот синтаксис вводится следующим образом, где каждый токен разделен пробелами или символами табуляции:

Имя карты, используемое в файле pg_hba.conf для ссылки на карту ident.

Идентифицирующее имя пользователя, которое обычно является именем системного пользователя, пытающегося установить соединение с базой данных. Это имя предоставляется демоном identd, который должен быть запущен в системе, пытающейся подключиться.

Имя пользователя базы данных, разрешенное для предшествующего идентифицирующего имени пользователя. Вы можете указать несколько строк с одним и тем же identname , но с разными значениями postgresqlname , чтобы разрешить одно доступ пользователя системы к нескольким учетным записям, которые не обязательно должны находиться в одной базе данных.

В качестве примера предположим, что сервер Book Town имеет набор системных учетных записей с именами jdrake, jworsley и auditor, используемых для два продавца и внутренний аудитор соответственно.

Если вы хотите использовать ident только как средство автоматической идентификации вашего удаленного имени пользователя, вам не нужно использовать файл pg_ident.conf. Вместо имени карты можно использовать специальный термин sameuser в файле pg_hba.conf.

Опять же, это похоже на метод trusted, однако ident sameuser ограничивает соединения на основе имени пользователя, предоставленного identd . Предоставление имени пользователя PostgreSQL для подключения (например, с флагом -U для psql ), которое отличается от имени, отправленного identd, приведет к при сбое подключения.


сообщить об этом объявлении

Чтобы клиенты могли подключаться к серверу, их IP-адрес должен быть в списке разрешенных пользователей. Два распространенных метода аутентификации, которые, как вы увидите, используются для клиентов Theater Manager, — это MD5 и доверие.

  • MD5 выполняет аутентификацию по паролю md5 и должен использоваться практически для всех записей в этом файле.
  • Trust позволяет клиентам подключаться без аутентификации по паролю; единственная запись «доверие» должна относиться к локальному серверу и/или локальному хосту.

су – постгрес

введите пароль

ВП pg_hba.conf

(полный путь: /Library/Postgresql/[версия]/data/pg_hba.conf)

Вы должны увидеть страницу с информацией. Если вы этого не сделаете, введите «Shift Q», а затем просто «q», после чего вы можете начать процесс заново. Если вы видите список текста, похожий на правый, то:

Используйте стрелку вниз на клавиатуре, чтобы перейти в самый конец файла.

, и сообщение внизу изменится на Вставить.

Отредактируйте pg_hba.conf так, чтобы его окончательные настройки были похожи на окно справа.

Вводите прямо в Терминал, чтобы данные выглядели как в окне выше. Используйте клавишу Delete, чтобы избавиться от символов. Скорее всего, вам придется вводить следующие строки, где первая — ваша подсеть. Это самый типичный пример, который мы видели на площадках

узел всех всех 192.168.1.0/24 md5

ПРИМЕЧАНИЕ. Для параметра 127.0.0.1/32 измените квитирование на TRUST в конце строки, чтобы резервное копирование выполнялось без посторонней помощи.

ПРИМЕЧАНИЕ. Если на вашем компьютере используется IPv6 (новый стандарт настройки IP-адресов в Интернете), вам также может потребоваться установить ::1/128 как TRUST вместо md5. Если это так, отредактируйте эту строку, чтобы она выглядела так:

host all all ::1/128 trust

ПРИМЕЧАНИЕ. Если вы используете Postgres версии 9.0 или выше в среде Mac, локальная строка all all должна иметь значение TRUST.

ПРИМЕЧАНИЕ: вам также может понадобиться отредактировать локальную строку all all с md5 на TRUST.Это можно определить, если сценарий резервного копирования не будет запускаться без пароля после изменения настроек выше для 127.0.0.1 и ::1/128.

Строка, которую вы добавили (или хотите добавить), предназначена для:

  • Локальная подсеть — как в 192.168.9.0/24
  • Другие подсети, которым необходим доступ к данным — как в 10.1.5.0/24
  • Любые отдельные машины, к которым должен быть доступ — например, 55.66.77.88/32 (через VPN)

В конце подсети /24 указывает на полную подсеть, если вы хотите, чтобы любой компьютер в подсети имел доступ к базе данных в соответствии с правилами CIDR. Это то, что используется чаще всего.

/32 относится к конкретной машине. Если вы используете эту опцию, вам нужно будет указать точный IP-адрес компьютера, которому вы хотите разрешить доступ к базе данных.

Читайте также: