Hadoop学习笔记(HDP)-Part.11 安装Kerberos
目录
Part.01 关于HDP
Part.02 核心组件原理
Part.03 资源规划
Part.04 基础环境配置
Part.05 Yum源配置
Part.06 安装OracleJDK
Part.07 安装MySQL
Part.08 部署Ambari集群
Part.09 安装OpenLDAP
Part.10 创建集群
Part.11 安装Kerberos
Part.12 安装HDFS
Part.13 安装Ranger
Part.14 安装YARN+MR
Part.15 安装HIVE
Part.16 安装HBase
Part.17 安装Spark2
Part.18 安装Flink
Part.19 安装Kafka
Part.20 安装Flume
十一、安装Kerberos
1.安装
服务端,在hdp01上安装
yum install -y krb5-server libkadm5
客户端,在hdp01-05上安装(可选,后面ambari启用kerberos的时候也会安装)
ansible all -m yum -a 'name=krb5-workstation state=present'
2.修改krb5.conf
在hdp01上修改配置文件/etc/krb5.conf
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 = /etc/pki/tls/certs/ca-bundle.crt
default_realm = HDP315.COM
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
HDP315.COM = {
kdc = hdp01.hdp.com
admin_server = hdp01.hdp.com
}
[domain_realm]
.hdp315.com = HDP315.COM
hdp315.com = HDP315.COM
3.修改kdc配置
修改/var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
HDP315.COM = {
master_key_type = aes256-cts
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-cbc-md5:normal des-cbc-crc:normal
}
支持的加密方式务必要删掉des-hmac-sha1:normal,否则后续添加hdfs等服务会报WARNING,namenode启动和HA时都会出现问题
WARN security.UserGroupInformation: Not attempting to re-login since the last re-login was attempted less than 60 seconds before
server.AuthenticationFilter (AuthenticationFilter.java:doFilter(608)) - Authentication exception: GSSException: Failure unspecified at GSS-API level (Mechanism level: Encryption type DES3 CBC mode with SHA1-KD is not supported/enabled)
修改/var/kerberos/krb5kdc/kadm5.acl,给数据库管理员admin添加ACL权限,*代表全部
*/admin@HDP315.COM *
4.创建数据库
创建数据库,其中HDP315.COM与/etc/krb5.conf对应,且需要设置管理员密码(lnyd@LNsy115),该命令会在/var/kerberos/krb5kdc/创建principal数据库。
kdb5_util create -r HDP315.COM
ll /var/kerberos/krb5kdc/
如果遇到数据库已经存在的提示,且需要重建数据库时,可以把/var/kerberos/krb5kdc/目录下的principal的相关文件都删除掉。
启用服务
systemctl start krb5kdc
systemctl start kadmin
systemctl status krb5kdc
systemctl status kadmin
创建管理员admin,以及keyta文件,/var/kerberos/krb5kdc/kadm5.keytab
kdc配置文件中指定了管理员的密码文件为kadmin5.keytab,因此新建账号admin密码存放在了kadmin5.keytab中,相当于获得了管理员身份,管理员的权限则由kadmin.acl中进行控制。账号需要为XXX/admin@HDP315.COM,对应到kadmin5.acl中的格式。
kadmin.local
addprinc -pw lnyd@LNsy115 admin/admin@HDP315.COM
ktadd -k /var/kerberos/krb5kdc/kadm5.keytab -norandkey admin/admin@HDP315.COM
确认是否可以登录,分别用密码和keytab两种方式登录
kinit admin/admin@HDP315.COM
klist
kdestroy
kinit -kt /var/kerberos/krb5kdc/kadm5.keytab admin/admin@HDP315.COM
klist
进一步验证是否有管理员权限,用kadmin登录,成功则表示权限无问题
kadmin -p admin/admin@HDP315.COM -k -t /var/kerberos/krb5kdc/kadm5.keytab
5.Abmari启用Kerberos
(1)安装JCE
对于Kerberos系统来说,默认使用的AES-256来进行加密。在集群启用Kerberos之前,必须在Ambari集群上的每个节点上都装有JCE。
如果使用的是Oracle JDK,则必须在群集中的所有主机上分发和安装JCE,包括Ambari Server,安装JCE后,需要重新启动Ambari Server;如果使用的是OpenJDK,OpenJDK的某些发行版会自动提供无限强度的JCE,因此不需要安装JCE。
JCE与JDK版本是对应的,需要根据JDK的版本来选择JCE版本,下载JCE的zip包并解压到$JAVA_HOME/jre/lib/security目录下。
unzip /opt/jce_policy-8.zip -d /opt/
cd /root/ansible/
ansible all -m copy -a 'src=/opt/UnlimitedJCEPolicyJDK8/local_policy.jar dest=/usr/local/jdk1.8.0_351/jre/lib/security/'
ansible all -m copy -a 'src=/opt/UnlimitedJCEPolicyJDK8/US_export_policy.jar dest=/usr/local/jdk1.8.0_351/jre/lib/security/'
重启ambari server
ambari-server restart
ambari-server status
(2)启用Kerberos
确认相关准备工作是否完成,并勾选
安装方式说明:
选项 | 说明 |
---|---|
Using an existing MIT KDC | Ambari服务器和集群主机都可以通过网络访问KDC和KDC管理主机。手头有KDC管理凭证。 |
Install a new MIT KDC | 安装一个新的MIT KDC |
Using an existing IPA | 使用现有的IPA |
Using an existing AD | Ambari服务器和集群主机可以通过网络访问域控制器,并能够解析域控制器的DNS名称。已配置LDAP连接。服务主体的Active Directory用户容器已经创建并准备就绪。例如,“OU=Hadoop,OU=People,dc=apache,dc=org”在前面提到的用户容器上,Active Directory管理凭据具有“创建、删除和管理用户帐户”的委托控制。 |
Using manual Kerberos setup | 集群主机可以通过网络访问KDC。每个集群主机上都安装了Kerberos客户端实用程序(如kinit)。已经在Ambari服务器主机和集群中的所有主机上设置了Java加密扩展(JCE)。在完成向导之前,Service和Ambari主体将在KDC中手动创建。在完成向导之前,服务和Ambari主体的按键将手动创建并分发到集群主机。 |
配置Kerberos信息
【KDC信息】
KDC hosts:hdp01.hdp.com
Realm name:HDP315.COM
Domains:hdp315.com
【Kadmin】
Kadmin host:hdp01.hdp.com
Admin principal:admin/admin@HDP315.COM
Admin password:lnyd@LNsy115
在集群启用Kerberos后,会自动创建出已安装服务(如zookeeper等)的principal,按照约定:服务账号是principal/instance@REALM格式,用户账号是principal@REALM;后续所有服务的操作(安装/卸载等),都需要用对应的principal来进行认证,以增强安全性,keytab文件存储在/etc/security/keytab/目录下
6.确认开启kerberos后的zk配置
查看zk的server配置,/etc/zookeeper/conf/zookeeper_jaas.conf
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
useTicketCache=false
keyTab="/etc/security/keytabs/zk.service.keytab"
principal="zookeeper/hdp01.hdp.com@HDP315.COM";
};
配置中指定了连接ZooKeeper的principal和keytab要求,因此后面再用客户端zkCLi连接时,需要以此凭证连接
7.常用指令
(1)Kerberos管理员
登录Kerberos server
kadmin.local 用户名
列出所有Kerberos用户
kadmin.local -q listprincs
添加Kerberos用户
kadmin.local -q "addprinc [options] principal"
options主要为
-randkey:随机生成一个值作为principal的key
-pw:设置密码,此选项一般用在脚本中
修改Principal用户信息
kadmin.local -q "modprinc [options] principal"
修改Principal密码
kadmin.local -q "change_password [-randkey] [-keepold] [-e keysaltlist] [-pw password] principal"
删除Principal信息
kadmin.local -q "delete_principal [-force] principal"
生成keytab认证文件
kadmin.local -q "ktadd [-k[eytab] keytab] [-q] [-e keysaltlist] [-norandkey] [principal | -glob princ-exp]"
(2)Kerberos普通用户
获取票据credentials
klist
列出所有的Kerberos票据credentials信息
klist -k /root/tenant5.keytab
更新Kerberos票据credentials信息,更新后可以看到Expires时间发生变化
kinit -R -kt keytab principal
销毁kerberos票据credentials
kdestroy