Step by Step 實現基于 Cloudera 5.8.2 的企業級安全大數據平臺 - OpenLDAP的整合 - 通過搜索綁定實現用戶和組的映射

在閱讀本文前,為了避免概念模糊,閱讀障礙,請先看完Step by Step 實現基于 Cloudera 5.8.2 的企業級安全大數據平臺 - OpenLDAP的整合,因為很多參數和概念都是延續下來的。

直接綁定和搜索綁定

因為使用直接綁定方式,會導致集群無法被多個團隊的多個角色混用。舉個例子,我們有這樣的場景:

  • 用戶 a1 屬于組 A,組 A 對應 Sentry 中的 dev 角色;
  • 用戶 a2 屬于組 A,組 A 對應 Sentry 中的 dev 角色;
  • 用戶 b1 屬于組 B,組 B 對應 Sentry 中的 ops 角色;
  • 用戶 b2 屬于組 B,組 B 對應 Sentry 中的 ops 角色;

在直接綁定方式下,我們是達不到需求的,因為我們的 LDAP 目前沒有用戶和組的映射概念。為什么這么說?我們現在的 LDAP 節點關系在 ou 下,只有一層,直接就是用戶uid了。假設我們定義了用戶 a1 的 dnuid=a1,ou=people,dc=domain,dc=com ,同時我們也用一樣的方式定義了 a2, b1, b2 三個用戶。所以我們需要引入搜索綁定,多定義一層組的概念,才可以完成需求。也就是說 dn 應該長這樣:uid=a1,cn=A,ou=groups,dc=domain,dc=com,這里的 cn 就是組的概念。我們可以通過搜索綁定結合 LDAP 的 posix group / user ,實現用戶和組的映射,達到細粒度的權限控制。目前筆者只做到了一級分組,也就是說當公司壯大了之后,層級繁多情況下,是需要多層級的分組的。不過就我在阿里的 HBASE 運維經驗來看,不同 BU 也可以做集群物理隔離。尤其是在 docker 日益火熱的當下,這也不是什么問題,甚至虛擬化也可以滿足我們的需求。再者,公司面對的私/專有云輸出用戶,一層權限細分在近1年場景下是絕對足夠的。

關于配置,很簡單,但是當時也是研究一些時間(被虐了3天左右),因為對 LDAP 不熟悉么,呵呵。在 Cloudera Mnager 中修改 HUE 配置,使用搜索綁定進行認證:

Use Search Bind Authentication = true # 使用搜索綁定認證
LDAP Search Base = dc=domain,dc=com
LDAP Bind User Distinguished Name = uid=ldap,ou=people,dc=domain,dc=com
LDAP Bind Password = ${BIND_PASSWORD}
LDAP User Filter = (objectClass=posixAccount)
LDAP Username Attribute = uid
LDAP Group Filter = (|(objectClass=organizationalUnit)(objectClass=posixGroup))
LDAP Group Name Attribute = cn
LDAP Group Membership Attribute = memberUID # 非常重要,否則無法識別映射

這里的 ${BIND_PASSWORD} 是在 Step by Step 實現基于 Cloudera 5.8.2 的企業級安全大數據平臺 - OpenLDAP的整合 中 **LDAP 的部署 **這一節中創建的 ldap 用戶的密碼。在這一步中:

  • 我們開啟了搜索綁定認證方式,搜索的基礎過濾字符串為 dc=domain,dc=com ,表示我們只搜索 LDAP 中 dc=com 節點下的 dc=domain 節點下的 dn (Distinguishied Name)
  • 在搜索的時候,我們使用的 dn 為 uid=ldap,ou=people,dc=domain,dc=com,這相當于是我們的超級管理員賬戶
  • LDAP 預先定義了多種關于賬戶的 objectClass,我們使用 posixAccount 作為后續的賬戶對象, 因為它具備和組映射相關的屬性 gidNumber
  • 同時,我們使用 posixGrouporganizationalUnit 作為對組過濾的條件,前者具備核心屬性 gidNumber 可以和 posixAccount 進行映射, 后者是因為我們之前在初始化的時候已經創建了一部分以 organizationalUnit 為基礎的組(可以認為是公司的 BU 概念),是為了做到向后兼容。 posixGroup 還有一個非常關鍵的屬性 memberUid ,它可以定義該組下面的成員列表,方便我們后續在 HUE 中按照組維度批量導入其下所有用戶賬戶。

接下來我們談談如何正確的把 Unix / HDFS 用戶導入到 LDAP 再導入到 HUE中,打通四者賬戶體系。

Unix / HDFS / LDAP / HUE / Sentry 賬戶體系

對于對接了 LDAP 作為默認賬戶管理的 HUE 而言,首先要有概念,整個鏈路上包含5個賬戶體系:

  • Unix 賬戶,大數據服務端集群必須存在對應的用戶/組,是基礎賬戶數據,目前HDFS賬戶對它是強依賴和一一對應;
  • HDFS 賬戶,因為我們默認配置的是 ShellBasedUnixAccount,所以和 Unix 賬戶是強映射的,大家可以仔細想下自己平時在終端怎么訪問 HDFS 的;
  • LDAP 賬戶,大數據 LDAP 服務,數據來自Unix賬戶;
  • HUE賬戶,大數據前端分析平臺賬戶,數據來自 LDAP;
  • Sentry賬戶,其實 Sentry 使用的還是 HDFS 賬戶,但是從權限角度講 Sentry 的 Role 對應了 HDFS 的組,這個概念映射要特別留意;

所以理論上的操作序列為:

  • 在每一臺部署有大數據服務的機器上,初始化 Unix 賬戶,當然 Cloudera 已經在部署的時候幫我們初始化了一系列賬戶,比如 hdfs, yarn, hive, hbase 等;
  • 把 Unix 賬戶信息同步至 OpenLDAP;
  • 把 OpenLDAP 的賬戶信息同步至 HUE;
  • 在 HUE 中進行 Sentry 的權限分配;

下面詳細說下如何操作, 我們需要的權限包括 Unix 服務器的 root 權限,用于創建用戶和組。 LDAP 服務器的超級管理員權限,用于數據導入。 HUE 的超級管理員權限, 用于用戶和組信息同步,和 Sentry 權限分配。

新建 Unix 組 / 賬戶

以用戶 yuanye 為例,他屬于 bigdata_ops 組, 在 bigdata 這個部門, 公司是 domain.com。我們在所有部署了 Cloudera Agent 的服務器上創建用戶 yuanye, 從屬組為 bigdata_ops, 假設 uid=1001gid=1000。可以通過終端命令 id yuanye 查看 uidgid。創建用戶,并且使之從屬于 bigdata_ops

sudo useradd yuanye -g bigdata_ops # 請切記密碼,因為一會需要使用它登錄 HUE
id yuanye # 查看 uid 和 gid

出現如下信息表示創建成功:

uid=1001(yuanye) gid=1000(bigdata_ops) groups=1000(bigdata_ops)

使用初始密碼進行登錄,確認密碼是否配好:

su - yuanye

切記, Unix 賬戶、LDAP 賬戶的密碼必須一致,否則無法進行 Sentry 賦權。

如果可以正常登錄用戶,表示密碼是OK的。

導入 Unix 組 / 賬戶至 LDAP

我們當然可以使用 LDAP 的 GUI 工具進行工作,但是為了便于理解,我們使用 ldif 文件和 ldapadd 命令進行操作。

好,接下來我們嘗試往 LDAP 中添加一個測試組 bigdata_ops,先修改 ldif 文件 /tmp/create_group_bigdata_ops.ldif,其中定義了一個名為 bigdata 的ou,可以理解為大數據部門,定義了一個 bigdata_ops 的組,我們理解為大數據運維團隊:

dn: cn=bigdata_ops,ou=bigdata,dc=domain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: ${UNIX_GROUP_NUMBER}
memberUID: ${MEMBER_UID} # 非常重要,否則無法識別映射
description: ${DESCRIPTION_STIRNG}

使用 ldapadd 導入,ldap 超級管理員密碼是您之前在這篇中定義的 Step by Step 實現基于 Cloudera 5.8.2 的企業級安全大數據平臺 - OpenLDAP的整合

sudo ldapadd -x -D "uid=ldap,ou=people,dc=domain,dc=com" -W -f /tmp/create_group_bigdata_ops.ldif -h 192.168.1.1

查看已經導入的用戶組 bigdata_ops

sudo ldapsearch -x -D "uid=ldap,ou=people,dc=domain,de=com" -W -b "cn=bigdata_ops,ou=bigdata,dc=domain,dc=com" -h 192.168.1.1

在 LDAP 中添加 yuenye 用戶,先創建 ldif 文件 /tmp/create_user_yuanye.ldif,我們先不在這里定義密碼,因為這樣的話在執行 ldapsearch 的時候所得到的密碼屬性是明文,并不安全:

dn: uid=yuanye,cn=bigdata_ops,ou=bigdata,dc=domain,dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
givenName: ye
sn: yuan
cn: yuanye
mail: yuanye@domain.com
telephoneNumber: XXXXXXXXXXX
mobile: XXXXXXXXXXX
manager: whoami
uid: yuanye
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/yuanye
loginShell: /bin/bash

使用 ldapadd 導入:

sudo ldapadd -x -D "uid=ldap,ou=people,dc=domain,dc=com" -f /tmp/create_user_yuanye.ldif -h 192.168.1.1 -W

使用 ldapmodify 修改密碼:

sudo ldappasswd -x -D "uid=ldap,ou=people,dc=domain,dc=com" -W   "uid=yuanye,cn=bigdata_ops,ou=bigdata,dc=domain,dc=com" -S -h 192.168.1.1

再執行 search 的時候會發現多了一行 userPassword 屬性,是加密后的密碼:

sudo ldapsearch -x -D "uid=ldap,ou=people,dc=domain,de=com" -W -b "uid=yuanye,cn=bigdata_ops,ou=bigdata,dc=domain,dc=com" -h 192.168.1.1
...
...
...
...
userPassword:: *****************

在已經存在的 LDAP 組添加用戶

假設我們現在在已經存在的 bigdata_ops 組里想添加一個新的用戶,我們該怎么做呢?以添加 zhouhua 用戶為例,假設我們已經創建了 Unix 賬戶, uid 為 1002,也是從屬于 bidata_ops 組。我們首先還是創建 ldif 文件 /tmp/create_user_zhouhua.ldif

dn: uid=zhouhua,cn=bigdata_ops,ou=bigdata,dc=domain,dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
givenName: hua
sn: zhou
cn: zhouhua
mail: zhouhua@domain.com
uid: zhouhua
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/zhouhua
loginShell: /bin/bash

創建 ldif 文件 /tmp/add_user_zhouhua_to_group_bigdata_ops.ldif

dn: cn=bigdata_ops,ou=bigdata,dc=domain,dc=com
changetype: modify
add: memberUid
memberUid: zhouhua

添加用戶至組:

sudo ldapadd -x -D "uid=ldap,ou=people,dc=domain,dc=com" -W -f /tmp/create_user_zhouhua.ldif -h 192.168.1.1

添加組和用戶的映射:

sudo ldapmodify -x -D "uid=ldap,ou=people,dc=domain,de=com" -W -f /tmp/add_user_zhouhua_to_group_bigdata_ops.ldif -h 192.168.1.1

至此,我們已經添加了兩個用戶 yuanye zhouhua 至分組 bigdata_ops

同步 LDAP 組 / 賬戶至 HUE

請注意,LDAP 中的組對應 HUE 中的組,對應 Sentry 中的一個 Role。所有 LDAP 組下的用戶,都具備該組對應 Role 的權限,這樣就達到了同組用戶通角色的目的。

使用 admin 身份登錄 HUE,選擇 Manage Users -> Add/Sync LDAP Group,輸入組名稱 bigdata_ops,勾選Import new members,點擊Add/Sync group,即完成導入,這個時候可以看到已經導入了 yuanyezhouhua 兩個 用戶。

小結

至此,我們講完了基于搜索綁定 功能的用戶和組映射實現。我們可以利用此功能輕松實現 HUE 基于 LDAP 的權限控制,并且映射到 Sentry 的角色。接下來我們會聊聊,傳輸層加密的那點事兒。我們即使已經實現了 Kerberos 認證, 但是現在數據的平臺內外部傳輸,是通過明文,這仍然是有極大安全隱患的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容