无法让 postgres 和 kerberos (gss) 协同工作

无法让 postgres 和 kerberos (gss) 协同工作

我正在尝试通过 GSSAPI 让 postgres 和 kerberos 协同工作。目前遇到了麻烦。我对这两种技术都是新手,这无济于事。我让 postgres 和 kerberos 分别按预期工作,并且同时使用它们(但不能一起使用)。

我在这里找到了说明: postressql-和-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)...我看到的只是“严重:用户“fred”的 GSSAPI 身份验证失败”。

好吧,“fred”是我的 linux 登录名……“freddyboy”是我的用户主体。因此,postgresql 客户端似乎没有按要求发送 kerberos 身份验证。我尝试向用户发送:

 psql -l -h postgresserver.hotdog.com -U freddyboy

日志文件现在显示“用户“freddyboy”的 GSSAPI 身份验证失败”,但显然它仍然失败。我有一个拥有一些数据库的 postgres 用户“freddyboy”。我可以在本地正常登录,无需 GSSAPI,但似乎无法安全地进行远程登录。

我怀疑我的客户端上没有任何地方指定我想要使用 GSSAPI。由于这只是一个客户端,因此不存在配置文件……所以我猜这可能是一个问题。

还有一点,kerberos 服务器是 ActiveDirectory。我看到一些迹象表明主体应该是大写的。我尝试将服务主体设为 ("POSTGRES"),将我的用户主体设为 "FREDDYBOY",但仍然没有成功。

非常感谢您的帮助。我在客户端和服务器上使用 Postgres 8.4.13。

弗雷德

答案1

krb5.keytab该错误表明您没有为 Postgres 服务器创建服务主体。这是存储在服务器本身的文件中主体。

可以在 PostgreSQL 文档中找到如何执行此操作,20.3.3. GSSAPI 身份验证方法。

如果您已正确创建此主体,则可能发生的情况是您的 DNS 逆转无法正常工作。如果您host在 Postgres 服务器的 IP 地址上运行,则应该返回postgresserver.hotdog.com。否则,Kerberos 身份验证将不起作用。

相关内容