# 大数据开发系列三：kerberos认证实践

> 作者/来源: UCloud 运营管理员
> 发布时间: 2023-01-11T05:19:00.000Z
> 分类: 推荐奖励
> 标签: AI, 数据库, 安全
> 原文链接: http://117.50.162.249:3000/yun/articles/1692

---

# 大数据开发系列三：kerberos认证实践

> 来源: https://www.ucloud.cn/yun/129204.html
> 作者: IT那活儿
> 发布日期: 发布于2023-01-11 13:19

大数据开发系列三：kerberos认证实践

**点击上方“IT那活儿****”公众号，关注后了解更多内容，不管IT什么活儿，干就完了！！！**

我们平常会基于大数据组件来实现客户业务场景，而所使用大数据组件时（hadoop/flink/kafka等），会被安全厂商扫描出安全访问漏洞，业界推荐用kerberos来解决此类安全访问问题。

## **Kerberos介绍**

Kerberos是一种网络认证协议，在互不信任的网络中，Kerberos提供了一种可靠的中心化认证协议，以便网络中的各个机器之间能够相互访问。

## **安装规划**

|  |  |  |  |
| --- | --- | --- | --- |
| **类型** | **主机** | **主机hostname** | **安装组件** |
| **服务端** | 192.168.199.102 | bigdata-03 | krb5-server  krb5-workstation  krb5-libs  krb5-devel |
| **客户端** | 192.168.199.104 | bigdata-05 | krb5-workstation  krb5-devel |

服务端与客户端主机网络互通，并且配置对应相互hostname映射关系。

## **服务端安装和配置Kerberos软件**

**1. 软件安装**

1）在线安装：yum install -y krb5-server krb5-workstation krb5-libs

2）离线rpm 安装：

rpm 下载位置*http://mirror.centos.org/centos/7/os/x86\_64/Packages/*

rpm -qa|grep krb  查看当前服务器安装的包，安装如下对应的的安装包：

- rpm -ivh libkadm5-1.15.1-50.el7.x86\_64.rpm
- rpm -ivh krb5-libs-1.15.1-50.el7.x86\_64.rpm
- rpm -ivh  krb5-workstation-1.15.1-50.el7.x86\_64.rpm
- rpm -ivh krb5-server-1.15.1-50.el7.x86\_64.rpm
- rpm -ivh krb5-devel-1.15.1-50.el7.x86\_64.rpm

**2. 修改kdc配置文件**

软件包安装后，修改/var/kerberos/krb5kdc/kdc.conf文件红色部份，指定域名，kdc 端口默认为88 ，可以根据实际情况进行修改。

```
[kdcdefaults]kdc_ports = 88kdc_tcp_ports = 88[realms]HADOOP.COM = {#master_key_type = aes256-ctsacl_file = /var/kerberos/krb5kdc/kadm5.acldict_file = /usr/share/dict/wordsadmin_keytab = /var/kerberos/krb5kdc/kadm5.keytabsupported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal}
```

**3. 修改krb配置文件**

修改/etc/krb5.conf文件：

```
# Configuration snippets may be placed in this directory as wellincludedir /etc/krb5.conf.d/[logging]default = FILE:/var/log/krb5libs.logkdc = FILE:/var/log/krb5kdc.logadmin_server = FILE:/var/log/kadmind.log[libdefaults]dns_lookup_realm = falseticket_lifetime = 24hrenew_lifetime = 7dforwardable = truerdns = falsepkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crtdefault_realm = HADOOP.COM #默认领域，跟kdc.conf里面realms保持一致#default_ccache_name = KEYRING:persistent:%{uid}[realms]HADOOP.COM = {kdc = bigdata-03       #主节点hostnameadmin_server = bigdata-03  #主节点hostname}[domain_realm].hadoop.com = HADOOP.COM #DNS域名，跟kdc.conf里面realms保持一致hadoop.com = HADOOP.COM #DNS域名，跟kdc.conf里面realms保持一致
```

**说明：**

default\_ccache\_name：默认的缓存名称，需要注释掉，否侧hadoop指令会报错。

```
org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
```

**4. 修改kadm5配置文件**

修改/var/kerberos/krb5kdc/kadm5.acl文件，内容如下

```
*/admin@HADOOP.COM *
```

**5. 初始化Kerberos的数据库**

```
[root@bigdata-03 ~]# kdb5_util create -s -r HADOOP.COMLoading random dataInitializing database /var/kerberos/krb5kdc/principal for realm HADOOP.COM,master key name K/M@HADOOP.COMYou will be prompted for the database Master Password.It is important that you NOT FORGET this password.
```

这是需要输入密码：xxxxx

数据库master账户：K/M@HADOOP.COM\*

#如果提示不能创建，删除后重试：

```
kdb5_util: Cannot open DB2 database /var/kerberos/krb5kdc/principal: File exists while creating database /var/kerberos/krb5kdc/principal[root@bigdata-03 ~]# rm -f /var/kerberos/krb5kdc/principal*
```

初始化成功后，会自动生成认证文件：

```
ls  -a   /var/kerberos/krb5kdc/
```

- principal和principal.ok是Kerberos数据库文件。
- principal.kadm5和principal.kadm5.lock是Kerberos系统管理数据库。
- .K5.MYTRAIN.COM是由-s参数创建的隐藏文件。

**6. 测试Kerberos数据库**

使用kadmin.local程序可以访问刚刚建立的Kerberos数据库，Kadmin是Kerberos数据库的管理接口，Kadmin里面的kerberos管理员可以添加，修改和删除principal（主体），修改密码和执行其他管理任务。

1）进入Kadmin接口

```
kadmin.local
```

2）列举当前KDC中主体

```
listprincs
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129204/images/129204_000.png)

**7. 创建Kerberos管理员用户**

在KDC所在主机，执行以下命令，并按照提示输入password。

```
kadmin.local -q "addprinc admin/admin@HADOOP.COM"
```

或者在kadmin.local里面：

```
addprinc admin/admin@HADOOP.COM
```

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129204/images/129204_001.png)

**标准：account/instance@realm**  

**例子**：admin/admin@HADOOP.COM

- account ：表示账户名 或者服务类型
- instance表示实例，一般为主机名表示 属于这个主机名下的某个账户
- realm 表示域名 如 HADOOP.COM

## **客户端安装和配置Kerberos软件**

**1. 安装**

- rpm -ivh  libkadm5-1.15.1-50.el7.x86\_64.rpm
- rpm -ivh   krb5-workstation-1.15.1-50.el7.x86\_64.rpm
- rpm -ivh   krb5-devel-1.15.1-50.el7.x86\_64.rpm

同步krb5.conf ，从管理端/etc/krb5.conf 复制到各个客户端同样的位置。

**2. 验证**

客户端机器验证：

kinit admin/admin@HADOOP.COM   密码为前面初始化密码。

**正确的结果就是没有任何反应。**

klist  列出当前系统用户的 Kerberos认证情况：

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129204/images/129204_002.png)

## **常用问题**

**1. 错误一**

```
org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
```

**需注释**/etc/krb5.conf文件 #default\_ccache\_name = KEYRING:persistent:%{uid} 配置项。

**2. 错误二**

```
libgssapi_krb5.so.2: cannot open shared object file: No such file or directory
```

卸载Kerberos时，用rpm 删除krb5-libs包，加了--nodeps参数会把相关联的uyiglibgssapi\_krb5.so.2依赖包也删除掉了，从而导致在主机上输入命令时都会报该报错信息。

**解决办法：**在这台主机上用Java编写Socket服务程序，从另外一台已有krb5-libs的机器上编写Socket客户端程序，上传krb5-libs文件至Socket服务端，重新安装krb5-libs包，主机服务恢复正常。

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129204/images/129204_003.png)

## 本文作者：长研架构小组(上海新炬王翦团队）

## 本文来源：“IT那活儿”公众号

![](https://ucloud-blog.cn-bj.ufileos.com/articles/129204/images/129204_004.png)