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

二、源碼編譯
需要從官網(wǎng)下載ranger源碼,通過maven編譯后進(jìn)行使用。
ranger2.0.0源碼 下載地址
Ranger2.0要求對應(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 (需要對C語言進(jìn)行編譯,如果不安裝,編譯Unix Native Authenticator模塊時會報錯找不到gcc命令);
- 安裝python2:如果系統(tǒng)自帶python2,那么直接忽略,如centos7.x;
解壓源碼包,進(jìn)入ranger-2.0.0父項(xiàng)目的路徑下,執(zhí)行如下命令(mvn命令沒有寫到環(huán)境變量的話需要寫全mvn的路徑)
mvn -DskipTests clean compile package install assembly:assembly
編譯開始,需要等待下載依賴和完成編譯打包,耗時個把小時。如果某一個模塊編譯出錯了,可以單獨(dú)進(jìn)入該模塊進(jìn)行編譯,啟動編譯命令時加上-X參數(shù),顯示debug信息,方便找到錯誤。
編譯完成后,可以在父項(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,會有沖突。
三、部署
3.1 數(shù)據(jù)庫配置
創(chuàng)建數(shù)據(jù)庫
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ū)動
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ù)庫名和用戶信息,和2.2.1創(chuàng)建的信息要一一對應(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存儲審計(jì)日志的路徑,默認(rèn)為solr,這里為了方便暫不設(shè)置
audit_store=
#策略管理器的url,rangeradmin安裝在哪臺機(jī)器,主機(jī)名就為對應(yīng)的主機(jī)名,不能寫ip
policymgr_external_url=http://bigdata1:6080
#啟動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安裝會找不到JAVA_HOME,但是使用sudo echo ${JAVA_HOME}是可以正常打印的,很奇怪???
④root用戶下軟路由配置文件
只需要執(zhí)行./set_globals.sh就會自動進(jìn)行軟路由
執(zhí)行結(jié)果如下
[root@cos-bigdata-hadoop-01 ranger-2.0.0-admin]# sudo -u -i ranger ./set_globals.sh
usermod:無改變
[2021/08/03 15:27:25]: [I] Soft linking /etc/ranger/admin/conf to ews/webapp/WEB-INF/classes/conf
啟動Ranger Admin
安裝時會自動將啟動腳本放到/usr/bin目錄下,同時根據(jù)配置的install.properties自動生成配置文件ranger-admin-site.xml。
執(zhí)行鏈接命令時會將/etc/ranger/admin/conf目錄鏈接到ews/webapp/WEB-INF/classes/conf目錄。
也會將服務(wù)設(shè)為開機(jī)自啟,所以無需我們設(shè)置開機(jī)自啟。
但是自動生成的配置文件有兩處錯誤,我們需要手動修改。
①修改配置文件 /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>
②啟動和關(guān)閉RangerAdmin
ranger-admin start/stop/restart
啟動后其后臺進(jìn)程名為EmbeddedServer
③訪問UI
管理員賬號密碼為admin/bigdata123
http://192.168.101.179:6080
3.2.2 RangerUsersync
安裝
RangerUsersync作為Ranger提供的一個管理模塊,可以將Linux機(jī)器上的用戶和組信息同步到RangerAdmin的數(shù)據(jù)庫中進(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
#同步間隔時間,單位(分鐘)
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
#同步間隔時間,單位(分鐘)
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
# 同步時間,單位為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>
啟動
ranger-usersync start/stop/restart
ranger-usersync服務(wù)也是開機(jī)自啟動的,因此之后不需要手動啟動!

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組件的啟動用戶
CUSTOM_USER=hxr
#hive組件啟動用戶所屬組
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
啟動
使用root用戶啟動Ranger Hive-plugin
./enable-hive-plugin.sh
執(zhí)行./disable-hive-plugin.sh 可以關(guān)閉插件
會在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組件的啟動用戶
CUSTOM_USER=hxr
#hdfs組件啟動用戶所屬組
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/
啟動
[root@bigdata1 ranger-2.0.0-hdfs-plugin]# ./enable-hdfs-plugin.sh
關(guān)閉hdfs插件命令為
./disable-hdfs-plugin.sh。除了關(guān)閉插件外,還需要刪除hadoop配置文件中ranger相關(guān)的配置文件,并且刪除hdfs-site.xml中插件添加的相關(guān)配置。
重啟hdfs生效
三、權(quán)限配置
3.1 Hive權(quán)限管理
3.1.1 添加hive組件
在Ranger Admin上配置hive插件。
在首頁上點(diǎn)擊Hive標(biāo)簽的加號,跳轉(zhuǎn)到hive配置頁面

- Service Name:hivedev (必須與配置文件中的REPOSITORY_NAME一致)
- Username:hxr
- Password:無密碼可以隨便填
- 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完成后才會生成權(quán)限,否則所有用戶都沒有任何權(quán)限。
- username需要在core-site.xml中設(shè)置代理。
3.1.2 使用Ranger對Hive進(jìn)行權(quán)限管理
save之后可以進(jìn)入配置中,為每個用戶進(jìn)行更細(xì)粒度的權(quán)限配置。
3.1.2.1 權(quán)限配置示例
在ACCESS中可以對權(quán)限進(jìn)行配置

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

3.1.2.3 行級過濾示例
可以指定用戶和需要過濾掉的行,該用戶查詢時不會返回過濾掉的行記錄。

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

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

注:因?yàn)榕渲昧司W(wǎng)頁端代理用戶hxr,所以單獨(dú)使用沒有什么效果,需要配合Kerberos使用。
四、整合Kerberos完成認(rèn)證鑒權(quán)
以上配置的是通過LDAP完成認(rèn)證,Ranger完成鑒權(quán)。
也可以通過Kerberos完成認(rèn)證,Ranger完成鑒權(quán)。
如果Hadoop集群中已經(jīng)配置了Kerberos安全認(rèn)證,Ranger也可以與Kerberos配合使用完成用戶的認(rèn)證和權(quán)限控制。
配置見文章: Kerberos認(rèn)證管理
4.1 創(chuàng)建系統(tǒng)用戶和Kerberos主題
Ranger的啟動和運(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同時屬于hadoop組和ranger組。
- 檢查HTTP主體是否正常(該主體在Hadoop開啟Kerberos時已創(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 安裝和啟動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ū)動
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ù)庫名和用戶信息,和2.2.1創(chuàng)建的信息要一一對應(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存儲審計(jì)日志的路徑,默認(rèn)為solr,這里為了方便暫不設(shè)置
audit_store=
#策略管理器的url,rangeradmin安裝在哪臺機(jī)器,主機(jī)名就為對應(yīng)的主機(jī)名,不能寫ip地址
policymgr_external_url=http://bigdata1:6080
#啟動ranger admin進(jìn)程的linux用戶信息。會將目錄所屬用戶改為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安裝會找不到JAVA_HOME,但是使用sudo echo ${JAVA_HOME}是可以正常打印的,很奇怪???
啟動Ranger Admin
安裝時會自動將啟動腳本放到/usr/bin目錄下,同時根據(jù)配置的install.properties自動生成配置文件ranger-admin-site.xml。
執(zhí)行鏈接命令時會將/etc/ranger/admin/conf目錄鏈接到ews/webapp/WEB-INF/classes/conf目錄。
也會將服務(wù)設(shè)為開機(jī)自啟,所以無需我們設(shè)置開機(jī)自啟。
但是自動生成的配置文件有兩處錯誤,我們需要手動修改。
①修改配置文件 /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>
②啟動和關(guān)閉RangerAdmin
使用ranger用戶啟動/關(guān)閉/重啟 ranger-admin
[root@bigdata1 ranger-2.0.0-admin]# sudo -i -u ranger ranger-admin start/stop/restart
啟動后其后臺進(jìn)程名為EmbeddedServer
③訪問UI
管理員賬號密碼為admin/bigdata123
http://192.168.101.179:6080
訪問路徑還是為 http://192.168.101.179:6080/login.jsp
4.3 安裝RangerUsersync
安裝
RangerUsersync作為Ranger提供的一個管理模塊,可以將Linux機(jī)器上的用戶和組信息同步到RangerAdmin的數(shù)據(jù)庫中進(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
#同步間隔時間,單位(分鐘)
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
## 同步時間,單位為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
# 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中添加用戶時,在Membership中指定用戶組。
③在root用戶下安裝
./setup.sh
④修改配置文件 conf/ranger-ugsync-site.xml
<property>
<name>ranger.usersync.enabled</name>
<value>true</value>
</property>
啟動/關(guān)閉/重啟
sudo -i -u ranger ranger-usersync start/stop/restart
ranger-usersync服務(wù)也是開機(jī)自啟動的,因此之后不需要手動啟動!
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組件的啟動用戶
CUSTOM_USER=hive
#hive組件啟動用戶所屬組
CUSTOM_GROUP=hadoop
啟動
[root@bigdata1 ranger-2.0.0-hive-plugin]# ./enable-hive-plugin.sh
關(guān)閉hive插件命令為
./disable-hive-plugin.sh,除了執(zhí)行命令外,還需要刪除hive配置文件目錄下ranger相關(guān)的配置文件。
會在hive的conf目錄下生成多個配置文件
- 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
此時點(diǎn)擊Test Connection,會報錯如下
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!!].
說明連接是正常的,只是沒有訪問權(quán)限(即是這個訪問不通也沒有影響,最終hiveserver2會拉取配置的規(guī)則緩存到本地目錄下)。
配置訪問規(guī)則即可,規(guī)則配置同上。
- 添加訪問權(quán)限
五、總結(jié)
5.1 UI和進(jìn)程
UI界面:http://192.168.101.179:6080 (admin/bigdata123)
| 組件 | 進(jìn)程名 | 啟動命令 |
|---|---|---|
| Ranger Admin | EmbeddedServer | ranger-admin start/stop/restart |
| RangerUsersync | UnixAuthenticationService(root用戶可見) | ranger-usersync start/stop/restart(root用戶下啟動) |
Hive Plugin啟動命令: ./enable-hive-plugin.sh ./disable-hive-plugin.sh
5.2 異常
- 現(xiàn)象:使用Ranger的hive組件后報錯
User: root is not allowed to impersonate root
- 原因:可能是root用戶啟動的Ranger Hive Plugin,該插件通過權(quán)限判斷后最終提交任務(wù)時是以root用戶提交的,所以hadoop需要允許root用戶進(jìn)行外部訪問。
- 解決:core-site.xml中添加root代理
<!-- 配置root允許通過代理訪問主機(jī)節(jié)點(diǎn) -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 配置root允許通過代理用戶所屬組 -->
<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插件,可以在對應(yīng)的ldap中添加用戶等待同步;也可以直接在Ranger UI中添加用戶。
添加用戶后為其設(shè)置對應(yīng)的hive/hdfs權(quán)限。
5.3.3 beeline連接hiveserver2
首先需要在節(jié)點(diǎn)上認(rèn)證身份
kinit chenjie
然后通過beeline連接
beeline -u "jdbc:hive2://bigdata1:10000/;principal=hive/bigdata1@IOTMARS.COM"
5.3.4 訪問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]
配置完成后,啟動Kerberos客戶端,認(rèn)證用戶;
最后配置火狐瀏覽器在訪問bigdata1節(jié)點(diǎn)時使用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ū)動沒有整合Kerberos認(rèn)證,所以需要自定義Hive驅(qū)動。
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)高級配置

配置參數(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)測試連接
六、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é)
至此完成了一下功能
- 通過ranger來對hiveserver2的權(quán)限進(jìn)行驗(yàn)證
- usersync組件定時同步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)證登陸)

