使用Kerberos认证

可以用一台Kerberos认证服务器控制对Greenplum数据库的访问。

Greenplum数据库支持带Kerberos认证的通用安全服务应用程序接口(GSSAPI)。GSSAPI为支持它的系统提供了自动认证(单点登录)。在Greenplum数据库的配置文件pg_hba.conf中指定要求使用Kerberos认证的Greenplum数据库用户(角色)。当一个角色尝试登录到Greenplum数据库时,如果Kerberos认证不可用,则登录失败。

Kerberos提供一种安全的、加密的认证服务。它不加密客户端和数据库之间交换的数据并且不提供授权服务。为了加密网络上交换的数据,必须使用SSL连接。要管理对Greenplum数据库及其对象(如方案和表)的访问的授权,需要使用pg_hba.conf文件中的设置和给予数据库中Greenplum数据库用户和角色的特权。有关管理授权的信息请见管理角色和特权

更多有关Kerberos的信息请见http://web.mit.edu/kerberos/.

在Greenplum数据库中使用Kerberos的必要条件

将Kerberos用于Greenplum数据库需要下列事项:

  • 使用krb5-server库的Kerberos密钥分发中心(KDC)
  • Kerberos的版本5的krb5-libs以及安装在Greenplum数据库的Master主机上的krb5-workstation
  • 带有Kerberos支持的Greenplum数据库版本
  • Kerberos服务器和Greenplum数据库的Master主机上的系统时间必须同步(在两种服务器上安装Linux的ntp包)
  • Kerberos服务器和Greenplum数据库的Master之间的网络连接
  • 在Red Hat Enterprise Linux 6.x上使用Kerberos认证的JDBC要求Java 1.7.0_17或者其后的版本

对Greenplum数据库启用Kerberos认证

完成下列任务就可以设置Greenplum数据库的Kerberos认证:

  1. 验证系统满足将Kerberos用于Greenplum数据库的先决条件。见在Greenplum数据库中使用Kerberos的必要条件
  2. 设置或者确定一台用于认证的Kerberos密钥分发中心(KDC)服务器。见安装和配置一台Kerberos KDC服务器
  3. 在KDC服务器上的一个Kerberos数据库中,设置一个Kerberos realm和该服务器上的principal。对于Greenplum数据库,一个principal就是一个使用Kerberos认证的Greenplum数据库角色。在Kerberos数据库中,一个realm把作为Greenplum数据库角色的Kerberos principal组织在一起。
  4. 为Greenplum数据库创建Kerberos keytab文件。要访问Greenplum数据库,创建一个只有Kerberos和Greenplum数据库知道的服务密钥。在Kerberos服务器上,该服务密钥被存储在Kerberos数据库中。在Greenplum数据库的Master上,该服务密钥被存储在密钥表中,就是被称为keytab的文件。服务密钥通常被存储在keytab文件/etc/krb5.keytab中。这个服务密钥等效于该服务的口令,并且必须保持安全。打算对该服务只读的数据被使用这个密钥加密。
  5. 在Greenplum数据库的Master上安装Kerberos客户端包和keytab文件。
  6. 为使用该keytab文件的Greenplum数据库Master节点上的gpadmin创建一个Kerberos ticket。这个ticket含有对Greenplum数据库授予访问的Kerberos认证证书。

使用Greenplum数据库上配置好的Kerberos认证,可以对PSQL和JDBC使用Kerberos。* 为PSQL设置带Kerberos的Greenplum数据库

还可以为运行在一个微软Windows系统上的客户端配置外部认证。* 为一个微软Windows系统上的Greenplum数据库客户端工具gploadpsql配置Kerberos认证。见在Windows上为Greenplum数据库客户端配置Kerberos

上级主题: 配置客户端认证

安装和配置一台Kerberos KDC服务器

在一台Red Hat Enterprise Linux主机上设置一台Kerberos密钥分发中心(KDC)服务器用于Greenplum数据库的步骤。

在一台Red Hat Enterprise Linux主机上按照下面的步骤安装和配置一台Kerberos密钥分发中心(KDC)服务器。

  1. 安装Kerberos服务器包:
sudo yum install krb5-libs krb5-server krb5-workstation
  1. 编辑/etc/krb5.conf配置文件。下面的例子展示了一台带有一个默认KRB.GREENPLUM.COM realm的Kerberos服务器。
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = KRB.GREENPLUM.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 default_tgs_enctypes = aes128-cts des3-hmac-sha1 des-cbc-crc des-cbc-md5
 default_tkt_enctypes = aes128-cts des3-hmac-sha1 des-cbc-crc des-cbc-md5
 permitted_enctypes = aes128-cts des3-hmac-sha1 des-cbc-crc des-cbc-md5

[realms]
 KRB.GREENPLUM.COM = { 
  kdc = kerberos-gpdb:88
  admin_server = kerberos-gpdb:749
  default_domain = kerberos-gpdb
 }

[domain_realm]
 .kerberos-gpdb = KRB.GREENPLUM.COM
 kerberos-gpdb = KRB.GREENPLUM.COM

[appdefaults]
 pam = { 
    debug = false
    ticket_lifetime = 36000
    renew_lifetime = 36000
    forwardable = true
    krb4_convert = false
 }

The keys in the

[realms]小节中的kdcadmin_server键指定运行Kerberos服务器的主机(kerberos-gpdb)和端口。可以用IP来代替主机名。

如果Kerberos服务器还管理者其他realm的认证,需要把KRB.GREENPLUM.COM realm添加在kdc.conf文件中的[realms][domain_realm]小节中。有关kdc.conf文件的信息请见Kerberos文档

  1. 要创建一个Kerberos KDC数据库,运行kdb5_util
kdb5_util create -s

kdb5_util的create选项创建数据库来为这个KDC服务器所管理的Kerberos realm存储密钥。-s选项创建一个存储文件。如果没有这个存储文件,每次KDC服务器启动都会要求口令。

  1. kadmin.local工具向该KDC数据库增加一个管理用户。因为其本身并不依赖于Kerberos认证,kadmin.local工具允许用户对本地的Kerberos服务器增加一个初始的管理用户。要对KDC数据库增加一个作为管理用户的用户gpadmin
kadmin.local -q "addprinc gpadmin/admin"

大部分用户不需要对Kerberos服务器的管理访问。它们可以使用kadmin来管理它们自己的principal(例如,更改它们自己的密码)。有关kadmin的信息请见Kerberos文档

  1. 如果需要,编辑/var/kerberos/krb5kdc/kadm5.acl文件对gpadmin授予适当的权限。
  2. 启动Kerberos守护进程:
/sbin/service krb5kdc start
/sbin/service kadmin start
  1. 在重启时自动启动Kerberos:
/sbin/chkconfig krb5kdc on
/sbin/chkconfig kadmin on

在KDC数据库中创建Greenplum数据库角色

为Greenplum数据库增加principal到Kerberos realm。

在交互模式中启动kadmin.local,然后增加两个principal到Greenplum数据库的Realm。

  1. 在交互模式中启动kadmin.local
kadmin.local
  1. 增加principal:
kadmin.local: addprinc gpadmin/kerberos-gpdb@KRB.EXAMPLE.COM
kadmin.local: addprinc postgres/master.test.com@KRB.EXAMPLE.COM

adprinc名会为每个principal提示要求密码。第一个addprinc创建了一个Greenplum数据库用户作为principal,gpadmin/kerberos-gpdb。第二个addprinc命令在Greenplum数据库的Master主机上创建postgres进程作为该Kerberos KDC中的一个principal。在对Greenplum数据库使用Kerberos认证时,这个principal是必需的。

  1. kadmin.local创建一个Kerberos keytab文件。下面的例子在当前目录中创建一个keytab文件gpdb-kerberos.keytab,其中有两个principal的认证信息。
kadmin.local: xst -k gpdb-kerberos.keytab
    gpadmin/kerberos-gpdb@KRB.EXAMPLE.COM
    postgres/master.test.com@KRB.EXAMPLE.COM

用户将把这个文件复制到Greenplum数据库的Master主机。

  1. quit命令退出kadmin.local交互模式:

kadmin.local: quit

安装和配置Kerberos客户端

在Greenplum数据库的Master主机上安装Kerberos客户端的步骤。

在Greenplum数据库的Master上安装Kerberos客户端并且配置该Kerberos客户端。

  1. 在Greenplum数据库的Master上安装Kerberos包。
sudo yum install krb5-libs krb5-workstation
  1. 确保/etc/krb5.conf文件和Kerberos服务器上的相同。
  2. 把Kerberos服务器上生成的gpdb-kerberos.keytab文件复制到Greenplum数据库的Master主机上。
  3. 用Kerberos的工具kdestroy移除任何已有的ticket。作为root运行该工具。
sudo kdestroy
  1. 使用Kerberos工具kinitgpadmin/kerberos-gpdb@KRB.EXAMPLE.COM请求一个ticket来使用Greenplum数据库的Master上的keytab文件。 -t选项指定Greenplum数据库的Master上的keytab文件。
# kinit -k -t gpdb-kerberos.keytab gpadmin/kerberos-gpdb@KRB.EXAMPLE.COM
  1. 使用Kerberos工具klist来显示Greenplum数据库的Master上Kerberos ticket缓存的内容。下面是一个例子:
# klist
Ticket cache: FILE:/tmp/krb5cc_108061
Default principal: gpadmin/kerberos-gpdb@KRB.EXAMPLE.COM
Valid starting     Expires            Service principal
03/28/13 14:50:26  03/29/13 14:50:26  krbtgt/KRB.GREENPLUM.COM     @KRB.EXAMPLE.COM
    renew until 03/28/13 14:50:26

为PSQL设置带Kerberos的Greenplum数据库

配置一个Greenplum数据库以使用Kerberos。

在Greenplum数据库的Master上设置好Kerberos之后,可以配置Greenplum数据库来使用Kerberos。有关设置Greenplum数据库的Master的信息可见安装和配置Kerberos客户端

  1. 在数据库postgres中为被用作数据库管理员的Kerberos的principal创建一个Greenplum数据库管理员。下面的例子使用gpamin/kerberos-gpdb
psql postgres -c 'create role "gpadmin/kerberos-gpdb" login superuser;'

在数据库postgres装创建的这个角色将在后面创建的任何新Greenplum数据库中都可用。

  1. 修改postgresql.conf以指定keytab文件的位置。例如,把下面这一行增加到中指定文件夹/home/gpadmin作为keytab文件gpdb-kerberos.keytab的位置。
krb_server_keyfile = '/home/gpadmin/gpdb-kerberos.keytab'
  1. 修改Greenplum数据库文件pg_hba.conf以启用Kerberos支持。然后重启Greenplum数据库(gpstop -ar)。例如,在pg_hba.conf中增加下面的行会增加GSSAPI和Kerberos支持。krb_realm的值是用于对Greenplum数据库认证的Kerberos realm。
host all all 0.0.0.0/0 gss include_realm=0 krb_realm=KRB.GREENPLUM.COM

有关pg_hba.conf文件的信息请见Postgres文档中的pg_hba.conf文件

  1. 使用kinit创建一个ticket并且用klist显示Kerberos ticket缓存中的ticket。
  2. 作为一次测试,作为带有Kerberos证书gpadmin/kerberos-gpdbgpadmin角色登入到数据库:
psql -U "gpadmin/kerberos-gpdb" -h master.test postgres

可以在pg_ident.conf文件中定义一个用户名映射并且在pg_hba.conf文件中指定该映射以简化登入Greenplum数据库的过程。例如,这个psql命令作为Kerberos principal adminuser/mdw.proddb登入到mdw.proddb上的默认Greenplum数据库:

$ psql -U "adminuser/mdw.proddb" -h mdw.proddb

如果默认用户是adminuser,可以配置pg_ident.conf文件和pg_hba.conf文件,这样adminuser可以在不指定-U选项的情况下作为Kerberos principaladminuser/mdw.proddb登入到数据库中:

$ psql -h mdw.proddb

下列用户名映射被定义在Greenplum数据库文件$MASTER_DATA_DIRECTORY/pg_ident.conf中:

# MAPNAME   SYSTEM-USERNAME        GP-USERNAME
mymap       /^(.*)mdw\.proddb$     adminuser

可以在pg_hba.conf文件中指定该映射为启用Kerberos支持的行的一部分:

host all all 0.0.0.0/0 krb5 include_realm=0 krb_realm=proddb map=mymap

更多有关指定用户名映射的信息,请见Postgres文档中的用户名映射

  1. 如果一个Kerberos principal不是一个Greenplum数据库用户,当该用户尝试登入到数据库中时,psql命令行会显示类似于下面的消息:
psql: krb5_sendauth: Bad response

该principal必须被作为一个Greenplum数据库用户添加。

为JDBC设置带Kerberos的Greenplum数据库

启用对Greenplum数据库的经Kerberos认证的JDBC访问。

可以配置Greenplum数据库来使用Kerberos运行用户定义的Java函数。

  1. 确保在Greenplum数据库的Master上安装和配置了Kerberos。见安装和配置Kerberos客户端
  2. 在文件夹/home/gpadmin中创建文件.java.login.config并且把下面的文本加到该文件中:
pgjdbc { 
  com.sun.security.auth.module.Krb5LoginModule required
  doNotPrompt=true
  useTicketCache=true
  debug=true
  client=true;
};
  1. 创建一个使用Kerberos认证连接到Greenplum数据库的Java应用。下面的数据库连接URL的例子使用了一个PostgreSQL的JDBC驱动并且指定了用于Kerberos认证的参数:
jdbc:postgresql://mdw:5432/mytest?kerberosServerName=postgres
&jaasApplicationName=pgjdbc&user=gpadmin/kerberos-gpdb

指定的参数名和值取决于Java应用如何执行Kerberos认证。

  1. 通过从Greenplum数据库运行一个Java应用的例子来测试Kerberos登录。
当前内容版权归GreenPlum和翻译组所有,若有侵权请联系删除下架 修订时间: 2024-09-15 21:48:01

results matching ""

    No results matching ""