公司用的cdh版本為5.14,sentry集成的步驟很簡單,參照官方文檔就可以完成了:
https://www.cloudera.com/documentation/enterprise/5-14-x/topics/sentry.html
本文主要寫一些openldap的搭建和phpldap的使用,還有l(wèi)dap和(hive,impala,hue)的整合。
ldap的具體概念可以參照這篇文章
LDAP概念和原理介紹
成都創(chuàng)新互聯(lián)專注于哈爾濱網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供哈爾濱營銷型網(wǎng)站建設(shè),哈爾濱網(wǎng)站制作、哈爾濱網(wǎng)頁設(shè)計、哈爾濱網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造哈爾濱網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供哈爾濱網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
yum install openldap openldap-clients openldap-servers
安裝完直接啟動
```
service slapd start
```
設(shè)置管理員密碼 ```
slappasswd -h {SSHA}
```
然后會讓你輸入一個明文密碼,返回給你一個加密的密碼,記住這個返回的密碼
使用ldapsearch命令查詢管理員的dn:
ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config "olcRootDN=cn=Manager,dc=my-domain,dc=com" dn olcRootDN olcRootPW
這里返回的dn是olcDatabase={2}hdb,cn=config,密碼等信息也都一并返回。這里有用的是dn和密碼的加密方式,比如這里是SSHA,dn是后面修改的Entry DN,而知道密碼的加密方式就可以使用該加密方式生成新密碼。
使用ldapmodify修改條目
vim chrootpw.ldif
#這是第1步獲取的管理員dn
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
#你想要改成的域名的后綴
olcSuffix: dc=xinniu,dc=com
#olcSuffix這幾行一定要加,否則修改之后會出錯,后面重啟openldap都會失敗
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
#你想要改成的域名
olcRootDN: cn=admin,dc=xinniu,dc=com
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
#這里就是剛才保存下來的那個加密后的密碼
olcRootPW: {SSHA}uYnICxla0NrUC5b/ha4i1JeOTCoUchV+
如圖:
使用下面的命令來修改管理員條目:
ldapmodify -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
如果出現(xiàn):
modifying entry "olcDatabase={2}bdb,cn=config"
重啟服務(wù)使修改生效
/etc/init.d/slapd restart
導(dǎo)入基本數(shù)據(jù)結(jié)構(gòu)
我們需要向 LDAP 中導(dǎo)入一些基本的 Schema。這些 Schema 文件位于 /etc/openldap/schema/ 目錄中,schema控制著條目擁有哪些對象類和屬性
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/core.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/ppolicy.ldif
到此就設(shè)定好了管理員的密碼??梢杂每蛻舳巳ス芾韔penldap了
打算使用phpldapadmin來管理openldap,這個工具使用的人較多,網(wǎng)上文檔多,出現(xiàn)問題容易解決。
首先安裝Apache和PHP:
yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
然后安裝phpldapadmin:
yum -y install phpldapadmin
httpd與phpldapadmin進行集成:
修改配置文件:
[root@localhost ~]# vim /etc/phpldapadmin/config.php
#397行取消注釋,398行添加注釋
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
這里需要修改,如果不修改,phpldapadmin會去用uid去搜索條目,不會用dn去搜索,導(dǎo)致報密碼錯誤。
[root@localhost ~]# phpldapadmin的ip過濾規(guī)則默認是拒絕所有ip訪問,先去修改一下規(guī)則,我們才可以訪問
vim /etc/httpd/conf.d/phpldapadmin.conf
##這是Apache2.2和以前的修改方法
// 修改配置
<IfModule mod_authz_core.c>
</IfModule>
把下面的Deny from all 改為Allow from all
##這是apache2.4和以后的修改方法
#允許172.16.10.16訪問
Require ip 172.16.10.16
#允許172.16這個網(wǎng)段訪問
Require ip 172.16.0.0/16
#允許所有ip訪問
Require all granted
我們可以根據(jù)自己需要修改來
修改完之后啟動:
service httpd restart
界面:
登陸
用戶名,默認是 cn=Manager,dc=my-domain,dc=com(這個也可以改的,仿照修改密碼的步驟)
密碼就輸入剛開始設(shè)置的密碼
登陸進去后,我的管理界面報這個信息:
This base cannot be created with PLA
顯示結(jié)果如下:
經(jīng)過查詢,原因是根結(jié)點需要初始化后才能使用,最終處理如下:
1、創(chuàng)建一個initroot.ldif文件,為創(chuàng)建初始化根節(jié)點做準備工作,如下所示:
dn: dc=xinniu,dc=com
#域名的后綴
o: ldap
objectclass: dcObject
objectclass: organization
2、執(zhí)行l(wèi)dapadd -f initroot.ldif -x -D cn=admin,dc=xinniu,dc=com -W 輸入之前配置OpenLDAP的密碼后,即可完成創(chuàng)建LDAP根節(jié)點,如下圖所示:
完成以上操作后,再回到phpldapadmin頁面,可以看到,已經(jīng)正常出現(xiàn)了根節(jié)點,并可以創(chuàng)建相關(guān)OU、Group、Account等對象,如下圖所示:
先用phpldapadmin在ldap創(chuàng)建一個用戶去測試:
首先創(chuàng)建一個ou,叫users
然后再在users下創(chuàng)建一個用戶:jiandan
在創(chuàng)建新條目時,選擇Generic User Account,創(chuàng)建好以后會出現(xiàn)cn=jiandan這個條目。
然后點擊cn=jiandan這個條目,點擊更名,把cn=jiandan修改為uid=jiandan,因為hive后面會在ldap中默認去搜索uid,如果使用cn還需要額外去高級配置中配置一個自定義的屬性。
在cdh里面修改一下配置:
這張圖用的別人的,如果按我的配置,BaseDN則寫:
ou=users,dc=my-domain,dc=com
然后用beeline進行測試
這樣就是通過ldap的驗證了,如果密碼不正確則會:
后來生產(chǎn)上hive整合ldap的時候遇到一個問題,hue和impala都不會出現(xiàn),當使用其他部門的LDAP而不是自建的LDAP時可能會出現(xiàn)。
那就是hive.server2.authentication.ldap.baseDN這個配置項,hive在ldap中驗證用戶時,會通過uid去匹配用戶,如:uid=xiaohuang,ou=users,dc=my-domain,dc=com。問題是有時候ldap并不一定是我們部門自己搭建的,而是技術(shù)中心的運維那邊搭建的,他們在LDAP創(chuàng)建用戶條目時,并沒有給條目一個uid的屬性,而是建了一個CN的屬性,如:cn=xiaohuang,ou=users,dc=my-domain,dc=com這種,我們使用了上面文檔的配置,必然會搜不到,導(dǎo)致驗證失敗。
這個時候咋辦?讓他們幫我們重新建個我們想要的條目?他們肯定不鳥。。
然而我就這樣放棄了么?不可能的,通過去官方文檔查看,找到這篇文章
https://cwiki.apache.org/confluence/display/Hive/User+and+Group+Filter+Support+with+LDAP+Atn+Provider+in+HiveServer2#UserandGroupFilterSupportwithLDAPAtnProviderinHiveServer2-hive.server2.authentication.ldap.userDNPattern
看到有個屬性,它也可以使hive和imapla,hue一樣,通過通配符去設(shè)定,讓hive去LDAP中查找指定的條目。
這個屬性要在
hive-site.xml 的 Hive 服務(wù)高級配置代碼段(安全閥)
中配置
<property><name>hive.server2.authentication.ldap.userDNPattern</name><value>cn=%s,ou=users,dc=my-domain,dc=com</value><final>true</final></property>
這樣即可讓hive在做賬戶驗證的時候,去搜索CN開頭的條目,而不是UID開頭的條目
。巧妙地解決了這個問題。
修改配置,和hive類似:
不過要在高級代碼段里面增加一個參數(shù),因為我們的密碼是明文傳輸,否則imapala啟動不了。
重啟impala后,我們來測試
發(fā)現(xiàn)已經(jīng)ok了。
首先需要配置這些
這個配置好以后,我們就可以登陸hue了,我們看到登陸的界面已經(jīng)多了個ldap
登陸已經(jīng)可以了,不過登陸進去后會報一些錯誤:
[文件]
我們需要配置一些額外的參數(shù)從而讓hue用戶可以代理其他的用戶
1.在ldap中創(chuàng)建hue用戶
2.hue_safety_valve.ini 的 Hue 服務(wù)高級配置代碼段(安全閥)中配這些
[beeswax]
close_queries=True
use_sasl=False
auth_username=hue
auth_password=xxxxxxx
[impala]
server_host=datanode1
server_interface=hiveserver2
server_port=21050
query_timeout_s=100
impersonation_enabled=True
auth_username=hue
auth_password=xxxxxxx
在hive和i mpala的core-site.xml 的 Hive 服務(wù)高級配置代碼段(安全閥)中增加以下配置:
impala的Impala 命令行參數(shù)高級配置代碼段(安全閥)中再加上
--authorized_proxy_user_config=hue=*
然后就不會報這個錯誤了。
以上就基本完成了ldap和hive impala hue的整合。
在sentry的使用中,我們發(fā)現(xiàn),sentry的授權(quán)是基于角色的,而角色又是通過組來分配的,在實際hive/impala使用當中,我們使用一個用戶,hive如何知道它有哪些權(quán)限呢?實際上是通過user -> group -> role這么一個映射關(guān)系來完成每一次權(quán)限的操作,group -> role的映射關(guān)系是通過sentry數(shù)據(jù)庫管理:
sentry通過sentry_role,sentry_group,sentry_role_group_map這3個庫管理了group和role的mapping關(guān)系。
而user-group的映射關(guān)系是如何實現(xiàn)的?
hive中有個相關(guān)選項,默認使用了hadoop的用戶組信息,也就是說,hive中涉及到user->group這個映射關(guān)系是直接用的hdfs的,而hdfs的user->group這個映射信息來自于哪里?
打開hdfs的配置,我們發(fā)現(xiàn):有這么一個配置項,hdfs的group信息默認實際是調(diào)用的本地shell的group信息!
細節(jié)明白以后,再說說實際的問題,如果我們使用默認的配置,那么hive和impala的時候,我們?nèi)ミB接hiveserver,或者impalad,如果本地沒有相應(yīng)的用戶,那么sentry就沒法獲取到 user->group 的信息,那么就無法完成權(quán)限認證的整條鏈路,就會報錯。
那么我們每次有新同事加入,就需要在每個相關(guān)節(jié)點上創(chuàng)建相應(yīng)的用戶,這樣實際上不僅麻煩,而且很low(這是最主要的),即使你寫批量腳本。
那么我們可以通過ldap來存儲這個user->group的映射關(guān)系,這樣hdfs就不必再去本地找這個映射關(guān)系了。
我們先把當前系統(tǒng)上的用戶和組導(dǎo)入到ldap,需要用到一個工具:migrationtools
yum install -y migrationtools
.修改migrate_common.ph
vim /usr/share/migrationtools/migrate_common.ph
Default DNS domain
DEFAULT_MAIL_DOMAIN = "zpbigdata.com";
Default base
DEFAULT_BASE = "dc=zpbigdata,dc=com";
利用pl腳本將/etc/passwd 和/etc/group生成LDAP能讀懂的文件格式
這里導(dǎo)入一個etl用戶來測試
cat /etc/passwd | grep etl > /tmp/passwd
cat /etc/group | grep etl > /tmp/group
/usr/share/migrationtools/migrate_base.pl > /tmp/base.ldif
/usr/share/migrationtools/migrate_passwd.pl /tmp/passwd > /tmp/passwd.ldif
/usr/share/migrationtools/migrate_group.pl /tmp/group > /tmp/group.ldif
將文件導(dǎo)入到LDAP
ldapadd -x -D "cn=Manager,dc=zpbigdata,dc=com" -W -f /tmp/base.ldif
ldapadd -x -D "cn=Manager,dc=zpbigdata,dc=com" -W -f /tmp/passwd.ldif
ldapadd -x -D "cn=Manager,dc=zpbigdata,dc=com" -W -f /tmp/group.ldif
這樣就把people和group信息導(dǎo)入了
把hadoop.security.group.mapping的值改為org.apache.hadoop.security.LdapGroupsMapping
然后填寫Ldap的相關(guān)參數(shù):
大致就是這么多項配置需要填寫,僅供參考,具體的值還是要參考你ldap中建立的group中和people中對象的具體屬性
配置完成后使用以下命令測試:
sudo -u hdfs hdfs groups xxx(username)
打印的group值如果和ldap中你配置的可以對應(yīng)上,那么就證明完成了。
后續(xù)添加新的group和user,只需要在ldap中添加就好了。
本文名稱:hdfs+hive+impala+hue+sentry與ldap整合全套方案
文章出自:http://jinyejixie.com/article46/pocdeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站內(nèi)鏈、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)、小程序開發(fā)、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)