Я пытаюсь заставить postgres и kerberos через GSSAPI работать вместе. На этом этапе возникли проблемы. Не помогает то, что я действительно новичок в обеих технологиях. У меня есть и postgres, и kerberos, работающие, как ожидалось, по отдельности, и я использую их оба (но не вместе).
Я нашел здесь инструкции: postressql-and-kerberos, и на самом деле не нашли ничего, что объясняло бы это более подробно.
Я установил эти две строки в своем файле postgresql.conf:
krb_server_keyfile = '/var/lib/pgsql/data/krb5.keytab'
krb_srvname = 'postgres'
Я убедился, что это правильно, запустив kinit -kt с этой информацией. Я добавил эти две записи в свой файл pg_hba.conf:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 10.0.1.0/24 gss include_realm=0 krb_realm=HOTDOG.REALM.COM
Я перезапускаю сервер и пытаюсь подключиться через удаленного клиента ...
kinit freddyboy
<enter password>
Это успешно, и я могу увидеть детали, если сделаю «klist».
Затем я пытаюсь подключиться к postgres через:
psql -l -h postgresserver.hotdog.com
Я получаю сообщение об ошибке:
pgql: GSSAPI continuation error: Unspecified GSS failure. Minor code may provide more information
GSSAPI continuation error: Server not found in Kerberos database
Если я посмотрю на файл журнала сервера (postgresql-Tue.log) ... все, что я вижу, это «FATAL: аутентификация GSSAPI не удалась для пользователя« fred ».
Ну, "fred" - это мой логин в Linux ... "freddyboy" - мой главный пользователь. Таким образом, похоже, что клиент postgresql не отправляет аутентификацию Kerberos должным образом. Я попытался отправить пользователю:
psql -l -h postgresserver.hotdog.com -U freddyboy
В файле журнала теперь говорится: «Аутентификация GSSAPI не удалась для пользователя freddyboy, но она, очевидно, все еще не работает. У меня есть пользователь postgres из freddyboy, которому принадлежат некоторые базы данных. Я могу войти в систему локально нормально, без GSSAPI, но не могу показаться получить удаленно и безопасно.
Я подозреваю, что нигде на моем клиенте я не указал, что хочу использовать GSSAPI. Поскольку это всего лишь клиент, файлы conf отсутствуют ... так что, я думаю, это может быть проблемой.
Еще один момент, сервер Kerberos - это ActiveDirectory. Я видел некоторые признаки того, что принципал должен быть ЗАГЛАВНЫМ. Я попытался сделать принципала службы («POSTGRES») и принципала пользователя «FREDDYBOY», но все равно не любил.
Любая помощь очень ценится. Я использую Postgres 8.4.13 на клиенте и сервере.
Фред
Ошибка предполагает, что вы не создали субъект-службу для сервера Postgres. Это принцип, который хранится в них. krb5.keytab
файл на самом сервере.
Как это сделать, можно найти в документации PostgreSQL, 20.3.3. GSSAPI аутентификация метод.
Если вы создали этот принципал правильно, то, скорее всего, могло произойти то, что реверсирование DNS не работает правильно. Если ты бежишь host
на IP-адресе сервера Postgres вы должны получить postgresserver.hotdog.com
назад. Если вы этого не сделаете, проверка подлинности Kerberos не будет работать.