CDH6.3.2-组件安装&安全认证

HDFS

1.选择自定义。

2.选择HDFS ZK YARN然后点继续。

3.选择安装的主机。

![](https://img-
blog.csdnimg.cn/72589eb017f1412bb1ceca9a06b4180f.png)4.审核更改默认就行,点继续。

5.配置HDFS的HA。


安装好以后点击hdfs进入实例就能够看到启动了高可用。

6.启动YARN的高可用。

![](https://img-
blog.csdnimg.cn/6818e8afc4d542b5b66d5261f71d9cac.png)![](https://img-
blog.csdnimg.cn/8ca5d0ac0b9a4912bddacfc205becc85.png)

KAFKA

更具需求修改资源

一直点继续就行了

FlUME

HIVE

在/usr/share/java下面有mysql的驱动才行,不然就连接失败,最好所有机器都分发下驱动。

连通成功以后一直点击继续。

SPARK

然后一直点继续就行了。

然后一直点下一步就行。

OOZIE

下面的操作一直点继续安装就行了。

HUE

修改完配置以后记得重启,也就是修改了指定的namenode以后要重启才会生效。

配置负责均衡

![](https://img-
blog.csdnimg.cn/1f4a51ed58f0428da0149395dfe99181.png)然后一直下一步就行了。

FLINK

编译Flink的准备工作

mkdir /opt/software && cd /opt/software
cd /opt/software/
# 下载相关的包
wget https://archive.apache.org/dist/flink/flink-1.13.6/flink-1.13.6-bin-scala_2.11.tgz
wget https://archive.apache.org/dist/flink/flink-1.13.6/flink-1.13.6-src.tgz
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
#安装配置maven
tar -zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/module

vi /etc/profile.d/my_env.sh
##添加以下变量 
#MAVEN_HOME 
export MAVEN_HOME=/opt/module/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

source /etc/profile.d/my_env.sh

mvn -v
cd /opt/module/apache-maven-3.6.3/conf/
rm -rf settings.xml
wget https://cdh6-3-2.oss-cn-hangzhou.aliyuncs.com/cdh/settings.xml

修改Flink源码配置文件

tar -zxvf /opt/software/flink-1.13.6-src.tgz -C /opt/module
cd /opt/module
mv flink-1.13.6/ flink-1.13.6-src
cd /opt/software/
tar -zxvf flink-1.13.6-bin-scala_2.11.tgz -C /opt/module
cd /opt/module/flink-1.13.6-src/
vi /opt/module/flink-1.13.6-src/pom.xml

<!-- 修改hadoop版本 96行 --> 
 
<hadoop.version>3.0.0-cdh6.3.2</hadoop.version> 
<!-- 修改hive版本 149行 --> 
<hive.version>2.1.1-cdh6.3.2</hive.version> 
<!-- 156行 --> 
<hivemetastore.hadoop.version>3.0.0-cdh6.3.2</hivemetastore.hadoop.version> 
<!-- </build>标签之后 </project>之前 添加--> 
<repositories> 
   <repository> 
   <id>cloudera</id> 
   <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
   </repository> 
   <repository> 
      <id>confluent-repo</id>
      <url>https://packages.confluent.io/maven/</url>
   </repository> 
</repositories> 

![](https://img-
blog.csdnimg.cn/cf36cede3bc34e01919bb75547312abb.png)![](https://img-
blog.csdnimg.cn/c50fe1b3631849c5a39a8d9244a6dbb6.png) 下面加到第一个一个build后面就行了

vi /opt/module/flink-1.13.6-src/flink-connectors/flink-sql-connector-hive-2.2.0/pom.xml

<!-- 修改hive-exec版本 48行--> 
<artifactId>hive-exec</artifactId> 
<version>2.1.1-cdh6.3.2</version>

配置MAVEN仓库

cd /opt/module/apache-maven-3.6.3
#选用地址
wget https://vauolab39lsdutji7q2p.oss-cn-zhangjiakou-internal.aliyuncs.com/apache/flink/repository.zip
#备用地址
wget https://cdh6-3-2.oss-cn-hangzhou.aliyuncs.com/cdh/repository.zip
yum -y install unzip
unzip repository.zip
vi /opt/module/apache-maven-3.6.3/conf/settings.xml
<localRepository>/opt/module/apache-maven-3.6.3/repository</localRepository>

编译Flink源码

cd /opt/module/flink-1.13.6-src
mvn clean install -DskipTests -Dfast -Drat.skip=true -Dhaoop.version=3.0.0-cdh6.3.2 -Dinclude-hadoop -Dscala-2.11 -T10C

稍等半个小时以后编译成功了。

考备编译好的包到下载的正式包的lib下面。

cp /opt/module/flink-1.13.6-src/flink-connectors/flink-sql-connector-hive-2.2.0/target/flink-sql-connector-hive-2.2.0_2.11-1.13.6.jar /opt/module/flink-1.13.6/lib/
cp /opt/cloudera/parcels/CDH/jars/hive-exec-2.1.1-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/ 
cp /opt/cloudera/parcels/CDH/jars/libfb303-0.9.3.jar /opt/module/flink-1.13.6/lib/ 
cp /opt/cloudera/parcels/CDH/jars/hadoop-common-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/ 
cp /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-client-common-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/ 
cp /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-client-core-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/
cp /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-client-hs-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/ 
cp /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-client-jobclient-3.0.0-cdh6.3.2.jar /opt/module/flink-1.13.6/lib/
cd /opt/module/flink-1.13.6/lib/

制作parcel包和csd文件

#制作parcel包和csd文件
cd /opt/module
tar -zcvf flink-1.13.6-cdh6.3.2.tgz flink-1.13.6
yum install -y git
cd /opt/module
git clone https://github.com/YUjichang/flink-parcel.git
#加速地址
git clone https://gitclone.com/github.com/YUjichang/flink-parcel.git
cd /opt/module/flink-parcel/
#修改配置文件如下
vi flink-parcel.properties
放目录地址 
FLINK_URL= /opt/module/flink-1.13.6-cdh6.3.2.tgz 
#flink版本号 
FLINK_VERSION=1.13.6 
#扩展版本号 
EXTENS_VERSION=CDH6.3.2 
#操作系统版本,以centos为例 
OS_VERSION=7 
#CDH 小版本 
CDH_MIN_FULL=6.0 
CDH_MAX_FULL=6.4#CDH大版本 
CDH_MIN=5 
CDH_MAX=6

./build.sh parcel
./build.sh csd

CM安装Flink

cd /opt/cloudera/parcel-repo
sz manifest.json
#然后在下载上面生成的manifest.json
# 在hadoop102执行
scp FLINK-1.13.6-CDH6.3.2-el7.parcel* hadoop101:/opt/cloudera/parcel-repo

# 在hadoop101上面的包如下
-rw-r--r-- 1 root         root         2082186246 May  1 17:26 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel
-rw-r--r-- 1 root         root                 40 May  1 17:20 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.sha
-rw-r----- 1 cloudera-scm cloudera-scm      79610 May  2 00:09 CDH-6.3.2-1.cdh6.3.2.p0.1605554-el7.parcel.torrent
-rw-r--r-- 1 root         root          395609370 May  2 12:43 FLINK-1.13.6-CDH6.3.2-el7.parcel
-rw-r--r-- 1 root         root                 40 May  2 12:43 FLINK-1.13.6-CDH6.3.2-el7.parcel.sha
-rw-r--r-- 1 root         root              33892 May  1 17:19 manifest.json

sz manifest.json

#拷贝FLINK_ON_YARN
cd /opt/module/flink-parcel
scp FLINK_ON_YARN-1.13.6.jar hadoop101:/opt/cloudera/csd/ 

[root@hadoop101 csd]# ls
FLINK_ON_YARN-1.13.6.jar

#重启服务
systemctl restart cloudera-scm-server
#查看启动日志
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log

把hadoop102生成的manfest.json放在hadoop101的 manfest.json最下面就行


下面分配完以后点击激活

![](https://img-
blog.csdnimg.cn/f23f12ad44f74e96b71d08bd862d6205.png)![](https://img-
blog.csdnimg.cn/5c0706295df54fae9f85ea97d8816efc.png) 添加服务


下面就出现了flink

![](https://img-
blog.csdnimg.cn/2fc009f7577e4adba968553b28f57555.png)![](https://img-
blog.csdnimg.cn/e25dad339a9d4ca086b632ee9214e72f.png)

然后一直点继续就行了

由于没有监控到Flink服务,重启下CM


直接点击下面的重启不用修改任何配置。


刷新下就行了,或者点进去退出刷新下。

验证Flink是否成功

跑一个per-job
chmod 777 /opt/cloudera/parcels/FLINK/bin/flink
sudo -u hdfs  /opt/cloudera/parcels/FLINK/bin/flink run -t yarn-per-job /opt/cloudera/parcels/FLINK/lib/flink/examples/batch/WordCount.jar

验证Flink SQL
#验证flink sql
/opt/cloudera/parcels/FLINK/bin/flink-sql-client

Kerberos

概念

Kerberos中有以下一些概念需要了解:

(1)KDC:密钥分发中心,负责管理发放票据,记录授权。

(2)Realm:Kerberos管理领域的标识。(领域名)

(3)principal:当每添加一个用户或服务的时候都需要向kdc添加一条principal,principl的形式为:主名称(用户|服务名)/实例名(组|实例名)@领域名。(账户)

(4)主名称:主名称可以是用户名或服务名,表示是用于提供各种网络服务(如hdfs,yarn,hive)的主体。

(5)实例名:实例名简单理解为主机名。

使用的时候不光用户要注册,所使用的服务也要注册。

认证原理

上面的KDS包含AS认证服务器,Database数据库,TGS授权票据服务器。

zhangsan/atguigu是用户主体,hdfs/hadoop102是服务主体。

kinit带有用户主体,他会在Database找有没有对应的用户zhangsan/atguigu.

如果找到了那么就返回一个TGT。得到TGT以后缓存到客户端,这个时候用户认证通过。

用户发送hadoop fs -ls /
就会携带TGT到TGS里面去授权,TGS更具TGT的信息查看是否对应的服务有注册,如果服务有注册,那么就会返回给客户端一个Server
Ticket服务票据。这个时候才能够访问HDFS,这个时候结果才能够返回给客户端。

Apache : 1.用户认证。2.用户主体的注册&服务主体的注册。3. 用户的认证。

CDH:1.用户主体的注册。2.用户的认证。服务主体CDH会自动的创建。

安装

安装
################安装#############
#server安装(hadoop101)
yum install -y krb5-server krb5-workstation krb5-libs
rpm -qa | grep krb5

[root@hadoop101 bin]# rpm -qa | grep krb5
krb5-workstation-1.15.1-55.el7_9.x86_64
krb5-devel-1.15.1-55.el7_9.x86_64
krb5-server-1.15.1-55.el7_9.x86_64
krb5-libs-1.15.1-55.el7_9.x86_64

#client安装(hadoop102,hadoop103,hadoop104,hadoop105)
yum install -y krb5-workstation krb5-libs
rpm -qa | grep krb5

[root@hadoop105 ~]# rpm -qa | grep krb5
krb5-devel-1.15.1-55.el7_9.x86_64
krb5-libs-1.15.1-55.el7_9.x86_64
krb5-workstation-1.15.1-55.el7_9.x86_64
修改kdc配置
##############修改配置###########
#hadoop101
vi /var/kerberos/krb5kdc/kdc.conf

[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 HADOOP.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
  max_life = 1d
  max_renewable_life = 7d
  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
 }

HADOOP.COM:realm名称,Kerberos支持多个realm,一般全用大写。
max_life = 1d: 保存到客户端的TGT的时间。
max_renewable_life = 7d :自动刷新TGT时间,这里配置最多刷新7天。
supported_enctypes:这些是认证的算法,这里配置比原来的少了一个最前面的算法,因为加的话要有对应的依赖包。
krb5文件配置
##############修改配置###########
#hadoop101
vi /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 = HADOOP.COM
 #default_ccache_name = KEYRING:persistent:%{uid}
 udp_preference_limit = 1
[realms]
 HADOOP.COM = {
  kdc = hadoop101
  admin_server = hadoop101
}

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM


udp_preference_limit :禁止使用udp防止返回Hadoop的时候有错误。
default_realm:配置默认域。
ticket_lifetime = 24h 这两个和上面的配置一样的TGT时间。
renew_lifetime = 7d 这两个和上面的配置一样的TGT时间。

分发配置文件

/opt/shell/bin/xsync /etc/krb5.conf
生成Kerberos数据库
##############生成Kerberos数据库###########
#hadoop101
kdb5_util create -s  #后面我输入了123,密码随意记住就行
ls /var/kerberos/krb5kdc/

[root@hadoop101 bin]# ls /var/kerberos/krb5kdc/
kadm5.acl  kdc.conf  principal  principal.kadm5  principal.kadm5.lock  principal.ok

# 赋予Kerberos管理员所有权限
vi /var/kerberos/krb5kdc/kadm5.acl
#修改为以下内容:
*/admin@HADOOP.COM      *

说明:
*/admin:admin实例的全部主体
@HADOOP.COM:realm
*:全部权限
这个授权的意思:就是授予admin实例的全部主体对应HADOOP.COM领域的全部权限。也就是创建Kerberos主体的时候如果实例为admin,就具有HADOOP.COM领域的全部权限,比如创建如下的主体user1/admin就拥有全部的HADOOP.COM领域的权限。
启动Kerberos服务
#########启动Kerberos服务#########
# hadoop101
systemctl start krb5kdc
systemctl start kadmin
systemctl enable krb5kdc
systemctl is-enabled krb5kdc
systemctl enable kadmin
systemctl is-enabled kadmin
登录Kerberos数据库
##############登录Kerberos数据库#################
# 1)本地登录(无需认证),按两下tab键就能够打印所有的命令
kadmin.local 
# 2)远程登录(需进行主体认证)
kadmin
# 3)退出输入:exit

#创建一个admin主体在admin组,输入密码的时候就是刚才初始化Kerberos数据库的123
addprinc admin/admin

kadmin.local:  addprinc admin/admin
WARNING: no policy specified for admin/admin@HADOOP.COM; defaulting to no policy
Enter password for principal "admin/admin@HADOOP.COM": 
Re-enter password for principal "admin/admin@HADOOP.COM": 
Principal "admin/admin@HADOOP.COM" created.
########查看所有的主体#############
listprincs

kadmin.local:  listprincs
K/M@HADOOP.COM
admin/admin@HADOOP.COM
kadmin/admin@HADOOP.COM
kadmin/changepw@HADOOP.COM
kadmin/hadoop101@HADOOP.COM
kiprop/hadoop101@HADOOP.COM
krbtgt/HADOOP.COM@HADOOP.COM

#############为刚才的admin/admin修改密码########### 123 密码随意
cpw admin/admin

##########使用命令行配置###########
kadmin.local -q "addprinc zhangsan/test"
kadmin.local -q "listprincs"

[root@hadoop101 bin]# kadmin.local -q "listprincs"
Authenticating as principal root/admin@HADOOP.COM with password.
K/M@HADOOP.COM
admin/admin@HADOOP.COM
kadmin/admin@HADOOP.COM
kadmin/changepw@HADOOP.COM
kadmin/hadoop101@HADOOP.COM
kiprop/hadoop101@HADOOP.COM
krbtgt/HADOOP.COM@HADOOP.COM
zhangsan/test@HADOOP.COM
Kerberos主体认证

Kerberos提供了两种认证方式,一种是通过输入密码认证,另一种是通过keytab密钥文件认证,但两种方式不可同时使用。

#########################密码认证########################
# 1)使用kinit进行主体认证
kinit admin/admin
# 2)查看认证凭证
klist 

[root@hadoop101 bin]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@HADOOP.COM

Valid starting       Expires              Service principal
05/02/2023 14:32:48  05/03/2023 14:32:48  krbtgt/HADOOP.COM@HADOOP.COM
	renew until 05/09/2023 14:32:48

# 3)销毁认证凭证
kdestroy
[root@hadoop101 bin]# kdestroy
[root@hadoop101 bin]# klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)

#################秘钥认证################################
# 由于认证过程中都需要输入密码。所以我们需要为user用户生成keytab文件,便于后续免密登录,不指定路径的话默认放在当前工作目录,我们指定到“/etc/ security/”下。
# 注意:在生成keytab文件时需要加参数”-norandkey”,否则CDH平台的kerberos密码会重置,会导致直接使用kinit admin/admin初始化时会提示密码错误。

# kadmin.local -q "xst -k /root/admin.keytab admin/admin@HADOOP.COM"  #这种会对于密码进行修改
kadmin.local -q "xst -norandkey -k /root/admin.keytab admin/admin@HADOOP.COM"
kinit -kt /root/admin.keytab admin/admin
klist

[root@hadoop101 bin]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: admin/admin@HADOOP.COM

Valid starting       Expires              Service principal
05/02/2023 14:37:51  05/03/2023 14:37:51  krbtgt/HADOOP.COM@HADOOP.COM
	renew until 05/09/2023 14:37:51
      
kdestroy
CDH启用Kerberos安全认证
#############创建一个cm的用户#########密码随意,我设置了123456
kadmin.local -q "addprinc cloudera-scm/admin"

Kerberos
加密类型:aes128-cts、des3-hmac-sha1、arcfour-hmac。

因为上面已经配置了

后面的就一直继续就行了。

实操

使用hive和hdfs

###############Kerberos安全环境实操######################
# [root@hadoop101 bin]# kdestroy
# [root@hadoop101 bin]# klist
#登录
# kinit admin/admin@HADOOP.COM
#添加主体
# kadmin.local -q "addprinc hive/test@HADOOP.COM" ,kinit hive/test@HADOOP.COM,hadoop fs -ls /(hive/test@HADOOP.COM这个用户也能够访问)
#删除主体
# kadmin.local -q "delprinc hive/test@HADOOP.COM"
# 在启用Kerberos之后,系统与系统(flume-kafka)之间的通讯,以及用户与系统(user-hdfs)之间的通讯都需要先进行安全认证,认证通过之后方可进行通讯。
# 故在启用Kerberos后,数仓中使用的脚本等,均需要加入一步安全认证的操作,才能正常工作。
# 1)在Kerberos数据库中创建用户主体/实例
kadmin.local -q "addprinc hive/hive@HADOOP.COM"
# 2)进行用户认证
kinit hive/hive@HADOOP.COM
# 3)访问HDFS
hadoop fs -ls /

Found 2 items
drwxrwxrwt   - hdfs supergroup          0 2023-01-04 11:26 /tmp
drwxr-xr-x   - hdfs supergroup          0 2023-01-04 11:29 /user
# 4)hive查询
hive 

hive> show databases;
OK
default

使用kafka

# 修改Kafka配置
# 在Kafka的配置项搜索“security.inter.broker.protocol”,设置为SALS_PLAINTEXT

vi /var/lib/hive/jaas.conf
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true;
};

vi /etc/kafka/conf/consumer.properties
security.protocol=SASL_PLAINTEXT
sasl.kerberos.service.name=kafka

export KAFKA_OPTS="-Djava.security.auth.login.config=/var/lib/hive/jaas.conf"

#消费数据
kafka-console-consumer --bootstrap-server hadoop103:9092 --topic topic_start --from-beginning --consumer.config /etc/kafka/conf/consumer.properties
Caused by: javax.security.auth.login.LoginException: Could not login: the client is being asked for a password, but the Kafka client code does not currently support obtaining a password from the user. not available to garner  authentication information from the user
	at com.sun.security.auth.module.Krb5LoginModule.promptForPass(Krb5LoginModule.java:940)
	at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:760)
	at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:617)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
	at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
	at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
	at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
	at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
	at org.apache.kafka.common.security.authenticator.AbstractLogin.login(AbstractLogin.java:60)
	at org.apache.kafka.common.security.kerberos.KerberosLogin.login(KerberosLogin.java:103)
	at org.apache.kafka.common.security.authenticator.LoginManager.<init>(LoginManager.java:61)
	at org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:111)
	at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:149)
	... 8 more
#如果没有进行认证,那么就会报错
kadmin.local -q "addprinc kafka/kafka@HADOOP.COM" , kinit kafka/kafka@HADOOP.COM ,klist , kdestroy
kafka-console-consumer --bootstrap-server hadoop103:9092 --topic topic_start --from-beginning --consumer.config /etc/kafka/conf/consumer.properties


vi /etc/profile.d/my_env.sh
export KAFKA_OPTS="-Djava.security.auth.login.config=/var/lib/hive/jaas.conf"
source /etc/profile.d/my_env.sh

HDFS WebUI浏览器认证

这个要安装火狐,配置东西才能用,用处不太大Hue也能够看,就不配置了。

安全之Sentry权限管理

Apache Sentry是Cloudera公司发布的一个Hadoop开源组件,它提供了细粒度级、基于角色的授权以及多租户的管理模式。

Sentry提供了对Hadoop集群上经过身份验证的用户和应用程序的数据控制和强制执行精确级别权限的功能。Sentry目前可以与Apache
Hive,Hive Metastore / HCatalog,Apache Solr,Impala和HDFS(仅限于Hive表数据)一起使用。

Sentry旨在成为Hadoop组件的可插拔授权引擎。它允许自定义授权规则以验证用户或应用程序对Hadoop资源的访问请求。Sentry是高度模块化的,可以支持Hadoop中各种数据模型的授权。

Sentry中的角色

安装

集成HIVE,YARN,HDFS

配置好以后记得重启相关服务。

#与hive集成(hive)
# 在hive配置项中搜索“HiveServer2 启用模拟”,取消勾选
# 在Hive配置项中搜索“启用数据库中的存储通知”,勾选。
# 在Hive配置项中搜索“Sentry”,勾选Sentry。

#确保hive用户能够提交MR任务(yarn)
# 在yarn配置项中搜索“允许的系统用户”,确保包含“hive”。

#在HDFS配置项中搜索“启用访问控制列表”,勾选。(hdfs)
实战HUE
##############实战###############
#HUE(配置完以后重启)
# 在HUE配置项中搜索“Sentry”,勾选Sentry。

#Sentry
# 在Sentry的配置项中搜索“管理员组”,其中包括hive、impala,只有当某用户所属组位于其中时,才可为其他用户授予权限。

#######添加linux用户#########
# 在Hive集群所有节点创建两个用户reader,writer,为权限测试做准备。
useradd reader
passwd reader

useradd writer
passwd writer

# 使用hive用户登录HUE,创建两个用户组reader、writer,并在两个用户组下创建两个用户reader、writer,为权限测试做准备,并且需要创建hive组,将hive用户添加进hive组。


##########################hadoop101操作######################
#如果不用hive登录
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:User kafka does not have privileges for CREATETABLE)
#先用hive相关用户登录
kdestroy
kadmin.local -q "addprinc hive/hive@HADOOP.COM"
kinit hive/hive@HADOOP.COM
#创建hive表

hive 
create table student(
id string comment '学号',
name string comment '姓名',
sex string comment '性别',
age string comment '年龄'
) comment '学生表';

insert into student values('1','孙悟空','男','100');
insert into student values('2','明世隐','男','101');
insert into student values('3','高渐离','男','102');
insert into student values('4','孙尚香','女','103');
insert into student values('5','安琪拉','女','104');

##########创建表以后只有hive用户可以看到##############

添加角色

由于上面只配置了只能查询student的name,那么查询的时候就只能查询name。

useradd buzhidao

passwd buzhidao

密码buzhidao

hive用户登录,创建 buzhidao 组权限全部和 buzhidao 用户添加到buzhidao组里面然后给表权限

##############linux的密码和HUE的密码相同才行第一次使用的时候##################

Sentry实战之命令行
# 1)在所有节点创建两个用户reader_cmd,writer_cmd
useradd reader_cmd
passwd reader_cmd

useradd writer_cmd
passwd writer_cmd
# 密码都是123456
# 2)使用Sentry管理员用户hive通过beeline客户端连接HiveServer2
kinit hive/hive@HADOOP.COM
beeline -u "jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@HADOOP.COM"
# 3)创建Role(reader_role_cmd,writer_role_cmd)
create role reader_role_cmd;
create role writer_role_cmd;
# 4)为role赋予privilege
GRANT select ON DATABASE default TO ROLE reader_role_cmd;
GRANT insert ON DATABASE default TO ROLE writer_role_cmd;
# 5)将role授予用户组
GRANT ROLE reader_role_cmd TO GROUP reader_cmd;
GRANT ROLE writer_role_cmd TO GROUP writer_cmd;
# 6)查看权限授予情况
# (1)查看所有role(管理员)
SHOW ROLES;

+------------------+
|       role       |
+------------------+
| buzhidao         |
| fasdf            |
| fasdffadsf       |
| reader_role      |
| reader_role_cmd  |
| teset            |
| testetset        |
| writer_role_cmd  |
+------------------+

# (2)查看指定用户组的role(管理员)
SHOW ROLE GRANT GROUP reader_cmd;

+------------------+---------------+-------------+----------+
|       role       | grant_option  | grant_time  | grantor  |
+------------------+---------------+-------------+----------+
| reader_role_cmd  | false         | 0           | --       |
+------------------+---------------+-------------+----------+

# (3)查看当前认证用户的role
SHOW CURRENT ROLES;
# (4)查看指定ROLE的具体权限(管理员)
SHOW GRANT ROLE reader_role_cmd;

+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+----------------+----------+
| database  | table  | partition  | column  |  principal_name  | principal_type  | privilege  | grant_option  |   grant_time   | grantor  |
+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+----------------+----------+
| default   |        |            |         | reader_role_cmd  | ROLE            | SELECT     | false         | 1683019307000  | --       |
+-----------+--------+------------+---------+------------------+-----------------+------------+---------------+----------------+----------+


# 7)权限测试
# (1)为reader_cmd、writer_cmd创建Kerberos主体
kadmin.local -q "addprinc reader_cmd/reader_cmd@HADOOP.COM"
kadmin.local -q "addprinc writer_cmd/writer_cmd@HADOOP.COM"
# (2)使用reader_cmd登录HiveServer2,查询default库下的任意一张表
kinit reader_cmd/reader_cmd@HADOOP.COM
beeline -u "jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@HADOOP.COM"
+-----------+
| tab_name  |
+-----------+
| student   |
+-----------+
1 row selected (0.417 seconds)

select * from student;

+-------------+---------------+--------------+--------------+
| student.id  | student.name  | student.sex  | student.age  |
+-------------+---------------+--------------+--------------+
| 1           | 孙悟空           | 男            | 100          |
| 2           | 明世隐           | 男            | 101          |
| 3           | 高渐离           | 男            | 102          |
| 4           | 孙尚香           | 女            | 103          |
+-------------+---------------+--------------+--------------+


insert into student values('5','安琪拉','女','104');

0: jdbc:hive2://hadoop102:10000/> insert into student values('5','安琪拉','女','104');
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User reader_cmd does not have privileges for QUERY
 The required privileges: Server=server1->Db=default->Table=student->action=insert->grantOption=false; (state=42000,code=40000)

# (3)使用writer_cmd登录HiveServer2,查询gmall库下的任意一张表
kinit writer_cmd/writer_cmd@HADOOP.COM
beeline -u "jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@HADOOP.COM"

insert into student values('5','你好','女','104');
select * from student;

0: jdbc:hive2://hadoop102:10000/> select * from student;
Error: Error while compiling statement: FAILED: SemanticException No valid privileges
 User writer_cmd does not have privileges for QUERY
 The required privileges: Server=server1->Db=default->Table=student->Column=id->action=select->grantOption=false; (state=42000,code=40000)

上面创建的用户类似于下面,这里只是命令行能用,如果现在HUE上面使用,用hive用户直接创建用户和对应的linux密码就行了,因为上面配置了权限和组,所以就不用配置就直接创建用户就可以用了。

useradd reader_cmd
passwd reader_cmd
useradd writer_cmd
passwd writer_cmd

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值