技术连载系列,前面内容请参考前面连载10内容:Kerberos安全认证-连载10-Hive Kerberos 安全配置及访问_IT贫道的博客-CSDN博客
大数据组件HBase也可以通过Kerberos进行安全认证,由于HBase中需要zookeeper进行元数据管理、主节点选举、故障恢复,所以这里对HBase进行Kerberos安全认证时,建议也对Zookeeper进行安全认证。
1. Zookeeper Kerberos配置
zookeeper集群节点分布如下:
节点IP | 节点名称 | Zookeeper |
192.168.179.4 | node1 | |
192.168.179.5 | node2 | |
192.168.179.6 | node3 | ★ |
192.168.179.7 | node4 | ★ |
192.168.179.8 | node5 | ★ |
目前启动zookeeper集群后,可以通过任意Zookeeper客户端操作Zookeeper,可以通过Kerberos对Zookeeper进行认证避免非认证用户操作Zookeeper。按照如下步骤进行zookeeper kerberos认证。
1) 创建zookeeper Princial服务主体
在node1节点执行如下命令创建zookeeper Princial服务主体。
[root@node1 ~]# kadmin.local -q “addprinc -pw 123456 zookeeper/node3”
[root@node1 ~]# kadmin.local -q “addprinc -pw 123456 zookeeper/node4”
[root@node1 ~]# kadmin.local -q “addprinc -pw 123456 zookeeper/node5”
2) 将zookeeper服务主体写入到keytab文件
在node1节点执行如下命令,将zookeeper服务主体写入到keytab文件:
[root@node1 ~]# kadmin.local -q “ktadd -norandkey -kt /home/keytabs/zookeeper.service.keytab zookeeper/node3@EXAMPLE.COM”
[root@node1 ~]# kadmin.local -q “ktadd -norandkey -kt /home/keytabs/zookeeper.service.keytab zookeeper/node4@EXAMPLE.COM”
[root@node1 ~]# kadmin.local -q “ktadd -norandkey -kt /home/keytabs/zookeeper.service.keytab zookeeper/node5@EXAMPLE.COM”
以上命令执行完成后,可以在node1节点/home/keytabs目录下生成zookeeper.service.keytab文件。
3) 将keytab文件分发到其他节点并修改权限
这里将node1节点生成的zookeeper.service.keytab文件分发到node2~node5节点,这里也可以直接分发到zookeeper服务所在节点,为了保持集群各个节点keytab文件一致,这里将该keytab文件分发到集群各个节点中。
#在node1节点中执行如下命令进行分发
[root@node1 ~]# scp /home/keytabs/zookeeper.service.keytab node2:/home/keytabs/
[root@node1 ~]# scp /home/keytabs/zookeeper.service.keytab node3:/home/keytabs/
[root@node1 ~]# scp /home/keytabs/zookeeper.service.keytab node4:/home/keytabs/
[root@node1 ~]# scp /home/keytabs/zookeeper.service.keytab node5:/home/keytabs/
分发到node2~node5各个节点后,执行如下命令对zookeeper.service.keytab修改权限。
#node1~node5所有节点执行如下命令
chown root:hadoop /home/keytabs/zookeeper.service.keytab
chmod 770 /home/keytabs/zookeeper.service.keytab
4) 配置zoo.cfg文件
在node3~node5 zookeeper节点上配置zoo.cfg配置文件,每个节点在该文件最后追加如下配置:
kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
jaasLoginRenew=3600000
sessionRequireClientSASLAuth=false
skipACL=yes
以上配置项的解释如下:
- kerberos.removeHostFromPrincipal
kerberos认证时是否从Principal中移除主机名部分。
- kerberos.removeRealmFromPrincipal
kerberos认证时是否从Principal中移除领域(Realm)部分。
- authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
指定ZooKeeper对客户端进行身份验证时使用的身份验证类。
- jaasLoginRenew
Jaas登录(Java Authentication and Authorization Service)的续约时间,这里是每隔1小时需要续约Jaas登录。
- sessionRequireClientSASLAuth
是否要求客户端进行SASL认证,SASL(Simple Authentication and Security Layer)认证是一种安全机制,用于在客户端和服务器之间进行身份验证和加密通信。当设置为要求客户端进行SASL认证时,客户端必须提供有效的凭证(如用户名和密码)来证明其身份,并与ZooKeeper服务器进行安全的通信。
这里需要将该值设置为false,否则Hadoop HA 不能正常启动。
- skipACL=yes
跳过Zookeeper 访问控制列表(ACL)验证,允许连接zookeper后进行读取和写入。这里建议跳过,否则配置HBase 启动后不能向Zookeeper中写入数据。
这里在node3节点进行zoo.cfg文件的配置,配置完成后,将zoo.cfg文件分发到node4、node5 zookeeper节点上。
[root@node3 ~]# scp /software/apache-zookeeper-3.6.3-bin/conf/zoo.cfg node4:/software/apache-zookeeper-3.6.3-bin/conf/
[root@node3 ~]# scp /software/apache-zookeeper-3.6.3-bin/conf/zoo.cfg node5:/software/apache-zookeeper-3.6.3-bin/conf/
5) 配置jaas.conf文件
在node3~node5各个zookeeper节点中ZOOKEEPER_HOME/conf/目录下创建jaas.conf文件,该文件用于zookeeper服务端与客户端进行认证。配置内容如下:
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/zookeeper.service.keytab”
storeKey=true
useTicketCache=false
principal=“zookeeper/node3@EXAMPLE.COM”;
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/zookeeper.service.keytab”
storeKey=true
useTicketCache=false
principal=“zookeeper/node3@EXAMPLE.COM”;
};
以上配置文件是在node3 zookeeper节点配置,将以上文件分发到node4、node5节点后,需要将principal修改成对应节点的信息。
node4 zookeeper节点jaas.conf配置如下:
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/zookeeper.service.keytab”
storeKey=true
useTicketCache=false
principal=“zookeeper/node4@EXAMPLE.COM”;
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/zookeeper.service.keytab”
storeKey=true
useTicketCache=false
principal=“zookeeper/node4@EXAMPLE.COM”;
};
node5 zookeeper节点jaas.conf配置如下:
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/zookeeper.service.keytab”
storeKey=true
useTicketCache=false
principal=“zookeeper/node5@EXAMPLE.COM”;
};
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/zookeeper.service.keytab”
storeKey=true
useTicketCache=false
principal=“zookeeper/node5@EXAMPLE.COM”;
};
6) 配置java.env文件
在zookeeper各个节点ZOOKEEPER_HOME/conf目录下创建java.env文件,写入如下内容,这里在node3~node5各个节点都需配置。
#指定jaas.conf文件路径
export JVMFLAGS=“-Djava.security.auth.login.config=/software/apache-zookeeper-3.6.3-bin/conf/jaas.conf”
以上可以先在node3节点进行配置,然后分发到node4~node5节点上。如下:
[root@node3 ~]# scp /software/apache-zookeeper-3.6.3-bin/conf/java.env node4:/software/apache-zookeeper-3.6.3-bin/conf/
[root@node3 ~]# scp /software/apache-zookeeper-3.6.3-bin/conf/java.env node5:/software/apache-zookeeper-3.6.3-bin/conf/
7) 启动zookeeper
在node3~node5各个节点执行如下命令,启动zookeeper。
#启动zookeeper
zkServer.sh start
#检查zookeeper状态
zkServer.sh status
2. HBase配置Kerberos
HBase也支持Kerberos安全认证,经过测试,HBase2.5.x版本在经过Kerberos认证后与Hadoop通信认证有异常,具体报错如下:
hdfs.DataStreamer: Exception in createBlockOutputStream java.io.IOException: Invalid token in javax.security.sasl.qop: DI
这里建议使用HBase2.5.x以下版本与kerberos进行整合,但HBase版本的选择也需要参考Hadoop的版本,可以在Hbase官网找到Hadoop版本匹配的HBase版本,地址为:https://hbase.apache.org/book.html#hadoop
我们这里使用的Hadoop版本为3.3.4,HBase版本选择2.2.6版本。HBase Kerberos安全认证配置步骤如下:
1) 创建HBase服务用户并两两节点进行免密
在Hadoop体系中操作HBase时通常使用hbase用户,这里在集群各个节点创建hbase用户并设置在HBase用户下,节点之间的免密。
在node1~node5节点创建hbase用户,所属hadoop组。
#这里设置用户密码为123456
useradd hbase -g hadoop
passwd hbase
各个节点切换到hbase用户,并设置各个节点两两免密。
#所有节点切换成hbase用户
su hbase
cd ~
#node1~node5所有节点生成SSH密钥
ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
#node1~node5所有节点公钥复制到node1节点上,这个过程需要输入yes和密码
ssh-copy-id node1
#将node1 authorized_keys文件分发到node1~node5各节点,这个过程需要输入密码
[hbase@node1 ~]$ cd ~/.ssh/
[hbase@node1 .ssh]$ scp authorized_keys node2:pwd
[hbase@node1 .ssh]$ scp authorized_keys node3:pwd
[hbase@node1 .ssh]$ scp authorized_keys node4:pwd
[hbase@node1 .ssh]$ scp authorized_keys node5:pwd
#两两节点进行ssh测试,这一步骤必须做,然后node1~node5节点退出当前hbase用户
exit
2) 创建HBase服务Princial主体并写入到keytab文件
在kerberos服务端node1节点执行如下命令创建HBase服务主体:
[root@node1 ~]# kadmin.local -q “addprinc -pw 123456 hbase/node3”
[root@node1 ~]# kadmin.local -q “addprinc -pw 123456 hbase/node4”
[root@node1 ~]# kadmin.local -q “addprinc -pw 123456 hbase/node5”
在kerberos服务端node1节点执行如下命令将hbase主体写入到keytab文件:
#node1节点执行命令,将主体写入到keytab
[root@node1 ~]# kadmin.local -q “ktadd -norandkey -kt /home/keytabs/hbase.service.keytab hbase/node3@EXAMPLE.COM”
[root@node1 ~]# kadmin.local -q “ktadd -norandkey -kt /home/keytabs/hbase.service.keytab hbase/node4@EXAMPLE.COM”
[root@node1 ~]# kadmin.local -q “ktadd -norandkey -kt /home/keytabs/hbase.service.keytab hbase/node5@EXAMPLE.COM”
以上命令执行完成后,在node1节点/home/keytabs目录下生成hbase.service.keytab文件,将该文件分发到各个节点并赋权,这里可以只发送到node3~node5 Hbase所在节点,为了保证各个大数据集群节点的keytabs一致,这里分发到所有节点。
[root@node1 ~]# scp /home/keytabs/hbase.service.keytab node2:/home/keytabs/
[root@node1 ~]# scp /home/keytabs/hbase.service.keytab node3:/home/keytabs/
[root@node1 ~]# scp /home/keytabs/hbase.service.keytab node4:/home/keytabs/
[root@node1 ~]# scp /home/keytabs/hbase.service.keytab node5:/home/keytabs/
分发完成后,在集群各个节点上执行如下命令,修改hbase.service.keytab密钥文件所属用户和组信息:
chown root:hadoop /home/keytabs/hbase.service.keytab
chmod 770 /home/keytabs/hbase.service.keytab
3) 修改hbase-site.xml配置文件
在所有hbase节点中修改HBASE_HOME/conf/hbase-site.xml文件内容,配置支持kerberos,向hbase-site.xml文件中追加如下内容:
hbase.security.authorization true hbase.security.authentication kerberos hbase.master.kerberos.principal hbase/_HOST@EXAMPLE.COM hbase.master.keytab.file /home/keytabs/hbase.service.keytab hbase.regionserver.kerberos.principal hbase/_HOST@EXAMPLE.COM hbase.regionserver.keytab.file /home/keytabs/hbase.service.keytab这里可以先在node3节点进行配置,配置完成后分发到node4、node5节点:
[root@node3 ~]# scp /software/hbase-2.2.6/conf/hbase-site.xml node4:/software/hbase-2.2.6/conf/
[root@node3 ~]# scp /software/hbase-2.2.6/conf/hbase-site.xml node5:/software/hbase-2.2.6/conf/
4) 准备hdfs-site.xml和core-site.xml文件
HBase底层存储使用HDFS,这里需要将Hadoop中hdfs-site.xml和core-site.xml文件发送到hbase各个节点HBASE_HOME/conf/目录中。在node3~node5各个HBase节点中执行如下命令:
#node3~node5各个节点执行
cp /software/hadoop-3.3.4/etc/hadoop/hdfs-site.xml /software/hbase-2.2.6/conf/
cp /software/hadoop-3.3.4/etc/hadoop/core-site.xml /software/hbase-2.2.6/conf/
5) 准备zk-jaas.conf文件
HBase中会使用zookeeper管理元数据和选主,这里由于Zookeeper中已经开启了Kerberos认证,所以需要准备zk-jaas.conf文件连接zookeeper时进行认证。在HBase各个节点HBASE_HOME/conf目录下创建zk-jaas.conf文件,写入如下内容,不同的节点设置的principal是对应HBase主机节点。
node3节点HBASE_HOME/conf/zk-jaas.conf文件内容:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/hbase.service.keytab”
useTicketCache=false
principal=“hbase/node3@EXAMPLE.COM”;
};
node4节点HBASE_HOME/conf/zk-jaas.conf文件内容:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/hbase.service.keytab”
useTicketCache=false
principal=“hbase/node4@EXAMPLE.COM”;
};
node5节点HBASE_HOME/conf/zk-jaas.conf文件内容:
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=“/home/keytabs/hbase.service.keytab”
useTicketCache=false
principal=“hbase/node5@EXAMPLE.COM”;
};
6) 修改hbase-env.sh配置
在各个hbase节点上配置HBASE_HOME/conf/hbase-env.sh,将HBASE_OPTS选项修改为如下:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
😝朋友们如果有需要的话,可以联系领取~
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
2️⃣视频配套工具&国内外网安书籍、文档
① 工具
② 视频
③ 书籍
资源较为敏感,未展示全面,需要的最下面获取
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
n/e4f9ac066e8c485f8407a99619f9c5b5.png#pic_center)
② 简历模板
因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算