天天看點

Hadoop配置LDAP內建Kerberos1. 環境說明2. 安裝服務端3. 用戶端配置4. 配置 Hive 內建 LDAP5. 配置 Impala 內建 LDAP

系統環境:

作業系統:centos 6.6

hadoop版本:<code>cdh5.4</code>

jdk版本:<code>1.7.0_71</code>

openldap 版本:2.4.39

kerberos 版本:1.10.3

運作使用者:root

叢集各節點角色規劃為:

cdh1作為master節點,其他節點作為slave節點,我們在cdh1節點安裝kerberos server,在其他節點安裝kerberos client。

同安裝 kerberos 一樣,這裡使用 cdh1 作為服務端安裝 openldap。

檢視安裝的版本:

如果,你不配置ssl,這部分内容可以略過,實際安裝過程中,我也沒有詳細去操作這部分内容。

openldap 預設使用 mozilla nss,安裝後已經生成了一份證書,可使用 <code>certutil -d /etc/openldap/certs/ -l -n 'openldap server'</code> 指令檢視。使用如下指令生成rfc格式ca證書并分發到客戶機待用。

附,生成自簽名證書的指令供參考:

修改 <code>/etc/sysconfig/ldap</code>,開啟 ldaps:

更新配置庫:

在2.4以前的版本中,openldap 使用 slapd.conf 配置檔案來進行伺服器的配置,而2.4開始則使用 <code>slapd.d</code> 目錄儲存細分後的各種配置,這一點需要注意,其資料存儲位置即目錄 <code>/etc/openldap/slapd.d</code> 。盡管該系統的資料檔案是透明格式的,還是建議使用 ldapadd, ldapdelete, ldapmodify 等指令來修改而不是直接編輯。

預設配置檔案儲存在 /etc/openldap/slapd.d,将其備份:

添加一些基本配置,并引入 kerberos 和 openldap 的 schema:

啟動 ldap 服務:

檢視狀态,驗證服務端口:

如果啟動失敗,則運作下面指令來啟動 slapd 服務并檢視日志:

待查明原因之後,停止該程序使用正常方式啟動 slapd 服務。

在kerberos安全機制裡,一個principal就是realm裡的一個對象,一個principal總是和一個密鑰(secret key)成對出現的。

這個principal的對應物可以是service,可以是host,也可以是user,對于kerberos來說,都沒有差別。

kdc(key distribute center)知道所有principal的secret key,但每個principal對應的對象隻知道自己的那個secret key。這也是 “共享密鑰” 的由來。

為了使 kerberos 能夠綁定到 openldap 伺服器,請建立一個管理者使用者和一個 principal,并生成 keytab 檔案,設定該檔案的權限為 ldap 服務運作使用者可讀( ldap 服務運作使用者一般為 ldap):

ktadd 後面的<code>-k</code> 指定把 key 存放在一個本地檔案中。

使用 ldapadmin 使用者測試:

系統會提示輸入密碼,如果一切正常,那麼會安靜的傳回。實際上,你已經通過了kerberos的身份驗證,且獲得了一個service tgt(ticket-granting ticket). service tgt的意義是, 在一段時間内,你都可以用此tgt去請求某些service,比如ldap service,而不需要再次通過kerberos的認證。

確定 ldap 啟動時使用上一步中建立的keytab檔案,在 <code>/etc/sysconfig/ldap</code> 增加 <code>krb5_ktname</code> 配置:

然後,重新開機 slapd 服務。

進入到 /etc/openldap/slapd.d 目錄,檢視 <code>etc/openldap/slapd.d/cn\=config/olcdatabase={2}bdb.ldif</code> 可以看到一些預設的配置,例如:

接下來更新這三個配置,建立 modify.ldif 檔案,内容如下:

說明:

上面的密碼使用的是明文密碼 secret ,你也可以使用 <code>slappasswd -s secret</code> 生成的字元串作為密碼。

上面的權限中指明了隻有使用者 <code>uid=ldapadmin,ou=people,dc=javachen,dc=com</code> 有寫權限。

使用下面指令導入更新配置:

這時候資料庫沒有資料,需要添加資料,你可以手動編寫 ldif 檔案來導入一些使用者群組,或者使用 migrationtools 工具來生成 ldif 模闆。建立 setup.ldif 檔案如下:

使用下面指令導入資料,密碼是前面設定的 secret 。

參數說明:

<code>-w</code> 指定密碼

<code>-x</code> 是使用一個匿名的綁定

接下來你可以從 /etc/passwd, /etc/shadow, /etc/groups 中生成 ldif 更新 ldap 資料庫,這需要用到 migrationtools 工具。

安裝:

利用遷移工具生成模闆,先修改預設的配置:

生成模闆檔案:

然後,可以修改該檔案,然後執行導入指令:

将目前節點上的使用者導入到 ldap 中,可以有選擇的導入指定的使用者:

将使用者組導入到 ldap 中:

查詢新添加的 test 使用者:

可以看到,通過指定 ‘uid=test’,我們隻查詢這個使用者的資料,這個查詢條件叫做filter。有關 filter 的使用可以檢視 ldapsearch 的 manpage。

使用者添加好以後,需要給其設定初始密碼,運作指令如下:

删除使用者或組條目:

在 cdh2 和 cdh3上,使用下面指令安裝openldap用戶端

修改 /etc/openldap/ldap.conf 以下兩個配置

然後,運作下面指令測試:

重新擷取 ticket:

使用 ldap 用戶端工具進行測試,這裡我使用的是 ldap browser/editor:

Hadoop配置LDAP內建Kerberos1. 環境說明2. 安裝服務端3. 用戶端配置4. 配置 Hive 內建 LDAP5. 配置 Impala 內建 LDAP
說明: cdh5.2 之前 hive-server2 支不支援內建 ldap,故需要更新 cdh 版本到高版本,如 cdh5.3,該版本支援 ldap。

我這使用的是 openldap ,故修改 hive-site.xml 配置檔案如下:

重新開機服務:

然後使用 beeline 測試:

修改 /etc/default/impala 中的 <code>impala_server_args</code> 參數,添加

注意:

如果沒有開啟 ssl,則添加 <code>-ldap_passwords_in_clear_ok=true</code>,同樣如果開啟了 ssl,則 <code>ldap_uri</code> 值為 <code>ldaps://xxxx</code>

ldap_basedn 的值是 <code>ou=people,dc=javachen,dc=com</code>,因為 impala 會将其追加到 <code>uid={使用者名},</code> 後面

然後使用 impala-shell 測試:

使用 beeline 通過 ldap 方式來連接配接 jdbc 進行測試: