CDP 推薦使用 Kerberos 作為認證機制,從使用者到服務的認證,都可以使用 Kerberos。然而,Kerberos 登入有兩個方式,一是使用密碼,二是使用 keytab 檔案。我們通常會規劃一般使用者的權限範圍,好讓使用者可以在公司的規範中使用 CDP。
但我們如果碰到需要取得更高權限的帳號,以便進行需要特定權限的操作,或者模擬不同的 service 來存取 CDP 的話,可以怎麼做呢?
我們希望對 HDFS 執行 fsck
或產製報表 (dfsadmin -report
)等操作,但一般使用者的帳號權限不夠大,因此碰上了點麻煩,如下圖:
由於 CDP 給予一般使用者的權限大多透過 HDFS 的 ACL 及 Ranger 來控制,但有些特殊操作則只能由最高權限的服務帳號來執行,因此即使在 Ranger 與 HDFS ACL 的 policy 都開通使用者存取 HDFS 所有目錄與檔案了,仍然會有些操作無法使用。
CDP 透過 Kerberos 的機制,不只認證使用者,也認證 service 的執行,而特別是 service 的帳號,可以獲得操作該 service 的最高權限身份。
因此,我們可以透過取得 service 自己的 keytab,來進行身份的切換。
以下以 HDFS 的 service 帳號認證方式來示範。
首先,請先進入 master 或 worker node,並提權至 root
的身份,因為我們要進入只有 root
才進得去的目錄。
接著,切換 (cd
) 到 /var/run/cloudera-scm-agent/process
的目錄裡:
這個目錄是 CM Agent 在執行每個 service 時的工作目錄,而通常 HDFS 的兩大 role - Name Node 及 Data Node 會分別安設在 master 或 worker node 上:
找到後切換進去,接著就是檢查裡面是否有一個 hdfs.keytab
的檔案:
若有,則使用 klist -kt hdfs.keytab
確認這個 keytab 檔案裡的完整帳號名稱 (principal)
最後,使用 kinit -kt hdfs.keytab <principal>
進行登入。
登入後可使用 klist
檢查現在的身份。
別忘了,操作完成後,得用 kdestroy -A
把現在的 Kerberos ticket 銷毀。