系統環境:
作業系統: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:
說明: 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 進行測試: