歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix教程

FreeBSD上使用Kerberos 5認證一

FreeBSDKerberos
  第一部分 Kerberos 協議介紹
  
  1.Kerberos 協議簡介
  
  在希臘神話中,Kerberos是守護地獄之門的三頭狗。在計算機世界裡,美國麻省理工學院(MIT)把他們開發的這一網絡認證系統命名為 Kerberos。 Kerberos認證協議是由美國麻省理工學院(MIT)在80年代首先提出並實現的,是該校Athena計劃的一部分。因為Kerberos是一個三方認證協議,根據稱為密匙分配中心(KDC)的第三方服務中心來驗證網絡中計算機相互的身份,並建立密匙以保證計算機間安全連接。Kerberos協議基本上是可行的並且有效的。KDC有兩個部分組成:認證服務器AS和票據授權服務器TGS。Kerberos是一種網絡認證協議,允許一台計算機通過交換加密消息在整個非安全網絡上與另一台計算機互相證明身份。一旦身份得到驗證,Kerberos協議將會給這兩台計算機提供密匙,以進行安全通訊對話。 Kerberos協議可以認證試圖等錄上網用戶的身份,並通過使用密匙密碼為用戶間的通信加密。總的來說,Kerberos 是一種基於私鑰加密算法的,需要可信任的第三方作為認證服務器的網絡認證系統。它允許在網絡上通訊的實體互相證明彼此的身份,並且能夠阻止旁聽和重放等手段的攻擊。不僅如此,它還能夠提供對通訊數據保密性和完整性的保護。
  
  Kerberos從提出到今天,共經歷了五個版本的發展。其中版本1到版本3主要由該校內部使用。當它發展到版本4的時候,已經取得了在MIT校園外的廣泛認同和應用。由於版本4的傳播,人們逐漸發現了它的一些局限性和缺點(例如適用網絡環境有限, 加密過程存在冗余等等).MIT充分吸收了這些意見,對版本4進行了修改和擴充,形成了今天非常完善的版本5。現在可以MIT提供的Kerberos V5的最新實現是版本krb5 1.3.3,本文中提到的實現都是以它為依據的。
  
  2.Kerberos協議術語解釋
  
  Principal:在Kerberos中,Principal是參加認證的基本實體。一般來說有兩種,一種用來表示Kerberos數據庫中的用戶,另一種用來代表某一特定主機,也就是說Principal是用來表示客戶端和服務端身份的實體, Principal的格式采用ASN.1標准,即Abstract Syntax Notation One,來准確定義),Principal是由三個部分組成:名字(name),實例(instance),REALM(域)。比如一個標准的 Kerberos的用戶是:name/instance@REALM 。
  
  Name:第一部分。在代表客戶方的情況,它是一個用戶名;在代表主機的情況,它是寫成host。
  
  Instance:第二部分。對name的進一步描述,例如name所在的主機名或name的類型等,可省略。它與第一部分之間用‘ / ’分隔,但是作為主機的描述時寫成host/Instance。
  
  Realm:第三部分。是Kerberos在管理上的劃分,在 KDC中所負責的一個域數據庫稱作為Realm。這個數據庫中存放有該網絡范圍內的所有Principal和它們的密鑰,數據庫的內容被Kerberos 的認證服務器AS和票據授權服務器TGS所使用。Realm通常是永遠是大寫的字符,並且在大多數Kerberos系統的配置中,一般Realm和該網絡環境的DNS域是一致的。與第二部分之間用‘@’分隔,缺省為本地的Realm。
  
  比如,Principal “ cnhawk/[email protected] ” 表示Realm “ THE9.COM ”中主機hawk.the9.com上的用戶cnhawk ,而Principal “ host/hawk.the9.com @THE9.COM ” 則通常用來表示Realm “ THE9.COM”中主機hawk.the9.com。
  
  Credential: Ticket和與它相聯系的會話密鑰合在一起稱為Credential。之所以有這個概念是因為它們是客戶端在向服務器證明自己的身份時必需的兩樣東西.在一個Ticket的生存期內客戶端會將這兩樣東西以Credential為單位保存在一個Cache文件中。
  
  Ticket:一個Ticket是一個用於安全的傳遞用戶身份所需要的信息的集合。它不僅包含該用戶的身份,而且包含其它一些相關的信息。一般來說,它主要包括客戶方 Principal,目的服務方Principal,客戶方IP地址,時間戳(分發該Ticket的時間),該Ticket的生存期,以及會話密鑰等內容。它的格式亦用ASN.1來准確定義。
  
  Authenticator: 在客戶端向服務端進行認證時,伴隨Ticket一起發送的另外一個部分,它的作用是證明發送Ticket 的用戶就是擁有Ticket的用戶,即防止重放攻擊。它的主要內容是一個時間戳(客戶端發送Ticket的時間),在rfc1510中有它的完整的 ASN.1定義。
  
  AS(Authentication Server): 為用戶分發TGT(Ticket Granting Ticket)的服務器。
  
  TGT(Ticket Granting Ticket): 用戶向TGS(Ticket Granting Server)證明自己身份的Ticket.
  
  TGS(Ticket Granting Server):為用戶分發到最終目的Ticket的服務器,用戶使用這個Ticket向自己要求提供服務的服務器證明自己的身份。在實現上,AS和TGS實際上是由同一程序完成的,因為它們的實現機制並沒有太大的差別,只是在加密所發出的Ticket時所使用的密鑰不同(AS使用用戶的密鑰,而TGS使用會話密鑰)。
  
  KDC(Key Distribution Center):密鑰發放中心,通常將AS和TGS統稱為KDC,有時也把AS 單獨稱為KDC。
  
  3.認證過程
  
  1) Client → KDC:用戶cnhawk向密鑰分配中心(KDC)申請TGT;
  
  2) KDC → Client:通過KDC的用戶密碼認證,cnhawk得到KDC發放的TGT;
  
  3) Client → KDC:申請取得用戶cnhawk所需要的host/s;
  
  4) KDC → Client:KDC根據用戶cnhawk提供的TGT,KDC向cnhawk發放host/s;
  
  5) Client → Server:用戶cnhawk向Server提供cnhawk,TGT和host/s ;Server根據主機的上保存的host/s和用戶cnhawk的信息來驗證cnhawk的登陸申請。
  
  6) Server → Client:Server確認,發送信息給Client允許cnhawk登陸Server。
  
  4.一個應用實例
  
  為了更清楚的說明Kerberos 5認證協議,實際應用中的例子(具體例子可以在我們後邊的實際應用中看到):假設某一局域網A,它的DNS域為the9.com;Realm為 THE9.COM;Kerberos的數據庫,AS以及TGS服務器都在主機test1.the9.com上。A中主機test2.the9.com上的用戶cnhawk對應的Principal為cnhawk/[email protected];A中的另一台主機 test3.the9.com上的telnet服務器對應的Principal為host/[email protected]。 Rlogin的客戶端程序telnet和服務端程序telnetd都是支持Kerberos的,即都支持Kerberos認證協議。cnhawk想用 telnet遠程登錄到A中的另一台主機test3.the9.com上這時cnhawk所要完成的步驟是:
  
  ① 運行kinit程序。kinit程序的作用是向AS申請TGT,並將獲得的TGT和會話密鑰放在保存Credential的文件中。為此,cnhawk在命令行上鍵入:
  
  % kinit cnhawk/test1.the9.com
  
  kinit程序在收到AS發回的消息後,就提示cnhawk輸入password:
  
  % kinit cnhawk/test1.the9.com cnhawk/[email protected]'s Password:
  
  在cnhawk正確的輸入password後,kinit程序將這個password用約定的算法轉化為cnhawk的密鑰,並用這個密鑰解密從TGS發回的消息,從而獲得下一步使用的Credential。到此,kinit程序結束。由此可見,cnhawk的password並沒有在網上傳輸,在網上傳輸的只是由cnhawk的密鑰加密後的東西。
  
  ② 運行telnet的客戶端程序telnet,為此cnhawk在命令行上鍵入:
  
  test1# telnet -a -l cnhawk test3.the9.com telnet程序首先在保存Credential的文件中尋找未過期的TGT,並把它交給TGS,從而獲得訪問test3.the9.com上 rlogin服務的Ticket。接下來,它把這個Ticket和Authenticator一起發送給test3.the9.com的服務器程序 telnetd。telnetd在驗證了cnhawk的身份後,就搜索本地cnhawk主目錄下的文件“.k5login”,在“.k5login”文件中放有允許用rlogin遠程登錄到cnhawk帳戶下的Principal。在找到了cnhawk/[email protected]之後,telnetd就申請一個虛擬終端,並fork一個shell,這時在test1.the9.com的終端上就會顯示:
  test1# telnet -a -l cnhawk test3.the9.com
  
  Trying test3.the9.com...
  
  Connected to test3.the9.com.
  
  Escape character is '^]'.
  
  [ Trying mutual KERBEROS5 (host/[email protected])... ]
  
  [ Kerberos V5 accepts you as `` cnhawk/[email protected]'' ]
  
  FreeBSD/i386 (test3.the9.com) (ttyp1)
  
  %id
  
  uid=1001(cnhawk) gid=0(wheel) groups=0(wheel)
  
  第二部分 Kerberos 5安裝和應用
  
  1.系統安裝
  
  需要安裝兩台FreeBSD 5.2.1的系統,一台FreeBSD 4.9 三個系統我是用虛擬機上安裝的。
  
  測試機A
  
  操作系統:FreeBSD test1.the9.com 5.2.1-RELEASE FreeBSD 5.2.1-RELEASE #0: Mon Feb 23 20:45:55 GMT 2004 [email protected]:/usr/obj/usr/src/sys/GENERIC i386
  
  IP地址:192.168.0.2
  
  機器名:test1.the9.com
  
  測試機B
  
  操作系統:FreeBSD test2.the9.com 4.9-RELEASE FreeBSD 4.9-RELEASE #0: Mon Oct 27 17:51:09 GMT 2003 [email protected]:/usr/obj/usr/src/sys/GENERIC i386
  
  IP地址:192.168.0.3
  
  機器名:test2.the9.com
  
  測試機C :
  
  操作系統:FreeBSD test3.the9.com 5.2.1-RELEASE FreeBSD 5.2.1-RELEASE #0: Mon Feb 23 20:45:55 GMT 2004 [email protected]:/usr/obj/usr/src/sys/GENERIC i386
  
  IP地址:192.168
Copyright © Linux教程網 All Rights Reserved