Kerberos原理和使用

Kerberos原理

Kerberos 服務是單點登錄系統,這意味着您對於每個會話只需向服務進行一次自我驗證,即可自動保護該會話過程中所有後續事務的安全。服務對您進行驗證後,即無需在每次使用基於 Kerberos 的服務時進行驗證。因此,無需在每次使用這些服務時都在網絡上發送口令(增強了安全性)。MIT寫了一段故事型的對話,比較生動得表述了Kerberos協議的工作原理:
Athena和歐里庇得斯關於地獄之門守護者的對話。簡而言之,kerbores V5的工作原理如下:
Kerbores中有三種角色:
KDC:負責分發密鑰的密鑰分配中心
Client:需要使用kerbores服務的客戶端
Service:提供具體服務的服務端
其中,Client需要和KDC和Service都進行通信。協議授權流程分兩個部分:
(1) 獲取原始票據
首先,Client向KDC發送自己的身份信息,KDC從授予票據服務(Ticket Granting Service)得到可用的票據(ticket-granting ticket),並用協議開始前KDC與Client之間的密鑰將票據加密回覆給client,client收到KDC回覆的加密票據後利用與client先前協議的密鑰將票據解密,從而獲得票據,此步驟主要是允許client進行Kerberos的驗證,是進行訪問服務的先決條件。
(2) 獲取服務票據以及訪問服務
client利用之前獲得的票據向KDC請求服務票據,從而通過服務的身份驗證。獲取服務票據以及訪問服務總共有如下四步:
①. client將之前獲得的票據和要請求的服務信息發送給KDC,KDC中的授予票據服務將client和service之間生成一個會話密鑰(Session Key)用於服務器與client的身份驗證。然後KDC將這個會話密鑰和用戶名,用戶地址(IP),服務名,有效期,時間戳一起包裝成一個票據(這張票據用於service對client的身份驗證)通過client轉發給service。
②. 爲了讓票據對client保密,所以KDC用協議開始之前KDC與服務端之間的密鑰將票據加密後再發給client,同時爲了讓client與service之間共享那個會話密鑰,KDC用client與它之間的密鑰將會話密鑰加密返回給client
③. 爲了完成票據的傳遞,client將剛纔收到的票據轉發到service,由於client不知道KDC與service的密鑰,所以它無法修改票據的信息,同時client將收到的會話密鑰解壓出來,然後將自己的用戶名,用戶地址(IP)打包成驗證包用會話密鑰加密也發給service

④. Service收到票據後利用它與KDC之間的密鑰將票據中的信息解密出來,從而獲得會話密鑰和用戶名,用戶地址(IP),服務名,有效期。然後再用會話密鑰將驗證包解密從而獲得用戶名,用戶地址(IP)將其與之前票據中解密出來的用戶名,用戶地址(IP)做比較從而驗證client的身份,如果service有返回結果,將其返回給client.

安裝步驟:
1.下載krb5-1.9.5
http://web.mit.edu/kerberos/dist/krb5/1.9/krb5-1.9.5-signed.tar

2.解壓
tar -xvf krb5-1.9.5-signed.tar
生成krb5-1.9.5.tar.gz 和 krb5-1.9.5.tar.gz.asc
繼續解壓tar zxvf krb5-1.9.5.tar.gz

3.編譯
cd krb5-1.9.5/src
./configure
make && make install

也可以直接用yum 安裝,redhat默認自帶的 yum 源需要註冊,也可以使用centos的yum源.
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
KDC server 安裝 yum -y krb5-server
客戶端安裝: yum -y krb5-workstation

4.配置/etc/krb5.conf
這個是Kerberos最主要的配置文件,而且一定要放在/etc下

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = KRBTEST.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 KRBTEST.COM = {
  kdc = srv4.localdomain.com:88
  admin_server = srv4.localdomain.com:749
  default_domain = KRBTEST.COM
 }

[domain_realm]
 .localdomain.com = KRBTEST.COM
 localdomain.com = KRBTEST.COM  
5.配置/usr/local/var/krb5kdc/kdc.conf
由於上面安裝時沒有選擇安裝目錄,所以默認的安裝位置在/usr/local/var/krb5kdc
如果是yum安裝,位置在/var/kerberos/krb5kdc
[kdcdefaults]
 kdc_ports = 88
 kdc_tcp_ports = 88

[realms]
 KRBTEST.COM = {
  max_renewable_life = 7d
  master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }

配置acl文件

6.創建一個kerberos數據庫
kdb5_util create -r KRBTEST.COM -s  
會要求創建數據庫的密碼。(kerberos),創建principal保存數據庫文件

7.登錄kerberos
kadmin.local   
1)查看用戶
listprincs

2)添加用戶
addprinc [email protected]
(password:kerberos)

8啓動服務
service krb5kdc start
Starting Kerberos 5 KDC:                         [  OK  ]
service kadmin start
Starting Kerberos 5 Admin Server:                [  OK  ]

9 驗證principle
在其他主機上需要有相同的krb5.conf配置。
kinit [email protected]
官方文檔:
http://web.mit.edu/kerberos/krb5-current/doc/admin/install_kdc.html#install-and-configure-the-master-kdc


以下面的3臺機器做ssh+kerberos測試:從srv5登陸srv6
KDC服務器: srv4.localdomain.com
srv5.localdomain.com
srv6.localdomain.com
KDC服務器的kdc.conf文件如下:
kdc_ports = 88
kdc_tcp_ports = 88
 
[realms]
 KRBTEST.COM = {
  #master_key_type = aes256-cts
  acl_file = /var/kerberos/krb5kdc/kadm5.acl
  dict_file = /usr/share/dict/words
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
 }
 
3臺機器的hosts文件改爲如下
192.168.8.4     srv4.localdomain.com     
192.168.8.5     srv5.localdomain.com     
192.168.8.6     srv6.localdomain.com

3臺機器的/etc/krb5.conf文件如下:
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = KRBTEST.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 forwardable = yes

[realms]
 KRBTEST.COM = {
  kdc = srv4.localdomain.com:88
  admin_server = srv4.localdomain.com:749
  default_domain = KRBTEST.COM
 }

[domain_realm]
 .localdomain.com = KRBTEST.COM
 localdomain.com = KRBTEST.COM

[appdefaults]
 pam = {
   debug = false
   ticket_lifetime = 36000
   renew_lifetime = 36000
   forwardable = true
   krb4_convert = false
 }

 
在srv4.localdomain.com執行下面的命令
addprinc yorker/admin
(password:kerberos)
在srv5.localdomain.com執行下面的命令
kinit yorker/admin
kadmin yorker/admin

addprinc -randkey host/srv5.localdomain.com
ktadd -k /etc/krb5.keytab host/srv5.localdomain.com

Update the following values in /etc/ssh/sshd_config

GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

在srv6.localdomain.com執行下面的命令
kinit yorker/admin
kadmin yorker/admin
addprinc -randkey host/srv6.localdomain.com
ktadd -k /etc/krb5.keytab host/srv6.localdomain.com

Update the following values in /etc/ssh/sshd_config
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

在srv5.localdomain.com和srv6.localdomain.com上重啓sshd
service sshd restart

在srv5.localdomain.com上 su - yorker

kinit yorker
再執行下面的命令不用輸入密碼就可以登錄到srv6.localdomain.com
ssh srv6.localdomain.com

其它一些命令
klist
kdestroy
klist -k -t /etc/krb5.keytab

ssh -v

http://www.linuxproblems.org/wiki/Ssh_with_kerberos

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章