Skip to main content

使用 Kerberos 实现用户认证

Kerberos 简介

Kerberos 是一种用户认证协议,是 Hadoop 生态广泛支持的一种认证协议。

在未开启 Kerberos 认证时,Hadoop 的 文件系统客户端无法验证当前访问用户的真实性,可以简单通过 HADOOP_USER_NAME 环境变量设置用户访问的用户名,甚至可以是 superuser,这会带来一定的安全问题。当启用 Kerberos 验证后Hadoop in Secure Mode ,访问文件系统的用户 就必须是通过 Kerberos 协议认证的,可以保证它的真实性。

如何开启 Kerberos 支持

JuiceFS 4.8+ 版本的 Hadoop SDK 也支持使用 Kerberos 做用户认证。

  1. 准备工作

    1. 如果没有安装 Kerberos ,需要先安装 KDC
    2. 为 JuiceFS 创建 meta.keytab 文件
      kadmin.local -q "addprinc -randkey meta/{VOL_NAME}"
      kadmin.local -q "ktadd -norandkey -k meta.keytab meta/{VOL_NAME}"
      {VOL_NAME} 需要替换为创建的 JuiceFS 文件系统的名字
  2. 在 JuiceFS 控制台开启 Kerberos 支持

    1. 在文件系统的设置页面打开 Kerberos 支持,并上传之前步骤创建的 meta.keytab 文件

    2. Superuser 和 Supergroup

      当开启 Kerberos 支持后,superuser 和 supergroup 可以通过控制台设置。当设置后,控制台的值将会覆盖客户端 juicefs.superuserjuicefs.supergroup 设置的参数。

    3. 可选:代理用户

    JuiceFS 也支持代理用户功能,请参考 HDFS PROXY USER

    当需要使用代理用户功能时,请添加代理用户规则,例如当使用 Hue 时,hue 登录用户可以代理其他用户。

  3. SDK 客户端配置

修改 core-site.xml,添加如下配置

<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>juicefs.server-principal</name>
<value>meta/_HOST</value>
<desciption>
如果使用 _HOST 通配符,默认会被替换为访问的 JuiceFS 文件系统的名字,
也可以使用 meta/{VOL_NAME}, 指定具体的文件系统
</desciption>
</property>

如果上述配置项没设置好,会导致无法访问文件系统。

  1. 使用

    • hadoop shell
    # 通过 kinit 登录
    kinit {your-client-principal}
    # 正常运行
    hadoop fs -ls jfs://{VOL_NAME}/

    # 退出
    kdestroy
    hadoop fs -ls jfs://{VOL_NAME}/
    # stderr 会打印 kerberos credential is needed 错误信息
    • spark

    spark 提交任务需增加以下配置

    --conf spark.yarn.access.hadoopFileSystems

客户端默认使用 /etc/krb5.conf 配置文件访问 KDC,如果 KDC 配置默认不在此位置,可以在 Java 启动参数里面添加 -Djava.security.krb5.conf=/path/to/conf 修改。