Назад | Перейти на главную страницу

Не удается заставить postgres и kerberos (gss) работать вместе

Я пытаюсь заставить 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 не будет работать.