您好,登錄后才能下訂單哦!
Kerberos古已有之,是由MIT開發,對三方進行驗證鑒權的服務安全管理系統,很好的體現了西方三權分立的思想。名字來源于希臘神話地獄三個腦袋的看門狗,這只狗在哈利波特中也路過臉。
對,跳吧,跳進坑里去吧。一入K坑深似海,從此作者不早起。
系統設計上采?用客戶端/服務器?結構與DES加密技術,并且能夠進?行行相互認證,即客戶端和服務器?端均可對對?方進?行行身份認證。可以?用于防?止竊聽、防?止replay攻擊、保護數據完整性等場合,是?一種應?用對稱密鑰體制進?行行密鑰管理理的系統。百度百科
哪怕是一個最基本的用戶登錄驗證體系,都會包含三個部分,驗證,授權,請求服務。Kerberos也不例外,同樣分為這三個階段。
Kerberos有幾個關鍵的服務或者是功能我們必須了解,其中KDC是核心,全稱叫做Key Distributed Center,我們可以把它想象成銀行的數據庫。所有初始的驗證授權工作都是在這里進行的。然后你可以把ATM提供鈔票這個事作為服務來看待(Desired Network Service)。
Kerberos有幾個關鍵的服務或者是功能我們必須了解,其中KDC是核心,全稱叫做Key Distributed Center,我們可以把它想象成銀行的數據庫。所有初始的驗證授權工作都是在這里進行的。然后你可以把ATM提供鈔票這個事作為服務來看待(Desired Network Service)。
第一步是驗證(Authentication),你必須證明自己是自己,這會需要你提供一個認證主體,這就是Kerberos里面的Principal,你可以把它想象成銀行卡,如果你沒有Principal,那么就相當于你去銀行取錢沒有帶卡一樣。當然ATM取錢是不需要×××的,所以你必須確保你的銀行卡及密碼不會落入劫匪的手里,顯然不在朋友圈炫富是你需要注意的事,不是Kerberos的事。
那么Principal就相當于是你的銀行卡,帶卡之后需要做什么呢,當然你要給出銀行卡的密碼,如同現實世界一樣,無論是你,還是你的親屬只要他有你的銀行卡,有你的密碼,就可以從ATM取錢。Kerberos也是這樣,每一個Principal都有其對應的密碼,這是這個Principal在創建時必須要做的一件事,同時你要保護好自己的密碼。不過這里有一點不同的地方,Kerberos的Principal的密碼并不是用來做用戶身份識別用的,密碼是用來加密傳輸票據來用的,所以密碼是不會在網絡上傳輸的。
客戶端,也就是你,給出了銀行卡,輸入了密碼,然后客戶端Kerberos會用你給出的密碼用DES算法加密一段數據,我們稱之為TGT(Ticket-Granting Ticket),這個TGT會發送給KDC的AS服務,也就是Authentication Service。然后AS會用本地的Kerberos用戶數據庫中的數據對客戶端給過來的TGT進行比對,如果結果一致,則發還一個驗證通過的TGT給client,如果不一致,則拒絕提供下一步的服務。
假設ATM通過銀行的數據庫認可了你的身份,那么接下來就要看你是要取錢,還是要轉賬,在這里我們需要把取錢和轉賬的權限分開以便做說明,而現實世界里,ATM既能取錢也能轉賬。
接下來,客戶端需要發送第二個假面TGT給KDC的票據批準服務(Ticket Granting Service),看看當前這張銀行卡是不是具有轉賬的權力。
如果這張銀行卡具有轉賬的權力,則TGS會發還給Client一個新的TGT,告訴Client,你的身份確認無誤,具備轉賬的權力,你可以操作轉賬選項了(Desired Network Service)
然后Client會拿這這張票據去請求轉賬。而轉賬操作當然也會對KDC發起請求,類似Client,在這里不再贅述
大致的流程是這樣的,不過我想,對于初次接觸Kerberos的人來說,一個值得區別理解的概念是,Kerberos并不是用來保護服務器或者操作系統的,那是SSH干的事。Kerberos更多的是用來保護基于操作系統的應用服務的,比如MySQL,PostgreSQL,Hadoop,HBase這樣的服務請求。換句話說,SSH做的工作是詢問你是誰。而Kerberos的工作是驗證你要干什么?
接下來,我們需要知道Kerberos中的一些關鍵性的名詞定義以方便我們的理解。
KDC,我們已經知道了,kerberos的核心服務。
Principal,身份認證主體,如果仍然理解困難,那么把它想象成你的SSH用戶名吧。
Keytab,基于Principal生成的密鑰文件,如果不明白,把它想象成SSH的免密碼登錄的私鑰。
TGT,使用密碼或者keytab作為密鑰生成的加密數據,作為請求KDC服務的票據數據包,但并不包含密碼或者密鑰。
SPNEGO,并不包含在Kerberos的標準服務中,是微軟擴展的一個插件,主要用來作基于Kerberos的HTTP服務的保護,全稱是Simple Protected GSSAPI Negotiation。換句話說,是用Kerberos來保護HTTP服務請求,比如Rest服務。
Kerberos第一篇的最后,我們來拆解一個Principal來了解這張銀行卡的構成。
xianglei/dmp-master1.hadoop@HADOOP.COM
一個完整的Principal由3個部分構成。
用戶名/FQDN(Full Quafilied Domain Name)的主機名@REALM(受保護的域,全大寫)
當然這個用戶名需要是Linux下存在的用戶
FQDN全限定域名,就是一定要帶上hostname.domain這種形式,當然,如果你的主機并沒有給出domain,那么不寫域名也可以。反正就是要全部的主機名加域名(如果存在域名的話)。但實際上,在Kerberos里面,這個并不稱之為主機名,而是叫做Instance,實例名,他可以不是任何服務器的主機名稱,但是便于理解和認識,我們還是先把他當初主機名來看待吧。
REALM,受到Kerberos保護的域名稱,就是一類或一組受到Kerberos保護服務的服務器集合,你可以想象成Windows里面的域。由于一個KDC可以同時保護多個域,比如你可以在一個KDC上既保護HADOOP服務器組,也保護MYSQL服務器組,所以我們通常會使用域名來進行區別。
如果你的hostname里面使用了domain name,那么你必須在Principal的第二部分寫完整,否則KDC將無法驗證主機的合法性,加密的tgt是要帶著主機名信息的。
還有,特別需要注意的是,這里面第二部分的domain(域名),第三部分的realm(域),在中文里的字是一樣,但是英文單詞完全不同,他們所表達的含義也完全不同。由于通常Kerberos的Realm部分也會寫成域名的形式,所以就會讓人迷惑,而實際上,你把realm部分理解成windows里面的workgroup或者home這種域也是可以的。名稱可以隨便起,不一定用你的真實域名。只是個區分不同服務集合的代號。
下一篇寫安裝配置?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。