一、介紹
1.1 什么是Ranger
Apache Ranger是一個(gè)用來(lái)在Hadoop平臺(tái)上進(jìn)行監(jiān)控,啟用服務(wù),以及全方位數(shù)據(jù)安全訪問(wèn)管理的安全框架。
Ranger的愿景是在Apache Hadoop生態(tài)系統(tǒng)中提供全面的安全管理。隨著企業(yè)業(yè)務(wù)的拓展,企業(yè)可能在多用戶環(huán)境中運(yùn)行多個(gè)工作任務(wù),這就要求Hadoop內(nèi)的數(shù)據(jù)安全性需要擴(kuò)展為同時(shí)支持多種不同的需求進(jìn)行數(shù)據(jù)訪問(wèn),同時(shí)還需要提供一個(gè)可以對(duì)安全策略進(jìn)行集中管理,配置和監(jiān)控用戶訪問(wèn)的框架。Ranger由此產(chǎn)生!
Ranger的官網(wǎng):https://ranger.apache.org/
1.2 Ranger的目標(biāo)
- 允許用戶使用UI或REST API對(duì)所有和安全相關(guān)的任務(wù)進(jìn)行集中化的管理
- 允許用戶使用一個(gè)管理工具對(duì)操作Hadoop體系中的組件和工具的行為進(jìn)行細(xì)粒度的授權(quán)
- 支持Hadoop體系中各個(gè)組件的授權(quán)認(rèn)證標(biāo)準(zhǔn)
- 增強(qiáng)了對(duì)不同業(yè)務(wù)場(chǎng)景需求的授權(quán)方法支持,例如基于角色的授權(quán)或基于屬性的授權(quán)
- 支持對(duì)Hadoop組件所有涉及安全的審計(jì)行為的集中化管理
1.3 Ranger支持的框架
- Apache Hadoop
- Apache Hive:Hive支持多種模式的鑒權(quán),如自己寫鑒權(quán)代碼,打jar包后放到lib目錄下。這種就沒(méi)有Ranger方便快捷。
- Apache HBase
- Apache Storm
- Apache Knox
- Apache Solr
- Apache Kafka
- YARN
- NIFI
1.4 Ranger工作原理
Ranger主要由三個(gè)組件組成:
Ranger Admin
Ranger的核心是Web應(yīng)用程序,也稱為RangerAdmin模塊,此模塊由管理策略,審計(jì)日志和報(bào)告等三部分組成。管理員角色的用戶可以通過(guò)RangerAdmin提供的web界面或REST APIS來(lái)定制安全策略。您可以創(chuàng)建和更新安全訪問(wèn)策略,這些策略被存儲(chǔ)在數(shù)據(jù)庫(kù)中。各個(gè)組件的Plugin定期對(duì)這些策略進(jìn)行輪詢。這些策略會(huì)由Ranger提供的輕量級(jí)的針對(duì)不同Hadoop體系中組件的插件來(lái)執(zhí)行。插件會(huì)在Hadoop的不同組件的核心進(jìn)程啟動(dòng)后,啟動(dòng)對(duì)應(yīng)的插件進(jìn)程來(lái)進(jìn)行安全管理!Ranger Plugins
Plugin嵌入在各個(gè)集群組件的進(jìn)程里,是一個(gè)輕量級(jí)的Java程序。例如,Ranger對(duì)Hive的組件,就被嵌入在Hiveserver2里。這些Plugin從Ranger Admin服務(wù)端拉取策略,并把它們存儲(chǔ)在本地文件中。當(dāng)接收到來(lái)自組件的用戶請(qǐng)求時(shí),對(duì)應(yīng)組件的Plugin會(huì)攔截該請(qǐng)求,并根據(jù)安全策略對(duì)其進(jìn)行評(píng)估。Ranger UserSync
Ranger提供了一個(gè)用戶同步工具。您可以從Unix或者LDAP中拉取用戶和用戶組的信息。這些用戶和用戶組的信息被存儲(chǔ)在Ranger Admin的數(shù)據(jù)庫(kù)中,可以在定義策略時(shí)使用。

二、源碼編譯
需要從官網(wǎng)下載ranger源碼,通過(guò)maven編譯后進(jìn)行使用。
ranger2.0.0源碼 下載地址
Ranger2.0要求對(duì)應(yīng)的Hadoop為3.x以上,Hive為3.x以上版本,JDK為1.8以上版本!
推薦在Linux 系統(tǒng)上進(jìn)行編譯,比較方便,需要進(jìn)行如下準(zhǔn)備
- 安裝maven-3.6.3(這是ranger2.0.0推薦的maven版本);
- 安裝gcc:yum install -y gcc (需要對(duì)C語(yǔ)言進(jìn)行編譯,如果不安裝,編譯Unix Native Authenticator模塊時(shí)會(huì)報(bào)錯(cuò)找不到gcc命令);
- 安裝python2:如果系統(tǒng)自帶python2,那么直接忽略,如centos7.x;
解壓源碼包,進(jìn)入ranger-2.0.0父項(xiàng)目的路徑下,執(zhí)行如下命令(mvn命令沒(méi)有寫到環(huán)境變量的話需要寫全mvn的路徑)
mvn -DskipTests clean compile package install assembly:assembly
編譯開始,需要等待下載依賴和完成編譯打包,耗時(shí)個(gè)把小時(shí)。如果某一個(gè)模塊編譯出錯(cuò)了,可以單獨(dú)進(jìn)入該模塊進(jìn)行編譯,啟動(dòng)編譯命令時(shí)加上-X參數(shù),顯示debug信息,方便找到錯(cuò)誤。
編譯完成后,可以在父項(xiàng)目的target文件中找到所有組件的壓縮文件
[root@bigdata2 target]# ll
total 1605360
drwxr-xr-x 2 root root 28 Sep 10 15:28 antrun
drwxr-xr-x 2 root root 116 Sep 10 15:40 archive-tmp
drwxr-xr-x 3 root root 22 Sep 10 15:28 maven-shared-archive-resources
-rw-r--r-- 1 root root 248578820 Sep 10 15:37 ranger-2.0.0-admin.tar.gz
-rw-r--r-- 1 root root 249667518 Sep 10 15:38 ranger-2.0.0-admin.zip
-rw-r--r-- 1 root root 27796446 Sep 10 15:39 ranger-2.0.0-atlas-plugin.tar.gz
-rw-r--r-- 1 root root 27832766 Sep 10 15:39 ranger-2.0.0-atlas-plugin.zip
-rw-r--r-- 1 root root 31560169 Sep 10 15:40 ranger-2.0.0-elasticsearch-plugin.tar.gz
-rw-r--r-- 1 root root 31606662 Sep 10 15:40 ranger-2.0.0-elasticsearch-plugin.zip
-rw-r--r-- 1 root root 26643418 Sep 10 15:34 ranger-2.0.0-hbase-plugin.tar.gz
-rw-r--r-- 1 root root 26666456 Sep 10 15:34 ranger-2.0.0-hbase-plugin.zip
-rw-r--r-- 1 root root 23972037 Sep 10 15:33 ranger-2.0.0-hdfs-plugin.tar.gz
-rw-r--r-- 1 root root 23998268 Sep 10 15:33 ranger-2.0.0-hdfs-plugin.zip
-rw-r--r-- 1 root root 23831930 Sep 10 15:33 ranger-2.0.0-hive-plugin.tar.gz
-rw-r--r-- 1 root root 23855462 Sep 10 15:34 ranger-2.0.0-hive-plugin.zip
-rw-r--r-- 1 root root 39940594 Sep 10 15:35 ranger-2.0.0-kafka-plugin.tar.gz
-rw-r--r-- 1 root root 39984673 Sep 10 15:35 ranger-2.0.0-kafka-plugin.zip
-rw-r--r-- 1 root root 90990768 Sep 10 15:38 ranger-2.0.0-kms.tar.gz
-rw-r--r-- 1 root root 91107780 Sep 10 15:39 ranger-2.0.0-kms.zip
-rw-r--r-- 1 root root 28391293 Sep 10 15:34 ranger-2.0.0-knox-plugin.tar.gz
-rw-r--r-- 1 root root 28411851 Sep 10 15:34 ranger-2.0.0-knox-plugin.zip
-rw-r--r-- 1 root root 23947177 Sep 10 15:40 ranger-2.0.0-kylin-plugin.tar.gz
-rw-r--r-- 1 root root 23980871 Sep 10 15:40 ranger-2.0.0-kylin-plugin.zip
-rw-r--r-- 1 root root 34222 Sep 10 15:38 ranger-2.0.0-migration-util.tar.gz
-rw-r--r-- 1 root root 37740 Sep 10 15:38 ranger-2.0.0-migration-util.zip
-rw-r--r-- 1 root root 26393845 Sep 10 15:35 ranger-2.0.0-ozone-plugin.tar.gz
-rw-r--r-- 1 root root 26421956 Sep 10 15:35 ranger-2.0.0-ozone-plugin.zip
-rw-r--r-- 1 root root 40301292 Sep 10 15:40 ranger-2.0.0-presto-plugin.tar.gz
-rw-r--r-- 1 root root 40342416 Sep 10 15:40 ranger-2.0.0-presto-plugin.zip
-rw-r--r-- 1 root root 22234270 Sep 10 15:39 ranger-2.0.0-ranger-tools.tar.gz
-rw-r--r-- 1 root root 22248968 Sep 10 15:39 ranger-2.0.0-ranger-tools.zip
-rw-r--r-- 1 root root 42210 Sep 10 15:38 ranger-2.0.0-solr_audit_conf.tar.gz
-rw-r--r-- 1 root root 45636 Sep 10 15:38 ranger-2.0.0-solr_audit_conf.zip
-rw-r--r-- 1 root root 26974799 Sep 10 15:36 ranger-2.0.0-solr-plugin.tar.gz
-rw-r--r-- 1 root root 27010869 Sep 10 15:36 ranger-2.0.0-solr-plugin.zip
-rw-r--r-- 1 root root 23952172 Sep 10 15:39 ranger-2.0.0-sqoop-plugin.tar.gz
-rw-r--r-- 1 root root 23986865 Sep 10 15:39 ranger-2.0.0-sqoop-plugin.zip
-rw-r--r-- 1 root root 4012596 Sep 10 15:39 ranger-2.0.0-src.tar.gz
-rw-r--r-- 1 root root 6257752 Sep 10 15:39 ranger-2.0.0-src.zip
-rw-r--r-- 1 root root 37239595 Sep 10 15:34 ranger-2.0.0-storm-plugin.tar.gz
-rw-r--r-- 1 root root 37269537 Sep 10 15:34 ranger-2.0.0-storm-plugin.zip
-rw-r--r-- 1 root root 32770865 Sep 10 15:38 ranger-2.0.0-tagsync.tar.gz
-rw-r--r-- 1 root root 32782295 Sep 10 15:38 ranger-2.0.0-tagsync.zip
-rw-r--r-- 1 root root 16260331 Sep 10 15:38 ranger-2.0.0-usersync.tar.gz
-rw-r--r-- 1 root root 16281055 Sep 10 15:38 ranger-2.0.0-usersync.zip
-rw-r--r-- 1 root root 23962337 Sep 10 15:35 ranger-2.0.0-yarn-plugin.tar.gz
-rw-r--r-- 1 root root 23993168 Sep 10 15:35 ranger-2.0.0-yarn-plugin.zip
-rw-r--r-- 1 root root 166727 Sep 10 15:28 rat.txt
-rw-r--r-- 1 root root 5 Sep 10 15:32 version
如果編譯的是ranger-2.2.0源碼,需要安裝phthon3; 且編譯命令不能加assembly:assembly,會(huì)有沖突。
三、部署
3.1 數(shù)據(jù)庫(kù)配置
創(chuàng)建數(shù)據(jù)庫(kù)
mysql> create database ranger;
創(chuàng)建用戶
mysql> grant all privileges on ranger.* to ranger@'%' identified by 'bigdata123';
3.2 安裝組件
3.2.1 RangerAdmin
安裝RangerAdmin
①創(chuàng)建目錄mkdir /opt/module/ranger-2.0.0
解壓ranger-2.0.0-admin.tar.gz到該目錄下
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-admin.tar.gz -C /opt/module/ranger-2.0.0/
②配置文件install.properties
#mysql驅(qū)動(dòng)
SQL_CONNECTOR_JAR=/opt/module/ranger-2.0.0/ranger-2.0.0-admin/mysql-connector-java-5.1.45.jar
#mysql的主機(jī)名和root用戶的用戶名密碼
db_root_user=root
db_root_password=Password@123
db_host=192.168.101.174
#ranger需要的數(shù)據(jù)庫(kù)名和用戶信息,和2.2.1創(chuàng)建的信息要一一對(duì)應(yīng)
db_name=ranger
db_user=ranger
db_password=bigdata123
#其他ranger admin需要的用戶密碼
rangerAdmin_password=bigdata123
rangerTagsync_password=bigdata123
rangerUsersync_password=bigdata123
keyadmin_password=bigdata123
#ranger存儲(chǔ)審計(jì)日志的路徑,默認(rèn)為solr,這里為了方便暫不設(shè)置
audit_store=
#策略管理器的url,rangeradmin安裝在哪臺(tái)機(jī)器,主機(jī)名就為對(duì)應(yīng)的主機(jī)名,不能寫ip
policymgr_external_url=http://bigdata1:6080
#啟動(dòng)ranger admin進(jìn)程的linux用戶信息
unix_user=hxr
unix_user_pwd=bigdata123
unix_group=hxr
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
③切換到用戶root進(jìn)行安裝
./setup.sh
注意:如果使用
sudo ./setup.sh安裝會(huì)找不到JAVA_HOME,但是使用sudo echo ${JAVA_HOME}是可以正常打印的,很奇怪???
④root用戶下軟路由配置文件
只需要執(zhí)行./set_globals.sh就會(huì)自動(dòng)進(jìn)行軟路由
執(zhí)行結(jié)果如下
[root@cos-bigdata-hadoop-01 ranger-2.0.0-admin]# sudo -u -i ranger ./set_globals.sh
usermod:無(wú)改變
[2021/08/03 15:27:25]: [I] Soft linking /etc/ranger/admin/conf to ews/webapp/WEB-INF/classes/conf
啟動(dòng)Ranger Admin
安裝時(shí)會(huì)自動(dòng)將啟動(dòng)腳本放到/usr/bin目錄下,同時(shí)根據(jù)配置的install.properties自動(dòng)生成配置文件ranger-admin-site.xml。
執(zhí)行鏈接命令時(shí)會(huì)將/etc/ranger/admin/conf目錄鏈接到ews/webapp/WEB-INF/classes/conf目錄。
也會(huì)將服務(wù)設(shè)為開機(jī)自啟,所以無(wú)需我們?cè)O(shè)置開機(jī)自啟。
但是自動(dòng)生成的配置文件有兩處錯(cuò)誤,我們需要手動(dòng)修改。
①修改配置文件 /etc/ranger/admin/conf/ranger-admin-site.xml
<property>
<name>ranger.jpa.jdbc.password</name>
<value>bigdata123</value>
<description />
</property>
<property>
<name>ranger.service.host</name>
<value>192.168.101.179</value>
</property>
②啟動(dòng)和關(guān)閉RangerAdmin
ranger-admin start/stop/restart
啟動(dòng)后其后臺(tái)進(jìn)程名為EmbeddedServer
③訪問(wèn)UI
管理員賬號(hào)密碼為admin/bigdata123
http://192.168.101.179:6080
3.2.2 RangerUsersync
安裝
RangerUsersync作為Ranger提供的一個(gè)管理模塊,可以將Linux機(jī)器上的用戶和組信息同步到RangerAdmin的數(shù)據(jù)庫(kù)中進(jìn)行管理。也可以同步LDAP等公司現(xiàn)有的用戶框架體系中的用戶到Ranger Admin中。
①解壓
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-usersync.tar.gz -C /opt/module/ranger-2.0.0/
②修改配置文件install.properties
這里既可以配置同步linux上的用戶,也可以配置同步ldap上的用戶
Ⅰ. 同步linux用戶
#rangeradmin的url
POLICY_MGR_URL =http://192.168.101.179:6080
#同步間隔時(shí)間,單位(分鐘)
SYNC_INTERVAL = 1
#運(yùn)行此進(jìn)程的linux用戶
unix_user=hxr
unix_group=hxr
#rangerUserSync的用戶密碼,參考rangeradmin中install.properties的配置
rangerUsersync_password=bigdata123
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
Ⅱ.同步ldap用戶
#rangeradmin的url
POLICY_MGR_URL =http://192.168.101.179:6080
#同步間隔時(shí)間,單位(分鐘)
SYNC_INTERVAL = 60
#運(yùn)行此進(jìn)程的linux用戶
unix_user=hxr
unix_group=hxr
#rangerUserSync的用戶密碼,參考rangeradmin中install.properties的配置
rangerUsersync_password=bigdata123
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
# 同步的數(shù)據(jù)源類型,unix為同步linux用戶,ldap為同步ldap用戶
SYNC_SOURCE = ldap
# 同步時(shí)間,單位為min(不能小于60min)
SYNC_INTERVAL = 60
# ldap地址
SYNC_LDAP_URL = ldap://192.168.101.174:389
# ldap管理員用戶密碼
SYNC_LDAP_BIND_DN = cn=admin,dc=ldap,dc=chenjie,dc=asia
SYNC_LDAP_BIND_PASSWORD = bigdata123
# 同步用戶所在的路徑
SYNC_LDAP_SEARCH_BASE = ou=hive,dc=ldap,dc=chenjie,dc=asia
③在root用戶下安裝
./setup.sh
④修改配置文件 conf/ranger-ugsync-site.xml
<property>
<name>ranger.usersync.enabled</name>
<value>true</value>
</property>
啟動(dòng)
ranger-usersync start/stop/restart
ranger-usersync服務(wù)也是開機(jī)自啟動(dòng)的,因此之后不需要手動(dòng)啟動(dòng)!

3.2.3 Ranger Hive-plugin
安裝
①解壓ranger-2.0.0-hive-plugin.tar.gz
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-hive-plugin.tar.gz -C /opt/module/ranger-2.0.0
②修改配置文件inistall.propreties
#策略管理器的url地址
POLICY_MGR_URL=http://192.168.101.179:6080
#組件名稱可以自定義
REPOSITORY_NAME=hivedev
#hive的安裝目錄
COMPONENT_INSTALL_DIR_NAME=/opt/module/hive-3.1.2
#hive組件的啟動(dòng)用戶
CUSTOM_USER=hxr
#hive組件啟動(dòng)用戶所屬組
CUSTOM_GROUP=hxr
③將hive配置文件軟連接到Ranger Hive-plugin目錄下
ln -s /opt/module/hive-3.1.2/conf /opt/module/ranger-2.0.0/ranger-2.0.0-hive-plugin
啟動(dòng)
使用root用戶啟動(dòng)Ranger Hive-plugin
./enable-hive-plugin.sh
執(zhí)行./disable-hive-plugin.sh 可以關(guān)閉插件
會(huì)在hive的conf目錄下生成配置文件hiveserver2-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--><configuration>
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>
</property>
<property>
<name>hive.security.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
<property>
<name>hive.conf.restricted.list</name>
<value>hive.security.authorization.enabled,hive.security.authorization.manager,hive.security.authenticator.manager</value>
</property>
</configuration>
重啟hiveserver2生效
3.2.4 Ranger HDFS-plugin
安裝
①解壓ranger-2.0.0-hdfs-plugin.tar.gz
tar -zxvf /opt/software/ranger-2.0.0-hdfs-plugin.tar.gz -C /opt/module/ranger-2.0.0
②修改配置文件inistall.propreties
#策略管理器的url地址
POLICY_MGR_URL=http://192.168.101.179:6080
#組件名稱可以自定義
REPOSITORY_NAME=hdfsdev
#hdfs的安裝目錄
COMPONENT_INSTALL_DIR_NAME=/opt/module/hadoop-3.1.3
#hdfs組件的啟動(dòng)用戶
CUSTOM_USER=hxr
#hdfs組件啟動(dòng)用戶所屬組
CUSTOM_GROUP=hxr
③創(chuàng)建軟連接
ln -s /opt/module/hadoop-3.1.3/etc/hadoop /opt/module/ranger-2.0.0/ranger-2.0.0-hive-plugin/conf
/opt/module/ranger-2.0.0/ranger-2.0.0-hive-plugin/conf
ln -s /opt/module/hadoop-3.1.3/
啟動(dòng)
[root@bigdata1 ranger-2.0.0-hdfs-plugin]# ./enable-hdfs-plugin.sh
關(guān)閉hdfs插件命令為
./disable-hdfs-plugin.sh。除了關(guān)閉插件外,還需要?jiǎng)h除hadoop配置文件中ranger相關(guān)的配置文件,并且刪除hdfs-site.xml中插件添加的相關(guān)配置。
重啟hdfs生效
三、權(quán)限配置
3.1 Hive權(quán)限管理
3.1.1 添加hive組件
在Ranger Admin上配置hive插件。
在首頁(yè)上點(diǎn)擊Hive標(biāo)簽的加號(hào),跳轉(zhuǎn)到hive配置頁(yè)面

- Service Name:hivedev (必須與配置文件中的REPOSITORY_NAME一致)
- Username:hxr
- Password:無(wú)密碼可以隨便填
- jdbc.driverClassName:org.apache.hive.jdbc.HiveDriver
- jdbc.url:jdbc:hive2://192.168.101.179:10000
需要注意的是:
- hiveserver2需要進(jìn)行重啟才能正常的使用Ranger Hive插件。在UI中配置hive完成后,先進(jìn)行save,save完成后才會(huì)生成權(quán)限,否則所有用戶都沒(méi)有任何權(quán)限。
- username需要在core-site.xml中設(shè)置代理。
3.1.2 使用Ranger對(duì)Hive進(jìn)行權(quán)限管理
save之后可以進(jìn)入配置中,為每個(gè)用戶進(jìn)行更細(xì)粒度的權(quán)限配置。
3.1.2.1 權(quán)限配置示例
在ACCESS中可以對(duì)權(quán)限進(jìn)行配置

3.1.2.2 脫敏配置示例
在Masking可以指定用戶和字段,用戶在查詢表是將返回的該字段進(jìn)行脫敏。

3.1.2.3 行級(jí)過(guò)濾示例
可以指定用戶和需要過(guò)濾掉的行,該用戶查詢時(shí)不會(huì)返回過(guò)濾掉的行記錄。

3.2 HDFS權(quán)限管理
3.2.1 添加hdfs組件

3.2.2 使用Ranger對(duì)hdfs進(jìn)行權(quán)限管理

注:因?yàn)榕渲昧司W(wǎng)頁(yè)端代理用戶hxr,所以單獨(dú)使用沒(méi)有什么效果,需要配合Kerberos使用。
四、整合Kerberos完成認(rèn)證鑒權(quán)
以上配置的是通過(guò)LDAP完成認(rèn)證,Ranger完成鑒權(quán)。
也可以通過(guò)Kerberos完成認(rèn)證,Ranger完成鑒權(quán)。
如果Hadoop集群中已經(jīng)配置了Kerberos安全認(rèn)證,Ranger也可以與Kerberos配合使用完成用戶的認(rèn)證和權(quán)限控制。
配置見(jiàn)文章: Kerberos認(rèn)證管理
4.1 創(chuàng)建系統(tǒng)用戶和Kerberos主題
Ranger的啟動(dòng)和運(yùn)行需使用特定的用戶,故須在Ranger所在節(jié)點(diǎn)創(chuàng)建所需系統(tǒng)用戶并在Kerberos中創(chuàng)建所需主體。
- 創(chuàng)建ranger系統(tǒng)用戶
useradd ranger -G hadoop
echo ranger | passwd --stdin ranger
參數(shù)-G表示創(chuàng)建的ranger同時(shí)屬于hadoop組和ranger組。
- 檢查HTTP主體是否正常(該主體在Hadoop開啟Kerberos時(shí)已創(chuàng)建)
kinit -kt /etc/security/keytab/spnego.service.keytab HTTP/bigdata1@IOTMARS.COM
-
創(chuàng)建rangeradmin主體
1)創(chuàng)建主體kadmin -padmin/admin -wPassword@123 -q "addprinc -randkey rangeradmin/bigdata1"2)生成keytab文件
kadmin -padmin/admin -wPassword@123 -q "xst -k /etc/security/keytab/rangeradmin.keytab rangeradmin/bigdata1"3)修改keytab文件所有者
chown ranger:ranger /etc/security/keytab/rangeradmin.keytab -
創(chuàng)建rangerlookup主體
1)創(chuàng)建主體kadmin -padmin/admin -wPassword@123 -q "addprinc -randkey rangerlookup/bigdata1"2)生成keytab文件
kadmin -padmin/admin -wPassword@123 -q "xst -k /etc/security/keytab/rangerlookup.keytab rangerlookup/bigdata1"3)修改keytab文件所有者
chown ranger:ranger /etc/security/keytab/rangerlookup.keytab -
創(chuàng)建rangerusersync主體
1)創(chuàng)建主體kadmin -padmin/admin -wPassword@123 -q "addprinc -randkey rangerusersync/bigdata1"2)生成keytab文件
kadmin -padmin/admin -wPassword@123 -q "xst -k /etc/security/keytab/rangerusersync.keytab rangerusersync/bigdata1"3)修改keytab文件所有者
chown ranger:ranger /etc/security/keytab/rangerusersync.keytab
4.2 安裝和啟動(dòng)RangerAdmin
安裝RangerAdmin
①創(chuàng)建目錄mkdir /opt/module/ranger-2.0.0
解壓ranger-2.0.0-admin.tar.gz到該目錄下
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-admin.tar.gz -C /opt/module/ranger-2.0.0/
②配置文件install.properties
#mysql驅(qū)動(dòng)
SQL_CONNECTOR_JAR=SQL_CONNECTOR_JAR=/opt/module/ranger-2.0.0/ranger-2.0.0-admin/mysql-connector-java-5.1.45.jar
#mysql的主機(jī)名和root用戶的用戶名密碼
db_root_user=root
db_root_password=Password@123
db_host=192.168.101.174
#ranger需要的數(shù)據(jù)庫(kù)名和用戶信息,和2.2.1創(chuàng)建的信息要一一對(duì)應(yīng)
db_name=ranger
db_user=ranger
db_password=bigdata123
#其他ranger admin需要的用戶密碼
rangerAdmin_password=bigdata123
rangerTagsync_password=bigdata123
rangerUsersync_password=bigdata123
keyadmin_password=bigdata123
#ranger存儲(chǔ)審計(jì)日志的路徑,默認(rèn)為solr,這里為了方便暫不設(shè)置
audit_store=
#策略管理器的url,rangeradmin安裝在哪臺(tái)機(jī)器,主機(jī)名就為對(duì)應(yīng)的主機(jī)名,不能寫ip地址
policymgr_external_url=http://bigdata1:6080
#啟動(dòng)ranger admin進(jìn)程的linux用戶信息。會(huì)將目錄所屬用戶改為ranger
unix_user=ranger
unix_user_pwd=ranger
unix_group=ranger
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
#Kerberos相關(guān)配置
spnego_principal=HTTP/bigdata1@IOTMARS.COM
spnego_keytab=/etc/security/keytab/spnego.service.keytab
token_valid=30
cookie_domain=
cookie_path=/
admin_principal=rangeradmin/bigdata1@IOTMARS.COM
admin_keytab=/etc/security/keytab/rangeradmin.keytab
lookup_principal=rangerlookup/bigdata1@IOTMARS.COM
lookup_keytab=/etc/security/keytab/rangerlookup.keytab
③在root用戶下進(jìn)行安裝
[root@bigdata1 ranger-2.0.0-admin]# ./setup.sh
出現(xiàn)如下信息表示安裝成功
2021-10-08 14:43:27,184 [I] Ranger all admins default password has already been changed!!
Installation of Ranger PolicyManager Web Application is completed.
注意:如果使用
sudo ./setup.sh安裝會(huì)找不到JAVA_HOME,但是使用sudo echo ${JAVA_HOME}是可以正常打印的,很奇怪???
啟動(dòng)Ranger Admin
安裝時(shí)會(huì)自動(dòng)將啟動(dòng)腳本放到/usr/bin目錄下,同時(shí)根據(jù)配置的install.properties自動(dòng)生成配置文件ranger-admin-site.xml。
執(zhí)行鏈接命令時(shí)會(huì)將/etc/ranger/admin/conf目錄鏈接到ews/webapp/WEB-INF/classes/conf目錄。
也會(huì)將服務(wù)設(shè)為開機(jī)自啟,所以無(wú)需我們?cè)O(shè)置開機(jī)自啟。
但是自動(dòng)生成的配置文件有兩處錯(cuò)誤,我們需要手動(dòng)修改。
①修改配置文件 /etc/ranger/admin/conf/ranger-admin-site.xml
<property>
<name>ranger.jpa.jdbc.password</name>
<value>bigdata123</value>
<description />
</property>
<property>
<name>ranger.service.host</name>
<value>192.168.101.179</value>
</property>
②啟動(dòng)和關(guān)閉RangerAdmin
使用ranger用戶啟動(dòng)/關(guān)閉/重啟 ranger-admin
[root@bigdata1 ranger-2.0.0-admin]# sudo -i -u ranger ranger-admin start/stop/restart
啟動(dòng)后其后臺(tái)進(jìn)程名為EmbeddedServer
③訪問(wèn)UI
管理員賬號(hào)密碼為admin/bigdata123
http://192.168.101.179:6080
訪問(wèn)路徑還是為 http://192.168.101.179:6080/login.jsp
4.3 安裝RangerUsersync
安裝
RangerUsersync作為Ranger提供的一個(gè)管理模塊,可以將Linux機(jī)器上的用戶和組信息同步到RangerAdmin的數(shù)據(jù)庫(kù)中進(jìn)行管理。也可以同步LDAP等公司現(xiàn)有的用戶框架體系中的用戶到Ranger Admin中。
①解壓
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-usersync.tar.gz -C /opt/module/ranger-2.0.0/
②修改配置文件install.properties
這里既可以配置同步linux上的用戶,也可以配置同步ldap上的用戶
Ⅰ. 同步linux用戶
#rangeradmin的url
POLICY_MGR_URL=http://192.168.101.179:6080
#同步linux用戶
SYNC_SOURCE = unix
#同步間隔時(shí)間,單位(分鐘)
SYNC_INTERVAL = 1
#運(yùn)行此進(jìn)程的linux用戶
unix_user=hxr
unix_group=hxr
#rangerUserSync的用戶密碼,參考rangeradmin中install.properties的配置
rangerUsersync_password=bigdata123
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
#Kerberos相關(guān)配置
usersync_principal=rangerusersync/bigdata1@IOTMARS.COM
usersync_keytab=/etc/security/keytab/rangerusersync.keytab
需要配置Kerberos。
Ⅱ. 同步ldap用戶
#rangeradmin的url
POLICY_MGR_URL=http://192.168.101.179:6080
#運(yùn)行此進(jìn)程的linux用戶
unix_user=ranger
unix_group=ranger
#rangerUserSync的用戶密碼,參考rangeradmin中install.properties的配置
rangerUsersync_password=bigdata123
#hadoop的配置文件目錄
hadoop_conf=/opt/module/hadoop-3.1.3/etc/hadoop
#Kerberos相關(guān)配置
usersync_principal=rangerusersync/bigdata1@IOTMARS.COM
usersync_keytab=/etc/security/keytab/rangerusersync.keytab
# 日志保存路徑
logdir=/opt/module/ranger-2.2.0/ranger-2.2.0-usersync/logs
# 同步ldap數(shù)據(jù)
## 同步的數(shù)據(jù)源類型,默認(rèn)為unix,同步linux用戶;這里配置為ldap,同步ldap用戶
SYNC_SOURCE = ldap
## 同步時(shí)間,單位為min (不能小于60min)
SYNC_INTERVAL = 60
## ldap地址
SYNC_LDAP_URL = ldap://192.168.101.174:389
## ldap管理員用戶密碼
SYNC_LDAP_BIND_DN = cn=admin,dc=ldap,dc=chenjie,dc=asia
SYNC_LDAP_BIND_PASSWORD = bigdata123
## 定義一個(gè)路徑
SYNC_LDAP_SEARCH_BASE = ou=hive,dc=ldap,dc=chenjie,dc=asia
# PID保存路徑
USERSYNC_PID_DIR_PATH=/var/run/ranger
# 同步用戶
## 同步用戶所在的路徑,默認(rèn)值為SYNC_LDAP_SEARCH_BASE
SYNC_LDAP_USER_SEARCH_BASE =
## 查找用戶的范圍,可選base/one/sub,默認(rèn)為sub
SYNC_LDAP_USER_SEARCH_SCOPE = sub
## default value: person
SYNC_LDAP_USER_OBJECT_CLASS = person
## default value is empty
SYNC_LDAP_USER_SEARCH_FILTER =
## 用戶名的屬性,默認(rèn)為 cn
SYNC_LDAP_USER_NAME_ATTRIBUTE = cn
## default value is memberof,ismemberof
SYNC_LDAP_USER_GROUP_NAME_ATTRIBUTE = memberof,ismemberof
## possible values: none, lower, upper
SYNC_LDAP_USERNAME_CASE_CONVERSION=lower
SYNC_LDAP_GROUPNAME_CASE_CONVERSION=lower
# 同步用戶組
## 是否同步用戶的所在組,默認(rèn)值為 false
SYNC_GROUP_SEARCH_ENABLED=true
SYNC_GROUP_USER_MAP_SYNC_ENABLED=true
## 同步用戶組所在的路徑,默認(rèn)值為SYNC_LDAP_SEARCH_BASE
SYNC_GROUP_SEARCH_BASE=
## default value: sub
SYNC_GROUP_SEARCH_SCOPE=
## default value: groupofnames
SYNC_GROUP_OBJECT_CLASS=posixGroup
## default value is empty
SYNC_LDAP_GROUP_SEARCH_FILTER=
## default value: cn
SYNC_GROUP_NAME_ATTRIBUTE=
## 組中的用戶屬性,默認(rèn)為 member
SYNC_GROUP_MEMBER_ATTRIBUTE_NAME=memberUid
在ldap中添加用戶時(shí),在Membership中指定用戶組。
③在root用戶下安裝
./setup.sh
④修改配置文件 conf/ranger-ugsync-site.xml
<property>
<name>ranger.usersync.enabled</name>
<value>true</value>
</property>
啟動(dòng)/關(guān)閉/重啟
sudo -i -u ranger ranger-usersync start/stop/restart
ranger-usersync服務(wù)也是開機(jī)自啟動(dòng)的,因此之后不需要手動(dòng)啟動(dòng)!
4.4 安裝Ranger Hive-plugin
安裝
①解壓ranger-2.0.0-hive-plugin.tar.gz
[root@bigdata1 ranger-2.0.0]# tar -zxvf /opt/software/ranger-2.0.0-hive-plugin.tar.gz -C /opt/module/ranger-2.0.0
②修改配置文件inistall.propreties
#策略管理器的url地址
POLICY_MGR_URL=http://192.168.101.179:6080
#組件名稱可以自定義
REPOSITORY_NAME=hivedev
#hive的安裝目錄
COMPONENT_INSTALL_DIR_NAME=/opt/module/hive-3.1.2
#hive組件的啟動(dòng)用戶
CUSTOM_USER=hive
#hive組件啟動(dòng)用戶所屬組
CUSTOM_GROUP=hadoop
啟動(dòng)
[root@bigdata1 ranger-2.0.0-hive-plugin]# ./enable-hive-plugin.sh
關(guān)閉hive插件命令為
./disable-hive-plugin.sh,除了執(zhí)行命令外,還需要?jiǎng)h除hive配置文件目錄下ranger相關(guān)的配置文件。
會(huì)在hive的conf目錄下生成多個(gè)配置文件
- ranger-hive-audit.xml
- ranger-hive-security.xml
- ranger-policymgr-ssl.xml
- ranger-security.xml
- hiveserver2-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
--><configuration>
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory</value>
</property>
<property>
<name>hive.security.authenticator.manager</name>
<value>org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator</value>
</property>
<property>
<name>hive.conf.restricted.list</name>
<value>hive.security.authorization.enabled,hive.security.authorization.manager,hive.security.authenticator.manager</value>
</property>
</configuration>
重啟hiveserver2生效
[root@bigdata1 ranger-2.0.0-hive-plugin]# sudo -i -u hive nohup hiveserver2 1>/opt/module/hive-3.1.2/logs/hive-on-spark.log 2>/opt/module/hive-3.1.2/logs/hive-on-spark.err &
在ranger admin上配置hive插件
授予hive用戶在Ranger中的Admin角色
添加hive用戶,并將hive用戶的角色設(shè)置為Admin,組設(shè)置為hadoop。-
配置hive插件
image.png
此時(shí)點(diǎn)擊Test Connection,會(huì)報(bào)錯(cuò)如下
Connection Failed.
Unable to retrieve any files using given parameters, You can still save the repository and start creating policies, but you would not be able to use autocomplete for resource names. Check ranger_admin.log for more info.
org.apache.ranger.plugin.client.HadoopException: Unable to execute SQL [show databases like "*"]..
Unable to execute SQL [show databases like "*"]..
Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [rangerlookup] does not have [USE] privilege on [Unknown resource!!].
Permission denied: user [rangerlookup] does not have [USE] privilege on [Unknown resource!!].
說(shuō)明連接是正常的,只是沒(méi)有訪問(wèn)權(quán)限(即是這個(gè)訪問(wèn)不通也沒(méi)有影響,最終hiveserver2會(huì)拉取配置的規(guī)則緩存到本地目錄下)。
配置訪問(wèn)規(guī)則即可,規(guī)則配置同上。
- 添加訪問(wèn)權(quán)限
五、總結(jié)
5.1 UI和進(jìn)程
UI界面:http://192.168.101.179:6080 (admin/bigdata123)
| 組件 | 進(jìn)程名 | 啟動(dòng)命令 |
|---|---|---|
| Ranger Admin | EmbeddedServer | ranger-admin start/stop/restart |
| RangerUsersync | UnixAuthenticationService(root用戶可見(jiàn)) | ranger-usersync start/stop/restart(root用戶下啟動(dòng)) |
Hive Plugin啟動(dòng)命令: ./enable-hive-plugin.sh ./disable-hive-plugin.sh
5.2 異常
- 現(xiàn)象:使用Ranger的hive組件后報(bào)錯(cuò)
User: root is not allowed to impersonate root
- 原因:可能是root用戶啟動(dòng)的Ranger Hive Plugin,該插件通過(guò)權(quán)限判斷后最終提交任務(wù)時(shí)是以root用戶提交的,所以hadoop需要允許root用戶進(jìn)行外部訪問(wèn)。
- 解決:core-site.xml中添加root代理
<!-- 配置root允許通過(guò)代理訪問(wèn)主機(jī)節(jié)點(diǎn) -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 配置root允許通過(guò)代理用戶所屬組 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
5.3 添加用戶流程
5.3.1 創(chuàng)建Kerberos用戶
為用戶添加kerberos主體,設(shè)置密碼
kadmin.local -q "addprinc chenjie"
導(dǎo)出keytab(如果希望導(dǎo)出keytab且密碼不改變,需要在KDC所在節(jié)點(diǎn)執(zhí)行如下命令)
kadmin.local -q "xst -norandkey -k ./chenjie.keytab chenjie@IOTMARS.COM"
5.3.2 創(chuàng)建Ranger用戶
如果配置了ranger-usersync插件,可以在對(duì)應(yīng)的ldap中添加用戶等待同步;也可以直接在Ranger UI中添加用戶。
添加用戶后為其設(shè)置對(duì)應(yīng)的hive/hdfs權(quán)限。
5.3.3 beeline連接hiveserver2
首先需要在節(jié)點(diǎn)上認(rèn)證身份
kinit chenjie
然后通過(guò)beeline連接
beeline -u "jdbc:hive2://bigdata1:10000/;principal=hive/bigdata1@IOTMARS.COM"
5.3.4 訪問(wèn)NameNode UI
安裝Kerberos客戶端,配置配置文件 C:\ProgramData\MIT\Kerberos5\krb5.ini
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
forwardable = true
rdns = false
default_realm = IOTMARS.COM
[realms]
IOTMARS.COM = {
kdc = 192.168.101.174
admin_server = 192.168.101.174
}
[domain_realm]
配置完成后,啟動(dòng)Kerberos客戶端,認(rèn)證用戶;
最后配置火狐瀏覽器在訪問(wèn)bigdata1節(jié)點(diǎn)時(shí)使用Kerberos認(rèn)證
about:config
network.negotiate-auth.trusted-uris = bigdata1
network.auth.use-sspi = false
5.3.5 DataGrip連接
5.3.5.1 DataGrip客戶端
DataGrip中的Hive連接驅(qū)動(dòng)沒(méi)有整合Kerberos認(rèn)證,所以需要自定義Hive驅(qū)動(dòng)。
5.3.5.2 新建Driver
-
創(chuàng)建Driver
image.png 配置Driver

URL templates:jdbc:hive2://{host}:{port}/{database}[;<;,{:identifier}={:param}>]
5.3.5.3 新建連接
1)基礎(chǔ)配置

url:jdbc:hive2://bigdata1:10000/;principal=hive/bigdata1@IOTMARS.COM
2)高級(jí)配置

配置參數(shù):
-Djava.security.krb5.conf="C:\\ProgramData\\MIT\\Kerberos5\\krb5.ini"
-Djava.security.auth.login.config="C:\\ProgramData\\MIT\\Kerberos5\\chenjie.conf"
-Djavax.security.auth.useSubjectCredsOnly=false
3)編寫JAAS(Java認(rèn)證授權(quán)服務(wù))配置文件chenjie.conf,內(nèi)容如下,文件名和路徑須和上圖中java.security.auth.login.config參數(shù)的值保持一致。
com.sun.security.jgss.initiate{
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
useTicketCache=false
keyTab="C:\\ProgramData\\MIT\\Kerberos5\\chenjie.keytab"
principal="hxr@IOTMARS.COM";
};
4)將第一步生成的chenjie.keytab文件放到chenjie.conf中配置的keytab的路徑下
5)測(cè)試連接
六、Ranger整合LDAP
在原先的基礎(chǔ)上,繼續(xù)修改ranger的配置文件ranger-admin-site.xml
authentication_method=LDAP
xa_ldap_url=ldap://192.168.101.174:389
xa_ldap_userDNpattern=uid={0},ou=hive,dc=ldap,dc=chenjie,dc=asia
xa_ldap_groupSearchBase=
xa_ldap_groupSearchFilter=
xa_ldap_groupRoleAttribute=
xa_ldap_base_dn=ou=hive,dc=ldap,dc=chenjie,dc=asia
xa_ldap_bind_dn=cn=admin,dc=ldap,dc=chenjie,dc=asia
xa_ldap_bind_password=bigdata123
xa_ldap_referral=
xa_ldap_userSearchFilter=
在root用戶下 ./setup.sh 進(jìn)行安裝,然后重啟 ranger-admin restart。
在配置文件中配置的admin的密碼仍然有效,登錄后仍然是管理員用戶。ldap中的用戶也可以進(jìn)行登陸,這些都是普通用戶。
七、總結(jié)
至此完成了一下功能
- 通過(guò)ranger來(lái)對(duì)hiveserver2的權(quán)限進(jìn)行驗(yàn)證
- usersync組件定時(shí)同步LDAP的hive用戶到Ranger中
- Ranger的UI可以使用LDAP的ranger組的用戶進(jìn)行登陸
Hive整合LDAP進(jìn)行登陸認(rèn)證,翻看文章 LDAP
參考
詳細(xì)信息可以瀏覽官網(wǎng)
usersync for ldap
ranger 配置(如LDAP驗(yàn)證登陸)

