淺析Kerberos原理,及其應(yīng)用和管理

文章來源:[http://www.cnblogs.com/luxianghao/p/5269739.html]


一盟广,引言

Kerberos簡單來說就是一個用于安全認證第三方協(xié)議廷粒,它采用了傳統(tǒng)的共享密鑰的方式鸳址,實現(xiàn)了在網(wǎng)絡(luò)環(huán)境不一定保證安全的環(huán)境下戳葵,client和server之間的通信就乓,適用于client/server模型,由MIT開發(fā)和實現(xiàn)拱烁。

Kerberos的神秘之處在于生蚁,它并不要求通信雙方所在的網(wǎng)絡(luò)環(huán)境是安全的,即使通信過程中數(shù)據(jù)被截取或者篡改依然不會影響它的正常工作戏自,它提供的認證是雙向的邦投,不僅能保證Server不被錯誤的Client使用,同時也能保證Client不使用錯誤的Server擅笔。同時Kerberos又嚴重依賴于時間志衣,時間戳也是Kerberos用來保證通信安全的重要手段屯援,這個一般通過通信雙方同時訪問同一個時間服務(wù)器來實現(xiàn)。Kerberos也能達到單點登錄的效果念脯,即當Client通過了Kerberos server的認證后狞洋,便可以訪問多個Real Server。

二和二,Kerberos原理淺析

在實際的應(yīng)有場景中通常有三個角色徘铝,即需要訪問服務(wù)的Client耳胎,提供服務(wù)的Application Server惯吕,以及提供安全認證的第三方Kerberos服務(wù)器KDC(Key Distribution Center)。它們彼此之間的認證怕午、通信的數(shù)據(jù)流如下圖所示废登。

0.9741018525636413.png

仔細研究過上圖之后,你可能會發(fā)現(xiàn)你能看明白的東西實在有限郁惜,而想要把Kerberos原理弄明白實在不是一件容易的事堡距,不過可以慶幸的是Kerberos是用傳統(tǒng)的共享密鑰的方式實現(xiàn)的,這個概念對大家來說并不陌生兆蕉,同時Kerberos認證還加了時間戳羽戒,有效時間,信息對比等伎倆虎韵,所以花時間細細讀下來你依然能看明白易稠,如果此時你就迫不及待的想研究的話你可以戳這里這里包蓝,或者這里∈簧纾現(xiàn)在,我們來討論下Kerberos的認證的一個部分测萎,我認為只要這個部分理解了亡电,其他的都可以遞推出來。如下圖:

1.png

Client master key: KDC中存儲的Client的密鑰

Server master key: KDC中存儲的Server的密鑰

Sclient-Server:Client與Server之間的會話密鑰

Client Info:記錄了Client本身的Ip等基本信息

首先 Client詢問KDC硅瞧,我想訪問某個Server份乒,然后KDC會將會話密鑰Sclient-Server用Client master key加密后傳送給Client;與此同時腕唧,KDC也會將會話密鑰Sclient-Server連同Client的基本信息打包用Server master key加密也發(fā)給Client或辖,并經(jīng)Client轉(zhuǎn)發(fā)給Server,至此Client與KDC的交互完成四苇。

然后孝凌,Client用自己的master key解密KDC傳過來的第一個包,解密后獲得會話密鑰Sclient-Server月腋,并用這個密鑰加密自己的的信息和時間戳打包后傳送給Server蟀架,此時Client開始和Server交互瓣赂,如下圖:
1.png

Server會收到兩個數(shù)據(jù)包,一個用會話密鑰加密片拍,一個用自己的master key加密煌集,Server先用自己的master key解密獲取會話密鑰和一份關(guān)于Client的信息,然后Server拿到解密后獲取到的會話密鑰再解開另外一個數(shù)據(jù)包捌省,獲得另一份關(guān)于Client的信息和時間戳苫纤,至此Client和Server的交互完成。

下面我們解釋下這樣傳輸數(shù)據(jù)的原因纲缓,為什么傳遞這些數(shù)據(jù)

1卷拘,上面有個數(shù)據(jù)包是KDC經(jīng)Client轉(zhuǎn)發(fā)給Server的,為什么不直接發(fā)給Server祝高?

因為Server可能給多個Client提供服務(wù)栗弟,這樣Server需要維護一個Client和會話密鑰的對應(yīng)表,這對Server是一個負擔工闺。

此外乍赫,因為網(wǎng)絡(luò)傳輸?shù)牟淮_定性可能Client和Server并不能都及時獲取到會話密鑰,假如有一方獲取失敗陆蟆,那么Client就不能訪問Server

2雷厂,為什么要發(fā)兩份關(guān)于Client的信息給Server?

通過這兩份數(shù)據(jù)的對比叠殷,Server就能判斷出是不是對的Client在訪問服務(wù)改鲫。

3,Client是如何判斷自己在訪問對的Server呢溪猿?

因為Client給Server的一個數(shù)據(jù)包是用Server的master key來加密的所以只有對的Server才能解密钩杰。

4,為什么要用會話密鑰

通信方的master key是長期有效的诊县,如果在網(wǎng)絡(luò)上傳輸讲弄,一旦被截取,理論上來說只要有足夠的時間是可以破解的依痊,所以我們才用臨時的會話密鑰來通信避除,一段時間后會話密鑰會過期,同時時間戳也防止了胸嘁,惡意用戶重復使用同一個數(shù)據(jù)包瓶摆。

5,為什么要用時間戳性宏?

如果Client向Server傳送的數(shù)據(jù)包被其他的Client截取群井,然后自己拿來向Server請求服務(wù)這,這樣就會出問題毫胜,那么引入時間戳后书斜,Server收到請求后將從解密后的數(shù)據(jù)包中獲得的時間戳和當前時間對比诬辈,一旦超過一定范圍將直接拒絕請求;所以荐吉,正如前面所說焙糟,Kerberos高度依賴時間同步服務(wù)。

事實上這個并不是Kerberos認證的整個過程样屠,KDC實際上由AS和TGS兩部分組成穿撮,你可以將TGS視作一個Server,然后還沿用上面所說的步驟來分析痪欲,這樣就可以基本上梳理出Client訪問Server的一個完整的過程了悦穿。

這些東西可能依然難于理解,你可以借助Kerberos經(jīng)典會話中的場景來理解勤揩,請戳這里或者這里咧党。

三秘蛔,Kerberos應(yīng)用

1陨亡,安裝Kerberos,搭建Kerberos環(huán)境深员,用yum安裝下列包即可

  krb5-devel.x86_64
  krb5-libs.x86_64
  krb5-workstation.x86_64

****  **krb5-server.x86_64 (僅server端需安裝)******

如果你想了解詳細的安裝步驟以及配置负蠕,請戳這里

這里我們僅貼出配置krb5.conf&kdc.conf中的主要部分

/etc/krb5.conf 中包含了realm的信息,里邊設(shè)置了server的地址倦畅,從而讓Client能夠找到Server遮糖,示例如下

<pre style="margin: 0px 0px 0px 22px; font-size: 1rem;">[libdefaults]
default_realm = ATHENA.MIT.EDU

[realms]
ATHENA.MIT.EDU = {
kdc = kerberos.mit.edu
admin_server = kerberos.mit.edu
}</pre>

/var/kerberos/krb5kdc/kdc.conf中主要保存了server端的配置,包括server端口叠赐,數(shù)據(jù)庫存放地址欲账,票據(jù)有效期等,示例如下:

<pre style="margin: 0px 0px 0px 22px; font-size: 1rem;">[kdcdefaults]
kdc_ports = 88,750

[realms]
ATHENA.MIT.EDU = {
kadmind_port = 749
max_life = 12h 0m 0s
max_renewable_life = 7d 0h 0m 0s
database_name = /var/krb5kdc/principal
acl_file = /var/krb5kdc/kadm5.acl
}</pre>

2芭概, 名詞解釋

KDC:即Key Distribution Center, 密鑰分發(fā)中心赛不,負責頒發(fā)憑證
Kinit:Kerberos認證命令,可以使用密碼或者Keytab罢洲。
Realm:Kerberos的一個管理域踢故,同一個域中的所有實體共享同一個數(shù)據(jù)庫
Principal:Kerberos主體,即我們通常所說的Kerberos賬號(name@realm) 惹苗,可以為某個服務(wù)或者某個用戶所使用
Keytab:以文件的形式呈現(xiàn)殿较,存儲了一個或多個Principal的長期的key,用途和密碼類似桩蓉,用于kerberos認證登錄淋纲;其存在的意義在于讓用戶不需要明文的存儲密碼,和程序交互時不需要人為交互來輸入密碼院究。

3洽瞬,簡單使用

在安裝好Kerberos和對Kerberos有一個簡單的認識之后玷或,你就可以試用一下了,最基本的命令就是kinit片任,是Client用來從KDC獲取票據(jù)的偏友,示例如下:

a,使用密碼: kinit name@realm 然后根據(jù)提示輸入密碼即可

b对供,使用keytab: kinit -kt /path/to/keytab name@realm

kinit成功之后你獲取的票據(jù)就會緩存到本地位他,可以用klist查看,實例如下:

Ticket cache: FILE:/tmp/krb5cc_0
Default principal: h_test@XIAOMI.HADOOP

Valid starting Expires Service principal
03/13/16 17:08:42 03/14/16 17:08:42 krbtgt/ATHENA.MIT.EDU@ATHENA.MIT.EDU
renew until 03/11/26 17:08:42

從中也可以看到過期時間产场。

如果你要銷毀當前獲取的票據(jù)鹅髓,用kdestroy即可。

當然在kinit之前京景,server端首先要有你的賬號窿冯,這就需要管理員使用addprinc命令在Kerberos數(shù)據(jù)庫中添加,更多詳情請戳這里确徙。

4醒串,Kerbeos在Hadoop上應(yīng)用

在Hadoop的早期版本(1.0.0)之前是沒有安全認證機制的,集群默認自己的節(jié)點都是安全的鄙皇,這樣就導致了惡意用戶的輕易入侵芜赌,修改集群數(shù)據(jù),修改任務(wù)狀態(tài)伴逸,提交任務(wù)等問題缠沈。

1.0.0后的版本加入Kerberos認證后,部署集群時需要事先將密鑰放在要部署的節(jié)點上错蝴,這樣集群內(nèi)的節(jié)點都是通過認證的節(jié)點洲愤,只有通過認證的節(jié)點才能被正常使用,同樣顷锰,通過認證的Client才能使用服務(wù)柬赐。

如果要結(jié)合上面所說的原理,那么將上面說的Server換成Hadoop集群中的Namenode馍惹,Datanode即可躺率。

四,Kerberos賬號管理

Kerberos本身的數(shù)據(jù)庫中不能查看密碼的万矾,也沒有保存賬號使用人等信息悼吱,所有的信息都需要以命令行的形式獲取,管理起來極不方便良狈,因此我們就開發(fā)了一套基于Django web框架的Kerberos賬號管理系統(tǒng)(Kerberos Account Management System后添,簡稱KAS),以此來提高管理員的工作效率薪丁,讓管理員更有效遇西、更有條理的管理Kerberos賬號馅精,KAS的基本組件如下:

權(quán)限管理模塊:設(shè)定了用戶,用戶組等角色粱檀;admin洲敢,read等權(quán)限類型;并將Kerberos賬號視作一種資源類型茄蚯;這樣就有了某個角色压彭,擁有某種資源的某種權(quán)限的一種通用架構(gòu),所以渗常,這個模塊適用于各種資源管理系統(tǒng)壮不。

工具管理模塊:里邊包含了KAS需要的各種工具,例如KAS和Kerberos server交互的工具皱碘,郵件發(fā)送工具等询一。

賬號申請模塊:為了減少溝通成本,我們設(shè)計了用戶提交申請癌椿,管理員審批的賬戶申請流程健蕊,在審批階段用戶和管理員可以對申請賬號做出評論,并可以視情況對申請賬號做出重新編輯如失,撤銷申請等操作绊诲,一旦有人提交了申請,做出了評論褪贵,或者其他操作系統(tǒng)會發(fā)郵件通知管理員和用戶,以便減少賬號申請時間抗俄。

賬號管理模塊:對于通過審批的賬號脆丁,用戶可以查看密碼,導出賬號keytab动雹,查看賬號owner等槽卫,對賬號有admin權(quán)限的賬戶還可以將賬號授權(quán)給他人使用,以此來減小管理員的工作量胰蝠。

API模塊:由于有一些特殊人員因為工作的需要歼培,希望查看或者使用owner為其他人的賬號,所以我們設(shè)計了API模塊茸塞;當有人需要使用API接口時躲庄,需要向管理員申請將自己設(shè)為超級用戶,同時超級用戶需要維護一個自己的機器列表钾虐,只有在此機器列表包含的Host上才能使用API接口噪窘,此外超級用戶還需要到系統(tǒng)中查看自己的auth_token,用于在使用API接口時做校驗效扫。

Replicate模塊:Web端的增刪改查等操作只是修改了MySQL數(shù)據(jù)庫倔监,此時我們需要Replicate模塊將MySQL中的修改實時同步到Kerberos自己的數(shù)據(jù)庫中直砂。

機房間同步模塊:當多個機房都需要使用Kerberos認證的時候,我們就需要機房間同步模塊將主Server上的修改同步到其他機房中來保證數(shù)據(jù)的一致性浩习。

備份模塊:用于備份MySQL中和Kerberos Server中的數(shù)據(jù)以防數(shù)據(jù)丟失或者其他意外發(fā)生静暂。

KAS的整體架構(gòu)圖如下:


1.png

服務(wù)的安全以及高可用:

對于Web Server我們采用了Keepalived vip漂移的方式來保證服務(wù)的高可用性,同一時刻只有一臺Server工作谱秽,寫MySQL數(shù)據(jù)庫籍嘹。

主Server上的Replicate模塊會將MySQL中的修改實時同步到Kerberos Server中,又通過Rsync加密弯院、增量傳輸?shù)姆绞桨阎鱏erver中的Kerberos數(shù)據(jù)庫的更改同步到其他的Kerberos Server的數(shù)據(jù)庫中(包括同機房的和不同機房的)辱士。

通常一個機房中的Kerberos Server有兩個,我們采用LVS或者Keepalived的方式保證服務(wù)的高可用听绳。

Web Server颂碘,Replicate模塊等的進程我們用God的守護,以確保服務(wù)在異常停止后能自動拉起椅挣。

此外头岔,由于Kerbeos是比較基礎(chǔ)的服務(wù),又比較敏感鼠证,所以我們還做了端口監(jiān)控峡竣,機器級別的安全加固等。

下面簡單列一下KAS開發(fā)前后狀態(tài)的對比量九,如下:


1.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末适掰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荠列,更是在濱河造成了極大的恐慌类浪,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肌似,死亡現(xiàn)場離奇詭異费就,居然都是意外死亡,警方通過查閱死者的電腦和手機川队,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門力细,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人固额,你說我怎么就攤上這事眠蚂。” “怎么了对雪?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵河狐,是天一觀的道長。 經(jīng)常有香客問我,道長馋艺,這世上最難降的妖魔是什么栅干? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮捐祠,結(jié)果婚禮上碱鳞,老公的妹妹穿的比我還像新娘。我一直安慰自己踱蛀,他們只是感情好窿给,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著率拒,像睡著了一般崩泡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猬膨,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天角撞,我揣著相機與錄音,去河邊找鬼勃痴。 笑死谒所,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的沛申。 我是一名探鬼主播劣领,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铁材!你這毒婦竟也來了尖淘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤衫贬,失蹤者是張志新(化名)和其女友劉穎德澈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體固惯,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年缴守,在試婚紗的時候發(fā)現(xiàn)自己被綠了葬毫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡屡穗,死狀恐怖贴捡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情村砂,我是刑警寧澤烂斋,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響汛骂,放射性物質(zhì)發(fā)生泄漏罕模。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一帘瞭、第九天 我趴在偏房一處隱蔽的房頂上張望淑掌。 院中可真熱鬧,春花似錦蝶念、人聲如沸抛腕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽担敌。三九已至,卻和暖如春廷蓉,著一層夾襖步出監(jiān)牢的瞬間全封,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工苦酱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留售貌,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓疫萤,卻偏偏與公主長得像颂跨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扯饶,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 最近老在項目的shell腳本中看到kinit這個東西恒削,完整的命令是 kinit -k -t ./conf/kerb...
    sherlockyb閱讀 42,149評論 0 18
  • 這篇文章介紹了Mobile BI(移動商務(wù)智能)使用過程中涉及的各種身份認證的方式,主要目的是對這些方式的原理進行...
    雨_樹閱讀 2,018評論 1 2
  • 隸屬于文章系列:大數(shù)據(jù)安全實戰(zhàn) http://www.reibang.com/p/76627fd8399c 背景...
    xuefly閱讀 868評論 0 1
  • 版權(quán)聲明:本文為博主原創(chuàng)文章尾序,未經(jīng)博主允許不得轉(zhuǎn)載钓丰。http://www.reibang.com/p/e00f8...
    Moon_魔寬閱讀 1,262評論 0 0
  • 今天已經(jīng)是國慶長假最后一天了,在群里學習了師兄師姐的簡書每币。感受到大家分享各自的快樂心情携丁,都洋溢著幸福...
    菩提樹下_1b26閱讀 176評論 1 4