客户端公共模块

为客户端配置 Kerberos 以访问启用 Kerberos 的 Kyuubi

师成师成· 更新于 2026-09-29· 阅读 12 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

操作说明

当 Kyuubi 由 Kerberos 进行安全保护时,认证过程会变得稍微复杂一些。

../../_images/kyuubi_kerberos_authentication.png

上图展示了简化的 Kerberos 认证流程:

  1. Kerberos 客户端向 KDC 发送用户主体和密钥。密钥可以是密码或 keytab 文件。
  2. KDC 返回一张 票据授予票据(TGT)。
  3. Kerberos 客户端将 TGT 存入票据缓存。
  4. JDBC 客户端(如 beeline 和 BI 工具)从票据缓存中读取 TGT。
  5. JDBC 客户端向 KDC 发送 TGT 和服务器主体。
  6. KDC 返回一张 客户端到服务端票据。
  7. JDBC 客户端将 客户端到服务端票据 发送给 Kyuubi 服务器,以证明其身份。

在本页的剩余部分,我们将介绍通过此认证所需的步骤。

安装 Kerberos 客户端

通常,Kerberos 客户端已默认安装。你可以使用 klist 工具进行验证。

Linux 命令及输出:

$ klist -V
Kerberos 5 version 1.15.1

macOS 命令及输出:

$ klist --version
klist (Heimdal 1.5.1apple1)
Copyright 1995-2011 Kungliga Tekniska Högskolan
Send bug-reports to heimdal-bugs@h5l.org

Windows 命令及输出:

> klist -V
Kerberos for Windows

如果客户端尚未安装,请先根据操作系统平台提前安装。

我们建议你安装 MIT Kerberos 发行版,因为本指南中的所有命令都是基于它编写的。

配置 Kerberos 客户端

Kerberos 客户端需要一个配置文件来调整 Kerberos 票据缓存的创建方式。以下是不同操作系统中该配置文件的默认位置:

操作系统路径
Linux/etc/krb5.conf
MacOS/etc/krb5.conf
Windows%ProgramData%\MIT\Kerberos5\krb5.ini

你可以使用 KRB5_CONFIG 环境变量来覆盖默认位置。

配置文件应指向与 Kyuubi 所指向的相同 KDC。

获取 Kerberos TGT

执行 kinit 命令从 KDC 获取 TGT。

假设用户主体为 kyuubi_user@KYUUBI.APACHE.ORG,用户 keytab 文件名为 kyuubi_user.keytab,则命令应为:

$ kinit -kt kyuubi_user.keytab kyuubi_user@KYUUBI.APACHE.ORG

(Command is identical on different OS platform)

你也可以使用 principal 和密码执行 kinit 命令来获取 TGT:

$ kinit kyuubi_user@KYUUBI.APACHE.ORG
Password for kyuubi_user@KYUUBI.APACHE.ORG: password

(Command is identical on different OS platform)

如果命令执行成功,TGT 将被存储到票据缓存中。
使用 klist 命令打印票据缓存中的 TGT 信息:

$ klist

Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: kyuubi_user@KYUUBI.APACHE.ORG

Valid starting       Expires              Service principal
2021-12-13T18:44:58  2021-12-14T04:44:58  krbtgt/KYUUBI.APACHE.ORG@KYUUBI.APACHE.ORG
    renew until 2021-12-14T18:44:57

(Command is identical on different OS platform. Ticket cache location may be different.)

票据缓存(Ticket cache)在不同操作系统平台上可能有不同的存储类型。

例如,

操作系统默认票据缓存类型及位置
LinuxFILE:/tmp/krb5cc_%{uid}
MacOSKCM:%{uid}:%{gid}
WindowsAPI:krb5cc

你可以在 klist 输出的 Ticket cache 部分查看你的票据缓存类型和位置。

注意:

  • 请确保你的票据缓存类型为 FILE,因为 JVM 只能读取以文件形式存储的票据缓存。
  • 如果你在同一台主机上以同一操作系统用户运行 Kyuubi 并执行 kinit,请不要将 TGT 存储到默认票据缓存中。默认票据缓存已被 Kyuubi 服务端占用。

无论原因是默认票据缓存不是文件,还是它已被 Kyuubi 服务端使用,你都应该将票据缓存存储到另一个文件位置。
这可以通过在 kinit 命令中使用 -c 参数指定一个文件位置来实现。

例如,

$ kinit -c /tmp/krb5cc_beeline -kt kyuubi_user.keytab kyuubi_user@KYUUBI.APACHE.ORG

(Command is identical on different OS platform)

要检查票据缓存,请在 klist 命令中使用 -c 参数指定文件位置。

例如:

$ klist -c /tmp/krb5cc_beeline

(Command is identical on different OS platform)

将 Kerberos 客户端配置文件加入 JVM 搜索路径

运行 JDBC 客户端的 JVM 同样需要读取 Kerberos 客户端配置文件。但 JVM 的默认搜索位置与 Kerberos 客户端不同,且不会读取 KRB5_CONFIG 环境变量。

操作系统JVM 搜索路径
Linux系统级:/etc/krb5.conf
macOS用户级:$HOME/Library/Preferences/edu.mit.Kerberos;系统级:/etc/krb5.conf
Windows用户级:%USERPROFILE%\krb5.ini;系统级:%windir%\krb5.ini

你可以通过 JVM 系统属性 java.security.krb5.conf 覆盖默认位置。

将 Kerberos 票据缓存加入 JVM 搜索路径

JVM 按以下顺序确定票据缓存的位置:

  1. KRB5CCNAME 环境变量指定的路径。该路径必须以 FILE: 开头。
  2. 类 Unix 系统(如 Linux、macOS)上的 /tmp/krb5cc_%{uid}
  3. 如果 ${user.name} 不为空,则为 ${user.home}/krb5cc_${user.name}
  4. 如果 ${user.name} 为空,则为 ${user.home}/krb5cc

注意:

  • ${user.home} 和 ${user.name} 是 JVM 系统属性。
  • 如果 ${user.home} 为空,则应将 ${user.home} 替换为 ${user.dir}。

请确保票据缓存以文件形式存储,并放置在上述位置之一。

确保 core-site.xml 位于类路径中

与 Hadoop 客户端一样,需要在 core-site.xml 中将 hadoop.security.authentication 设置为 KERBEROS,以便 Hive JDBC 驱动使用 Kerberos 认证。core-site.xml 应放置在 beeline 或 BI 工具的类路径下。

Beeline

以下是不同 beeline 发行版中 core-site.xml 的常见位置:

客户端位置说明
Hive beeline$HADOOP_HOME/etc/hadoopHive 会解析 $HADOOP_HOME,并使用 $HADOOP_HOME/bin/hadoop 命令启动 beeline。$HADOOP_HOME/etc/hadoop 在 hadoop 命令的类路径中。
Spark beeline$HADOOP_CONF_DIR在 $SPARK_HOME/conf/spark-env.sh 中,$HADOOP_CONF_DIR 通常被设置为包含 Hadoop 客户端配置文件的目录。
Kyuubi beeline$HADOOP_CONF_DIR在 $KYUUBI_HOME/conf/kyuubi-env.sh 中,$HADOOP_CONF_DIR 通常被设置为包含 Hadoop 客户端配置文件的目录。

如果在上述位置未找到 core-site.xml,请使用以下内容创建一个:

<configuration>
  <property>
    <name>hadoop.security.authentication</name>
    <value>kerberos</value>
  </property>
</configuration>

BI 工具

对于 BI 工具,添加 core-site.xml 的方式各不相同。
以 DBeaver 为例,我们可以通过其 Global libraries(全局类库)首选项将文件添加到 DBeaver 的类路径中。
由于 Global libraries 只接受 jar 文件,你需要将 core-site.xml 打包进一个 jar 文件中。

$ jar -c -f core-site.jar core-site.xml

(Command is identical on different OS platform)

通过 JDBC URL 连接

最后一步是使用正确的 JDBC URL 连接到 Kyuubi。
JDBC URL 的格式应为:

jdbc:hive2://<kyuubi_server_address>:<kyuubi_server_port>/<db>;principal=<kyuubi_server_principal>

或

jdbc:hive2://<kyuubi_server_address>:<kyuubi_server_port>/<db>;kyuubiServerPrincipal=<kyuubi_server_principal>

注意:

  • principal 沿用自 Hive JDBC Driver,含义有些含糊,可以使用 kyuubiServerPrincipal 作为其别名。
  • kyuubi_server_principal 是在 kyuubi-defaults.conf 中设置的 kyuubi.kinit.principal 的值。
  • 作为命令行参数时,JDBC URL 应加引号,以避免被 “;” 拆分成两条命令。
  • 对于 DBeaver,应将 <db>;principal=<kyuubi_server_principal> 或 <db>;kyuubiServerPrincipal=<kyuubi_server_principal> 设置为 Database/Schema 参数。

评论

登录后参与评论

正在加载评论…