CDH安装之后默认是没有安全认证的,数据处于裸奔状态。集成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: