[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选项修改为如下:
#node3~node5各个节点修改hbase-env.sh中的HBASE_OPTS配置
export HBASE_OPTS=“$HBASE_OPTS -XX:+UseConcMarkSweepGC -Djava.security.auth.login.config=/software/hbase-2.2.6/conf/zk-jaas.conf”
7) 修改HBase安装目录权限
在HBase各个节点创建HBASE_HOME/logs目录,如果该目录不存在需要提前创建,存在即可忽略,该目录为HBase日志目录,需要将该目录权限修改为root:hadoop、访问权限为770,否则hbase用户在启动Hbase集群时没有向该目录写日志权限。
#在node3~node5 HBase节点执行命令创建HBASE_HOME/logs
mkdir -p /software/hbase-2.2.6/logs
将各个节点的hbase安装目录权限修改为root:hadoop,logs目录访问权限为770:
#在node3~node5 HBase节点执行命令
chown -R root:hadoop /software/hbase-2.2.6
chmod -R 770 /software/hbase-2.2.6/logs
3. HBase启动及访问验证
在启动HBase集群之前,需要将Zookeeper和HDFS集群重启,Zookeeper和HDFS启动命令如下:
#停止hadoop集群
[root@node1 ~]# stop-all.sh
#node3~node5节点,重启zookeeper
[root@node3 ~]# zkServer.sh restart
[root@node3 ~]# zkServer.sh restart
[root@node3 ~]# zkServer.sh restart
#启动HDFS集群
[root@node1 ~]# start-all.sh
如果没有配置Kerberos认证时HBase之前启动过,在HDFS中将会有/hbase 目录,需要使用hdfs超级管理员用户将该目录的用户和所属组修改成hbase:hadoop。
#在node5节点执行
[root@node5 ~]# su hdfs
[hdfs@node5 ~]$ kinit hdfs
Password for hdfs@EXAMPLE.COM: 123456
[hdfs@node5 logs]$ hdfs dfs -ls /
Found 6 items
drwxr-xr-x - root supergroup 0 2023-05-23 10:50 /hbase
#修改用户和所属组
[hdfs@node5 logs]$ hadoop dfs -chown -R hbase:hadoop /hbase
在HBase主节点node4上执行如下命令启动HBase集群:
#无需切换hbase用户,可以直接在node4节点执行如下命令启动hbase集群
[root@node4 ~]# sudo -i -u hbase start-hbase.sh
注意:以上启动Hbase集群命令中没有切换到hbase用户,sudo为使用超级用户权限执行命令,-i表示交互模式执行命令,-u指定切换的用户。
HBase启动后,可以通过http://node4:16010进行访问:
4. HBase Shell操作HBase
在node3~node5任意节点登录hbase shell,可以看到如果节点没有进行用户认证,读取HBase数据时没有权限:
#假设在node4登录hbase客户端
[root@node4 ~]# klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)
[root@node4 ~]# hbase shell
hbase(main):001:0> list
TABLE
ERROR: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)
如果想要正常读取HBase中的数据需要进行客户端认证,这里以zhangsan用户为例,进行Kerberos主体认证,认证后操作HBase,操作如下:
#进行用户认证
[root@node4 ~]# kinit zhangsan
Password for zhangsan@EXAMPLE.COM: 123456
[root@node4 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: zhangsan@EXAMPLE.COM
#登录hbase shell
[root@node4 ~]# hbase shell
hbase(main):001:0> create ‘person’,‘cf1’,‘cf2’
Created table person
hbase(main):002:0> list
person
hbase(main):003:0> put ‘person’,‘row1’,‘cf1:id’,‘1’
hbase(main):004:0> put ‘person’,‘row1’,‘cf1:name’,‘zs’
hbase(main):005:0> put ‘person’,‘row1’,‘cf1:age’,18
hbase(main):006:0> scan ‘person’
ROW COLUMN+CELL
row1 column=cf1:age, timestamp=1684317908851, value=18
row1 column=cf1:id, timestamp=1684317879179, value=1
row1 column=cf1:name, timestamp=1684317894358, value=zs
5. Java API操作HBase
java API操作经过Kerberos安全认证的HBase按照如下步骤实现即可。
1) 准备krb5.conf文件
将node1 kerberos服务端/etc/krb5.conf文件存放在IDEA项目中的resources资源目录中或者本地Window固定的某个目录中,用于编写代码时指定访问Kerberos的Realm。
2) 生成用户keytab文件
在kerberos服务端node1节点上,执行如下命令,对zhangsan用户主体生成keytab密钥文件。
#在node1 kerberos服务端执行
[root@node1 ~]# kadmin.local -q “ktadd -norandkey -kt /root/zhangsan.keytab zhangsan@EXAMPLE.COM”
以上命令执行之后,在/root目录下会生成zhangsan.keytab文件,将该文件复制到IDEA项目中的resources资源目录中或者本地window固定的某个目录中,该文件用于编写代码时认证kerberos。
3) 准备访问HDFS需要的资源文件
将HDFS中的core-site.xml 、hdfs-site.xml 、yarn-site.xml、hbase-site.xml文件上传到项目resources资源目录中。
4) 编写代码操作********HBase
项目代码中引入如下maven依赖:
org.apache.hbase hbase-server 2.2.6 org.apache.hbase hbase-client 2.2.6编写Java代码操作Kerberos认证的HBase代码如下:
/**
- Java API 操作Kerberos 认证的HBase
*/
public class OperateAuthHBase {
private static Configuration conf;
private static Connection connection;
private static Admin admin;
/**
- 初始化:进行kerberos认证并设置hbase configuration
*/
static {
try {
String principal = “zhangsan@EXAMPLE.COM”;
String keytabPath = “D:\idea_space\KerberosAuth\KerberosAuthHBase\src\main\resources\zhangsan.keytab”;
conf = HBaseConfiguration.create();
// 设置Kerberos 认证
System.setProperty(“java.security.krb5.conf”, “D:\idea_space\KerberosAuth\KerberosAuthHBase\src\main\resources\krb5.conf”);
conf.set(“hadoop.security.authentication”, “kerberos”);
UserGroupInformation.setConfiguration(conf);
UserGroupInformation.loginUserFromKeytab(principal, keytabPath);
//设置zookeeper集群地址及端口号
conf.set(“hbase.zookeeper.quorum”,“node3,node4,node5”);
conf.set(“hbase.zookeeper.property.clientPort”,“2181”);
//创建连接
connection = ConnectionFactory.createConnection(conf);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws IOException {
try{
//获取Admin对象
admin = connection.getAdmin();
//创建表
createHBaseTable(“tbl1”, “cf1”);
System.out.println(“===========================”);
//查看Hbase中所有表
listHBaseTables();
System.out.println(“===========================”);
//向表中插入数据
putTableData(“tbl1”,“row1”, “cf1”, “id”, “100”);
putTableData(“tbl1”,“row1”, “cf1”, “name”, “zs”);
putTableData(“tbl1”,“row1”, “cf1”, “age”, “18”);
putTableData(“tbl1”,“row2”, “cf1”, “id”, “200”);
putTableData(“tbl1”,“row2”, “cf1”, “name”, “ls”);
putTableData(“tbl1”,“row2”, “cf1”, “age”, “19”);
System.out.println(“===========================”);
//查询表中的数据
scanTableData(“tbl1”);
System.out.println(“===========================”);
//查询指定row数据
getRowData(“tbl1”, “row1”,“cf1”,“name”);
System.out.println(“===========================”);
//删除指定row数据
deleteRowData(“tbl1”, “row1”,“cf1”,“name”);
System.out.println(“===========================”);
//查询表中的数据
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-PwmshrRb-1712503427641)]