目录
- 1 连接
- 2 KDC 安装
-
- 2.1 安装 Kerberos 服务
- 2.2 配置 /var/kerberos/krb5kdc/kdc.conf
- 2.3 配置 /var/kerberos/krb5kdc/kadm5.acl
- 2.4 配置 /etc/krb5.conf
- 2.5 创建 Kerberos 数据库
- 2.6 创建 Kerberos 管理员账号
- 2.7 将 Kerberos 添加到自启动服务并启动krb5kdc和kadmin服务
- 2.8 查看认证信息
- 3 Application Server
-
- 3.1 Kerberos 安装
- 3.2 创建应用服务节点 Principals 和 keytab
- 3.3 Apache Hadoop 安装部署
-
- 3.3.1 解压与配置
- 3.3.2 配置 core-site.xml
- 3.3.3 配置 hdfs-site.xml
- 3.3.4 配置 ssl
-
- (1) 生成所需的认证文件
- (2) 配置 ssl-client.xml
- (3) 配置 ssl-server.xml
- 3.3.5 配置 mapred-site.xml
- 3.3.6 配置 yarn-site.xml
- 3.3.7 初始化 Hadoop 及启停
- 3.3.8 测试和常用命令
- 3.4 Apache Hive 安装部署
-
- 3.4.1 配置前
- 3.4.2 修改hive-env.sh
- 3.4.3 修改hive-site.xml
- 3.4.4 初始化 Hive及启动
- 3.4.5 中文注释乱码
- 3.4.6 小例子
- 4 Client
-
- 4.1 Windows 环境Kerberos 环境
- 4.2 Linux 环境Kerberos 环境
- 4.3 DBeaver
-
- 4.3.1 下载及解压
- 4.3.2 修改 dbeaver.ini
- 4.3.3 获取 hive 驱动 - 通过 Maven 项目导出Hive JDBC 驱动包
- 4.3.4 获取 hive 驱动 - 下载通用Hive驱动包
- 4.3.5 Clock skew too great(37) - PROCESS_TGS
- 4.4 Kettle
-
- 4.1.1 版本说明
- 4.4.2 下载及其大数据插件配置
- 4.4.3 修改Kettle 启动脚本
- 4.4.4 连接 Hive
1 连接
- 我的 blog Kerberos集成和使用简介、安装和其他服务
- Kerberos 快速入手指南官方文档翻译 A guided tour of Kerberos: Tutorial
- Hadoop and Kerberos: The Madness beyond the Gate
- Hadoop in Secure Mode
以下安装主要以此图为总领分类部署
2 KDC 安装
系统依赖部分
yum install -y libss # 在安装 krb5-server 报 libverto-module-base is needed by krb5-server-1.15.1-46.el7.x86_64 时安装 yum install -y libverto-libevent yum install -y logrotate
2.1 安装 Kerberos 服务
# 1 检查环境是否已安装 Kerberos rpm -qa | grep -E "krb5|libkadm5" # 删除时需要格外注意,为了版本统一一致,最好进行升级安装, # Kerberos 和 SSH 有些库是共用的,删除后可能会导致 SSH 不能使用,确实有些库文件 # 如果是 Docker 宿主机的文件可以通过下面的命令复制到容器中,并根据提示找到缺失的文件 # docker cp /usr/lib64/libss.so.2.0 dev_mysql_v1:/usr/lib64/libss.so.2.0 # rpm -e --nodeps xxx # 2 安装 Kerberos 依赖的包 ## 检查环境是否存在 words,若无安装 ## 因为有些应用程序或数据库会用这个来检查单词的拼写,或者密码检查员会用这个来检查错误的密码。 rpm -qa | grep words ## 安装 words wget http://mirror.centos.org/centos/7/os/x86_64/Packages/words-3.0-22.el7.noarch.rpm ## 成功安装后会有 /usr/share/dict/words 有一个词文件。 rpm -ivh words-3.0-22.el7.noarch.rpm # 2 下载所需包 # CentOS 7.8.2003 默认版本为 krb5-libs-1.15.1-46 wget http://mirror.centos.org/centos/7/os/x86_64/Packages/krb5-libs-1.15.1-46.el7.x86_64.rpm wget http://mirror.centos.org/centos/7/os/x86_64/Packages/krb5-server-1.15.1-46.el7.x86_64.rpm wgethttp://mirror.centos.org/centos/7/os/x86_64/Packages/krb5-workstation-1.15.1-46.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/libkadm5-1.15.1-46.el7.x86_64.rpm
# 3 安装
rpm -iUh krb5-libs-1.15.1-46.el7.x86_64.rpm
rpm -ivh libkadm5-1.15.1-46.el7.x86_64.rpm
rpm -ivh krb5-workstation-1.15.1-46.el7.x86_64.rpm
rpm -ivh krb5-server-1.15.1-46.el7.x86_64.rpm
2.2 配置 /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
YORE.COM = {
# JDK 8 (至少在 jdk 1.8 _152 之前的)可能不支持,如果使用中发现异常:java.security.InvalidKeyException: Illegal key size,
# 方法1,可以将 aes256-cts 去点,保留 aes128-cts
# 方法2,或者下载官方提供的 jce_policy-8.zip 包,解压后将 local_policy.jar 和 US_export_policy.jar 覆盖JDK安装目录下的 jre\lib\security 下的两个文件
# 每个版本的路径可能稍微有差别,只要找到 unlimited 下的
# 下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
# https://www.oracle.com/java/technologies/javase-jce-all-downloads.html
#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
max_renewable_life = 7d 0h 0m 0s
#supported_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
supported_enctypes = 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
}
2.3 配置 /var/kerberos/krb5kdc/kadm5.acl
Realme 改为上面配置的名字 YORE.COM
。这样名称匹配 */admin@YORE.COM
的都会认为 ,权限是 *
,代表全部权限。
*/admin@YORE.COM *
2.4 配置 /etc/krb5.conf
其中 kdc.yore.com
为 KDC 服务的主机名,端口缺省时默认为 88,admin_server 端口缺省时默认为 749。
# 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]
default_realm = YORE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
#rdns = false
#pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
#default_ccache_name = KEYRING:persistent:%{uid}
udp_preference_limit = 1
kdc_timeout = 3000
[realms]
YORE.COM = {
kdc = yore.bigdata03.com:88
admin_server = yore.bigdata03.com:749
default_domain = YORE.COM
}
[domain_realm]
.yore.bigdata03.com = YORE.COM
yore.bigdata03.com = YORE.COM
2.5 创建 Kerberos 数据库
# 1 创建/初始化 Kerberos database
# 当遇到问题,可能需要执行: /usr/sbin/kdb5_util -r CDH.COM -m destory -f。
# 删除 /var/kerberos/krb5kdc/principal*
#
# 期间会要求输入密码。kdc123
/usr/sbin/kdb5_util create -s -r YORE.COM
# 2 查看生成的文件
# 前两个是我们前两步设置的,后面的 principal* 就是本次生成的
[root@kdc download]# ll /var/kerberos/krb5kdc/
total 24
-rw-r--r-- 1 root root 19 Mar 25 21:41 kadm5.acl
-rw-r--r-- 1 root root 488 Mar 25 21:42 kdc.conf
-rw------- 1 root root 8192 Mar 25 21:40 principal
-rw------- 1 root root 8192 Mar 25 21:40 principal.kadm5
-rw------- 1 root root 0 Mar 25 21:40 principal.kadm5.lock
-rw------- 1 root root 0 Mar 25 21:40 principal.ok
2.6 创建 Kerberos 管理员账号
# 这里会提示时输入管理员的密码(kdc123),再次确认,未报错则创建成功。
[root@kdc download]# /usr/sbin/kadmin.local -q "addprinc admin/admin@YORE.COM"
Authenticating as principal root/admin@YORE.COM with password.
WARNING: no policy specified for admin/admin@YORE.COM; defaulting to no policy
Enter password for principal "admin/admin@YORE.COM":
Re-enter password for principal "admin/admin@YORE.COM":
Principal "admin/admin@YORE.COM" created.
2.7 将 Kerberos 添加到自启动服务,并启动krb5kdc和kadmin服务
# 自启
systemctl enable krb5kdc
systemctl enable kadmin
# 启动
systemctl start krb5kdc
systemctl start kadmin
# 状态
systemctl status krb5kdc
systemctl status kadmin
2.8 查看认证信息
# 1 提示输入密码时,输入 admin 的密码(Kerberos 管理员账号的密码: kdc123)
[root@kdc download]# kinit admin/admin@YORE.COM
Password for admin/admin@YORE.COM:
# 2 查看所有的 Principal
/usr/sbin/kadmin.local -q "listprincs"
# klist
[root@kdc download]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@YORE.COM
Valid starting Expires Service principal
2020-07-04T11:18:24 2020-07-05T11:18:24 krbtgt/YORE.COM@YORE.COM
renew until 2020-07-11T11:18:24
3 Application Server
应用服务这里可以指代开启了 Kerberos 认证的大数据平台或者开启了 Kerberos 认证的大数据集群环境,这里主要介绍搭建一个带有 Kerberos 认证的 Apache Hadoop 和 Apache Hive ,因此这里的应用服务主要表示 Hadoop 和 Hive 所在的服务节点环境。
3.1 Kerberos 安装
# 1 资源
scp -P 30021 -r krb5-libs-1.15.1-46.el7.x86_64.rpm krb5-workstation-1.15.1-46.el7.x86_64.rpm \
libkadm5-1.15.1-46.el7.x86_64.rpm root@cdh3:/opt/download/
# 安装
rpm -iUh krb5-libs-1.15.1-46.el7.x86_64.rpm
rpm -ivh libkadm5-1.15.1-46.el7.x86_64.rpm
rpm -ivh krb5-workstation-1.15.1-46.el7.x86_64.rpm
# 将 KDC 的 /etc/krb5.conf 拷贝到应用服务节点 /etc/ 下
scp /etc/krb5.conf root@bigdata01:
3.2 为应用服务节点创建 Principals 和 keytab
【说明】:这里为了简化,Hadoop 所有服务和 Hive 的服务都统一使用一个principal 主体和 一个 keytab 文件,真实生产环境最好每个服务对应一个principal,安装配置流程基本类似。
# 1 KDC 服务节点生成一个 hadoop 主体(kdc123)
/usr/sbin/kadmin.local -q "addprinc hadoop/bigdata01@YORE.COM"
# 2 导入 keytab 文件
/usr/sbin/kadmin.local -q "xst -k ./hadoop.keytab hadoop/bigdata01@YORE.COM"
# 3 将 hadoop.keytab 发送到 Hadoop 节点(这一步下调到下一步解压 Hadoop 后执行)
scp -P 22 hadoop.keytab root@bigdata01:/opt/installed/hadoop-3.0.3/etc/hadoop/
# 4 查看导入的 keytab 文件(注意文件权限)
/usr/bin/klist -ket /opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab
# 5 创建一个 Hadoop 应用用户,例如 hdfs 用户。下面均以此用户操作
useradd -s /bin/bash hdfs
# 设置密码
passwd hdfs
# 5 在 Hadoop 各节点获取缓存票据。那个用户操作 hadoop,那个用户执行认证
kinit -kt /opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab hadoop/bigdata01@YORE.COM
# 6 查看票据
klist
3.3 Apache Hadoop 安装部署
3.3.1 解压与配置
# 1 下载
wget http://archive.apache.org/dist/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz
# 2 解压
tar -zxf hadoop-3.0.3.tar.gz -C /opt/installed
# 为了节省空间,当不查看 Hadoop 文档是,可以删除掉
rm -rf /opt/installed/hadoop-3.0.3/share/doc
# 3 SSH
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub hdfs@bigdata01
# 4 配置环境变量(可以配置到用户环境变量下: vim ~/.bash_profile)
# set hadoop environment
export HADOOP_HOME=/opt/installed/hadoop-3.0.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 5 创建所需文件夹
# root 用户创建,在将 /u01/hadoop 属组改为 hdfs
mkdir -p /u01/hadoop/dfs/dn
mkdir -p /u01/hadoop/dfs/nn
mkdir -p /u01/hadoop/dfs/snn
#mkdir -p /u01/hadoop/yarn/container-logs
#mkdir -p /u01/hadoop/yarn/container-executor
#mkdir -p /u01/hadoop/app/tmp/nm-local-dir
chown -R hdfs:hdfs /u01/hadoop
# 6 配置 hadoop-env.sh
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
### 添加如下配置 ####
export JAVA_HOME=/usr/local/jdk1.8.0_231
export HADOOP_HOME=/opt/installed/hadoop-3.0.3
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
## 配置用户信息,如果是 root 用户启动,需要配置为 root;
#export HDFS_NAMENODE_USER=root
#export HDFS_DATANODE_USER=root
#export HDFS_SECONDARYNAMENODE_USER=root
#export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
3.3.2 配置 core-site.xml
vim $HADOOP_HOME/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata01:8020</value>
</property>
<!-- 设置垃圾回收的时间,0为禁止,单位分钟数 -->
<property>
<name>fs.trash.interval</name>
<value>60</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hdfs.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hdfs.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
</property>
<!-- 开启 Kerberos -->
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>true</value>
</property>
<property>
<name>hadoop.rpc.protection</name>
<value>authentication</value>
</property>
<!--<property> <name>hadoop.security.auth_to_local</name> <value>DEFAULT</value> <description>Maps kerberos principals to local user names</description> </property>-->
<property>
<name>hadoop.security.auth_to_local</name>
<value>
RULE:[2:$1/$2@$0](hadoop/.*@YORE.COM)s/.*/hdfs/
RULE:[2:$1/$2@$0](hadoop/.*@YORE.COM)s/.*/yarn/
RULE:[2:$1/$2@$0](hadoop/.*@YORE.COM)s/.*/mapred/
DEFAULT
</value>
</property>
</configuration>
3.3.3 配置 hdfs-site.xml
# 1 这里需要注意的是 Centos 7 非 root 用户无法使用 1024 一下的端口
## 方式一:修改为 1024 以上的端口
## 方式二:端口重定向
yum install iptables-services
# 查看现有的iptables 规则
iptables -L -n
# 可以关闭防火强,或者可以开启端口
# 将端口 x 重定向到 xx
iptables -t nat -A PREROUTING -p tcp --dport x -j REDIRECT --to-port xx
# 保存
iptables-save > /etc/sysconfig/iptables
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///u01/hadoop/dfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///u01/hadoop/dfs/dn</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///u01/hadoop/dfs/snn</value>
</property>
<!--block的副本数,默认为3-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<!-- Kerberos -->
<!-- 1 SSL -->
<property>
<name>dfs.http.policy</name>
<value>HTTPS_ONLY</value>
</property>
<property>
<name>dfs.namenode.https-address</name>
<value>bigdata01:9871</value>
</property>
<!--<property> <name>dfs.https.enable</name> <value>true</value> </property>-->
<!-- 2 NameNode -->
<property>
<name>dfs.namenode.http-address</name>
<value>bigdata01:50070</value>
</property>
<property>
<name>dfs.block.access.token.enable</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.kerberos.principal</name>
<value>hadoop/_HOST@YORE.COM</value>
</property>
<property>
<name>dfs.namenode.keytab.file</name>
<value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value>
</property>
<property>
<name>dfs.namenode.kerberos.internal.spnego.principal</name>
<value>hadoop/_HOST@YORE.COM</value>
</property>
<!-- 3 Secondary NameNode -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>bigdata01:9868</value>
</property>
<property>
<name>dfs.secondary.https.address</name>
<value>bigdata01:9869</value>
</property>
<property>
<name>dfs.secondary.namenode.keytab.file</name>
<value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value>
</property>
<property>
<name>dfs.secondary.namenode.kerberos.principal</name>
<value>hadoop/_HOST@YORE.COM</value>
</property>
<property>
<name>dfs.secondary.namenode.kerberos.internal.spnego.principal</name>
<value>hadoop/_HOST@YORE.COM</value>
</property>
<!-- 4 JournalNode -->
<!--<property> <name>dfs.journalnode.kerberos.principal</name> <value>hadoop/_HOST@YORE.COM</value> </property> <property> <name>dfs.journalnode.keytab.file</name> <value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value> </property> <property> <name>dfs.journalnode.kerberos.internal.spnego.principal</name> <value>hadoop/_HOST@YORE.COM</value> </property> <property> <name>dfs.journalnode.https-address</name> <value>bigdata01:8481</value> </property>-->
<!-- 5 DataNode -->
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
<name>dfs.datanode.address</name>
<!--<value>0.0.0.0:1004</value>-->
<value>0.0.0.0:1104</value>
</property>
<property>
<name>dfs.datanode.http.address</name>
<!--<value>0.0.0.0:1006</value>-->
<value>0.0.0.0:1106</value>
</property>
<!-- 支持 SASL -->
<property>
<name>dfs.data.transfer.protection</name>
<value>integrity</value>
</property>
<!--<property> <name>dfs.datanode.https.address</name> <value>0.0.0.0:9865</value> </property>-->
<property>
<name>dfs.datanode.kerberos.principal</name>
<value>hadoop/_HOST@YORE.COM</value>
</property>
<property>
<name>dfs.datanode.keytab.file</name>
<value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value>
</property>
<property>
<name>dfs.encrypt.data.transfer</name>
<value>false</value>
</property>
<!-- 6 WebHDFS -->
<property>
<name>dfs.web.authentication.kerberos.principal</name>
<value>hadoop/_HOST@YORE.COM</value>
</property>
<property>
<name>dfs.web.authentication.kerberos.keytab</name>
<value>/opt/installed/hadoop-3.0.3/etc/hadoop/hadoop.keytab</value>
</property>
</configuration>
3.3.4 配置 ssl
(1) 生成所需认证文件
mkdir /etc/https
cd /etc/https
# 生成ca。会提示输入密码,输入一个大于 6 位的密码(bigdata)
op