封面图片

大数据

CDH集成Kerberos

CDH安装之后默认是没有安全认证的,数据处于裸奔状态。集成kerberos之后,访问数据就需要先进行安全认证。


Kerberos原理

参考kerberos原理

安装Kerberos

kerberos分服务端和客户端。 服务端需要安装:krb5-server、krb5-libs、krb5-workstation 客户端安装:krb5-libs、krb5-workstation

离线安装Kerberos

下载rpm安装包:libkadm5、krb5-libs、krb5-server、krb5-workstation 注意:centos 7 使用1.15版本,centos8 使用1.18版本 安装过程中如果产生冲突,执行:

rpm --import /etc/pki/rpm-gpg/RPM* rpm -ivh --replacefiles xxx.rpm

rpm下载网站:pkgs.org

yum安装

服务端安装krb5-server和krb5-workstation 客户端安装:krb5-workstation 其他安装:krb5-libs

yum install krb5-server krb5-libs krb5-workstation

修改配置文件

主要有三个配置文件:/var/kerberos/krb5kdc/kdc.conf(服务端修改)、/etc/krb5.conf(所有主机修改)、/var/kerberos/krb5kdc/kadm5.acl(服务端修改) 如果是centos 8 使用的1.18版本的安装包,还需要配置/etc/profile,增加如下内容:

1export KRB5CCNAME=/tmp/krb5cc_$$

/etc/krb5.conf

# Configuration snippets may be placed in this directory as well includedir /etc/krb5.conf.d/ [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false pkinit_anchors = FILE:/etc/pki/tls/certs/ca-bundle.crt default_realm = BG.COM # default_ccache_name = KEYRING:persistent:%{uid} [realms] BG.COM = { kdc = `kdc ip地址` admin_server = `adminserver ip地址` } [domain_realm] # .example.com = EXAMPLE.COM # example.com = EXAMPLE.COM

/var/kerberos/krb5kdc/kdc.conf

[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] EXAMPLE.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words max_life = 1d max_renewable_life = 7d admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab }

/var/kerberos/krb5kdc/kadm5.acl

*/admin@EXAMPLE.COM *

初始化KDC数据库

在服务端cdh01上执行初始化命令:

kdb5_util create –r BG.COM -s

此处需要输入Kerberos数据库的密码

启动Kerberos服务

kdc和kadmin只需要在服务端启动。 启动KDC:

systemctl enable krb5kdc systemctl start krb5kdc

启动kadmin,该服务为KDC数据库访问入口

systemctl enable kadmin systemctl start kadmin

创建Kerberos的管理账号

admin/admin@EXAMPLE.COM 执行:

1kadmin.local 2 3Authenticating as principal root/admin@EXAMPLE.COM with password. 4kadmin.local: 5kadmin.local: addprinc admin/admin@EXAMPLE.COM 6WARNING: no policy specified for admin/admin@EXAMPLE.COM; defaulting to no policy 7Enter password for principal "admin/admin@EXAMPLE.COM": 【输入密码为admin】 8Re-enter password for principal "admin/admin@EXAMPLE.COM": 9Principal "admin/admin@EXAMPLE.COM" created. 10kadmin.local:

测试Kerberos的管理员账号

1#登录安全个体: 2kinit admin/admin@EXAMPLE.COM 3#查看安全个体: 4klist

CDH配置Kerberos

创建cdh管理用户

1# kadmin.local 2Authenticating as principal root/admin@EXAMPLE.COM with password. 3kadmin.local: addprinc cloudera-scm/admin@EXAMPLE.COM 4WARNING: no policy specified for cloudera-scm/admin@EXAMPLE.COM; defaulting to no policy 5Enter password for principal "cloudera-scm/admin@EXAMPLE.COM": [输入密码] 6Re-enter password for principal "cloudera-scm/admin@EXAMPLE.COM": [确认密码] 7Principal "cloudera-scm/admin@EXAMPLE.COM" created. 8kadmin.local:

cloudera-scm/admin安全个体需要在之后的配置中填写。

进入Cloudera Manager的“管理”->“安全”界面

1)选择“启用Kerberos”,进入如下界面

2)环境确认(勾选全部)

3)填写KDC配置 加密类型选择:aes128-cts KDC Server 主机和KDC Admin Server Host输入服务端主机名称,这里是cdh01。

4)KRB5 配置,不勾选“通过Cloudera Manager 管理krb5.conf”,否则会修改

5)填写主体名和密码

6)等待导入KDC凭据完成

7)继续

8)重启集群

验证安装是否成功

访问HDFS

认证前:

1hdfs dfs -ls / 221/11/30 18:25:43 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS] 3ls: Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]; Host Details : local host is: "cdh01/10.10.10.01"; destination host is: "cdh01":8020;

使用密码认证:

1kinit admin/admin@EXZAMPLE.COM 2Password for admin/admin@EXZAMPLE.COM:

认证后:

1hdfs dfs -ls / 2Found 4 items 3drwxr-xr-x - hbase supergroup 0 2022-04-18 17:13 /hbase 4drwxr-xr-x - hdfs supergroup 0 2022-04-18 17:05 /system 5drwx-wx-wx - hive supergroup 0 2022-04-11 16:39 /tmp 6drwxrwx--x - mapred supergroup 0 2022-04-11 16:39 /user

创建kerberos用户

方式一:生成keytabs文件

在 kerberos kdc 所在的主机上,在 root 用户下使用 kadmin.local 进入: 在非 kerberos kdc 主机上,在 root 用户下使用 kadmin 进入:

1# 创建客户端principal,randkey参数会自动生成随机密码 2add_principal -randkey les/cdh@BG.COM 3# 验证principal是否被创建 4getprinc les/cdh@BG.COM 5# 为les/cdh@BG.COM创建keytab,该命令会修改密码,之前的随机密码不能使用了 6xst -k /home/keytabs/les.keytab les/cdh@BG.COM 7# 验证 8kinit -kt /home/keytabs/les.keytab les/cdh@BG.COM 9# 查看kerberos认证缓存 10klist 11# 验证,注意这边的principal:hive/cdh02@BG.COM为hive服务的认证主体 12beeline -u "jdbc:hive2://cdh02:10000/default;principal=hive/cdh02@BG.COM"

方式二:使用账号密码的方式

1kadmin.local 2 3Authenticating as principal root/admin@EXAMPLE.COM with password. 4kadmin.local: 5kadmin.local: addprinc admin/admin@EXAMPLE.COM 6WARNING: no policy specified for admin/admin@EXAMPLE.COM; defaulting to no policy 7Enter password for principal "admin/admin@EXAMPLE.COM": 【输入密码为admin】 8Re-enter password for principal "admin/admin@EXAMPLE.COM": 9Principal "admin/admin@EXAMPLE.COM" created. 10kadmin.local:
2023年03月28日
在初学者眼中,世界充满了可能;专家眼中,世界大都已经既定。--铃木俊隆