kerberos認證服務搭建


    之前有段時間公司的kerberos認證老是出問題,因而我便不經深入調查,便先入為主地認為這就是MIT用來發paper的東西,毫無實用性,是為技術而技術的典范。為什么一定要它呢?我們搭的小hadoop集群沒有它也能夠運行正常。直到昨天,我需要把一個java程序部署到yarn上,在運行第一個極簡單的示例時便報錯了:```simple authentication is not enabled```。Google一下,發現yarn不支持simple的鑒權模式,必須上kerberos!這樣的設計是基於如下一個場景:一台在信任列表外的機器,向yarn提交一個惡意的程序,便可以在整個集群上以linux-executor的執行用戶做任何事情。這是應當避免的,而我也需要將5台機器上的hadoop的權限認證遷移到kerberos上。

    首先應該搭建一個kerberos認證服務器。這個參考文獻比我看到的所有其他的都好:http://web.mit.edu/kerberos/krb5-1.14/doc/admin/install_kdc.html。以下逐步記錄以下,以備將來查詢。

export KRB5_CONFIG=/yourdir/krb5.conf
export KRB5_KDC_PROFILE=/yourdir/kdc.conf

 因為這5台機器需要同時訪問公司的大kerberos,所以我們在一台機器上另建一個kerberos服務器,並配置以上環境變量,以便與另一套配置文件區分。

[libdefaults]
default_realm = MAOYAN.COM              // 默認的domain,這樣在kinit中,便可以省略了
allow_weak_crypto = false              // 強加密如弱加密,不明白是什么意思,先禁掉 dns_lookup_realm
= false               // 不走DNS,這幾台機器的域名解析都已經相互配置到hosts里了 dns_lookup_kdc = false ticket_lifetime = 24h                // ticket 過期時間 renew_lifetime = 7d                 // ticket 可延期的時間,默認是0 forwardable = true                  // ticket 是否可轉發。注意,最嚴格的限制點在服務器端的配置 udp_preference_limit = 1              // 大小超過這一限制時,先整TCP;尚不清楚單位是字節還是什么 [realms] MAOYAN.COM = { kdc = dx-movie-data-hadoop05:88        // kdc服務器,如果是master/slave模式,就重復地多寫幾行 admin_server = dx-movie-data-hadoop05:749  // kdc主服務器,如果有多台,也多寫幾行 default_domain = MAOYAN.COM           // 應該是kerberos 4和5之間兼容用的 } [appdefaults]

以上是krb5.conf文件的內容。注釋是另填上的,真正配置的時候請刪除之。

kdc.conf配置如下:

[kdcdefaults]
kdc_ports = 88,750           // kerberos監聽的udp端口;kdc_tcp_ports可以同理配置tcp端口。后者如果不設置,默認監聽88

[realms]
MAOYAN.COM = {
    kadmind_port = 749        // kadmind這個daemon監聽的端口
    acl_file = /opt/maoyan-kerberos/var/krb5kdc/kadm5.acl  // 訪問控制列表文件
    database_name = /opt/maoyan-kerberos/var/krb5kdc/principal  // kerberos數據庫文件路徑
    dict_file = /usr/share/dict/words                // unix系統的字典文件路徑,這里面的字符串是禁止作為密碼的
master_key_type
= aes256-cts    // 這個是默認 max_renewable_life = 7d 0h 0m 0s supported_enctypes = aes256-cts:normal aes128-cts:normal } [logging] kdc = FILE:/opt/maoyan-kerberos/var/logs/krb5kdc.log admin_server = FILE:/opt/maoyan-kerberos/var/logs/kadmind.log default = FILE:/opt/maoyan-kerberos/var/logs/krb5libs.log

 

 配置完這兩個文件之后,便可以生成kerberos的數據庫了: kdb5_util create -r MAOYAN.COM 。執行時會要求設置密碼,完成后會生成上面設置的```database_name```文件。

接下來,手動創建上面設置的acl_file文件。這個文件控制了持有哪些principal的會話可以修改principal本身的元數據,包括添加、修改、刪除principal等。這個文件中的內容從略,上面給的鏈接中可以找到。

下面,執行 kadmin.local 命令。注意,如果你把database_name設置到了root用戶才能修改的目錄,那么這里將同樣需要root權限。執行完這個命令之后,將進入kerberos的管理界面,你可以在上面執行對principal的DDL操作了。比如:

addprinc sankuai/admin@MAOYAN.COM;
xst -k /home/qupeng/maoyan.keytab sankuai/admin;

 

接下來,我們就可以使用sankuai/admin這個principal簽入kerberos認證了;並且如果在acl文件中恰當地配置了admin訪問元數據的權限,那么sankuai也將可以執行addprinc等操作了。

最后,執行:

krb5kdc && kadmind

 

這一bash命令,kerberos服務便搭建成功,可以使用了。

未完待續:kerberos的認證過程。William Stallings的書上有寫,然而上學的時候沒認真看,出來混終於還是要還的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM