为Linux客户端配置Kerberos

为Linux客户端配置Kerberos

可以配置Linux客户端应用来连接一个配置为用Kerberos认证的Greenplum数据库系统。

如果在RedHat Enterprise Linux上的JDBC应用连接Greenplum数据库时使用Kerberos认证,客户端系统必须被配置为使用Kerberos认证。如果没有使用Kerberos认证来连接到Greenplum数据库,就无需在客户端系统上配置Kerberos。

有关在Greenplum数据库中启用Kerberos认证的信息,请见Greenplum数据库管理员指南中的"使用Kerberos认证"。

要求

下面是从一个客户端系统用JDBC应用连接到启用了Kerberos认证的Greenplum数据库的要求。

先决条件

  • 在Greenplum数据库的Master主机上必须安装并配置好Kerberos。
    重要: Greenplum数据库必须被配置好,这样远程用户能够用Kerberos认证连接到Greenplum数据库。对Greenplum数据库访问的授权由pg_hba.conf文件控制。细节请见Greenplum数据库管理员指南中的"编辑pg_hba.conf文件",还可参见Greenplum数据库安全性配置指南
  • 客户端系统从Greenplum数据库的Master请求Kerberos配置文件krb5.conf
  • 客户端系统要求一个Kerberos的keytab文件,其中含有被用来登入数据库的Greenplum数据库用户的认证证书。
  • 客户端机器必须能够连接到Greenplum数据库的Master主机。

    如果需要,把Greenplum数据库的Master主机名和IP地址添加到系统的hosts文件中。在Linux系统上,hosts文件在/etc中。

客户端机器上的必备软件

  • 在客户端机器上要求Kerberos的kinit工具。在安装Kerberos包时就有kinit工具:
    • krb5-libs
    • krb5-workstation
    注意: 在安装Kerberos包时,可以使用其他Kerberos工具(例如klist)来显示Kerberos的ticket信息。
Java应用要求额外的软件:
  • Java JDK

    在Red Hat Enterprise Linux 6.x上支持Java JDK 1.7.0_17。

  • 确保JAVA_HOME被设置为受支持的Java JDK的安装目录。

设置带有Kerberos认证的客户端系统

用Kerberos认证连接到Greenplum数据库需要一个Kerberos的ticket。在客户端系统上,ticket从Kerberos的keytab文件用kinit工具生成,并且被保存在一个缓冲文件中。

  1. 从Greenplum数据库的Master上的Kerberos配置文件krb5.conf复制一份拷贝。这个文件会被Greenplum数据库客户端软件以及Kerberos工具使用。

    krb5.conf安装在目录/etc中。

    如果需要,把参数default_ccache_name添加到krb5.ini文件的[libdefaults]小节中,并且为它指定客户端系统上的Kerberos ticket缓冲文件。

  2. 获得一个包含Greenplum数据库用户的认证证书的Kerberos keytab文件。
  3. 运行kinit根据指定的keytab文件在客户端机器上创建一个ticket。对于这个例子,keytab文件gpdb-kerberos.keytab在当前目录中。ticket缓冲文件在gpadmin用户的主目录中。
    > kinit -k -t gpdb-kerberos.keytab -c /home/gpadmin/cache.txt 
       gpadmin/kerberos-gpdb@KRB.EXAMPLE.COM

运行psql

用户可以从一个远程系统访问启用了Kerberos认证的Greenplum数据库。

要用psql连接到Greenplum数据库

  1. 作为gpadmin用户,打开一个命令窗口。
  2. 从命令窗口启动psql,并且指定建立到Greenplum数据库的连接,连接使用一个配置了Kerberos认证的用户。

    下面的例子作为gpadmin用户登入到kerberos-gpdb机器上的Greenplum数据库,该用户的Kerberos证书是gpadmin/kerberos-gpdb

    $ psql -U "gpadmin/kerberos-gpdb" -h kerberos-gpdb postgres

运行一个Java应用

从一个Kerberos认证的Java应用使用Java认证和授权服务(JAAS)访问Greenplum数据库

  1. 在用户主目录中创建文件.java.login.config

    例如,在一个Linux系统上,主目录类似于/home/gpadmin

    把下列文本加到该文件中:

    pgjdbc {
      com.sun.security.auth.module.Krb5LoginModule required
      doNotPrompt=true
      useTicketCache=true
      ticketCache = "/home/gpadmin/cache.txt"
      debug=true
      client=true;
    };
  2. 创建一个使用Kerberos认证连接到Greenplum数据库的Java应用,并且作为该用户运行该应用。

这个示例数据库连接URL使用了一种PostgreSQL JDBC驱动并且指定了用于Kerberos认证的参数。

jdbc:postgresql://kerberos-gpdb:5432/mytest? 
  kerberosServerName=postgres&jaasApplicationName=pgjdbc& 
  user=gpadmin/kerberos-gpdb

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