天天看點

kerberos認證

Kerberos統一認證明驗配置

0.準備工作

Kerberos是一種認證協定,以地獄守護者(三個頭的狗)的名字命名,這個協定堪稱完美,原理相當複雜,見http://blog.chinaunix.net/u/4940/showart_2374802.html,現在發展倒到第5版,其演變過程被MIT描述程Athena和Euripides的一段對話,http://biz.chinabyte.com/189/2038189.shtml,有興趣可以看看,比較長,但是對了解Kerberos很有好處。

Kerberos的實驗同樣需要3台機器,分别扮演不同的角色:

a.192.168.0.48kdc.example.comKerberos伺服器和NIS伺服器

b.192.168.0.49server.example.com應用伺服器,如ssh,ftp,krb5-telnet等

c.192.168.0.50client.example.com客戶機

.幾台機器需要時間同步,是以最好是建一個ntp的伺服器,時間相差5分鐘以上,所有實驗都做不出來。建NTP也就2分鐘的事情。

1.配置NIS

概念是将kdc.example.com配置成NIS和Kerberos的伺服器,NIS提供使用者資訊(UserInfomation),Kerberos提供認證資訊(Authentication),下面從NIS開始:

安裝ypserv

#yum-yinstallypserv

配置ypserv,增加NIS域,NISDOMAIN=ahau

#vim/etc/sysconfig/network

#nisdomainnameahau

固定ypserv的端口,在vim/etc/sysconfig/network添加參數YPSERV_ARGS=808

生成NIS庫

#/usr/yp/ypinit-m

增加幾個使用者,但是不要密碼,UID用大一點,防止跟客戶機重複,更新NIS庫

#useradd-u6001user1

#make-C/var/yp

要注意NIS伺服器的hosts配置,這個配置會傳到客戶機,如果有錯,排錯是很麻煩的,我就因為這個問題花了兩個小時排錯

2.配置KDC

很多包系統預設安裝過了,這裡隻要安裝krb5-server

#yum-yinstallkrb5-server

修改krb5的配置檔案/etc/krb5.conf

[logging]段是日志,可以不動

[libdefaults]是預設配置,其中default_realm指出了預設的realm,即認證的範圍,一般是全大寫字母

default_realm=KDC.EXAMPLE.COM

[realms]段是範圍的配置,參數最好寫IP位址,友善以後更改

[realms]

KDC.EXAMPLE.COM={

kdc=192.168.0.48:88

admin_server=192.168.0.48:749

}

[domain_realm]域和realm的關系,即哪些機器可以在哪個realm裡認證

.example.com=KDC.EXAMPLE.COM#所有example.com域的使用者和機器都可以在KDC.EXAMPLE.COM上認證

[appdefaults]段指出pam的一些參數,如票的存活時間等等。

加一條validate=true,目的是讓登入程式确認KDC的合法性

初始化KDC的資料庫,-s表示通過kadmin登入本機不需要密碼

#kdb5_utilcreate-rKDC.EXAMPLE.COM-s

修改kdc.conf,指定加密算法

#vim/var/kerberos/krb5kdc/kdc.conf

[realms]段改成KDC.EXAMPLE.COM,取消master_key_type的注釋,Kerverosv5采用3DES的算法,比v4的DES要安全一些

修改/var/kerberos/krb5kdc/kadm5.acl,此檔案為kadmin的通路控制檔案

文法是

principalpermissions[target-principal]

改成如下形式,即所有admin組擁有所有權限

*/[email protected]*

登入KDC,添加管理者和一般使用者的principal

#kadmin.local

kadmin.local:addprincroot/admin

kadmin.local:addprincuser1

ps.addprinc會要求輸入密碼,root/admin的密碼一定不能洩漏,否則就完了,user1的密碼就是指登入密碼

檢視,删除已有的principal的指令:

kadmin.local:listprincs

kadmin.local:getprincuser1

kadmin.local:delprincuser1

導出kadmin服務的keytab檔案,退出kadmin

kadmin.local:ktadd-k/var/kerberos/krb5kdc/kadm5.keytabkadmin/admin

kadmin.local:ktadd-k/var/kerberos/krb5kdc/kadm5.keytabkadmin/changepw

ps.有的資料上說kadmin會自動生成keytab檔案,我試了一下不行,可能版本問題吧

修正前面的幾個檔案的SELINUX設定

#restorecon-R-V/var/kerberos/krb5kdc/

#restorecon-R-V/var/log/

#restorecon-R-V/etc/krb5.conf

檢視keytab檔案内容

#ktutil

ktutil:rkt/var/kerberos/krb5kdc/kadm5.keytab

ktutil:list

啟動服務

#servicekrb5kdcrestart

#servicekadminrestart

登入到server.example.com上,複制kdc.example.com的/etc/krb5.conf檔案過來,省得再配了

server#[email protected]:/etc/krb5.conf/etc/krb5.conf

server#restorecon-R-v/etc/krb5.conf

運作kadmin,輸入密碼後即可遠端登入到KDC上,可以對其進行管理

3.配置伺服器

我們希望把server.example.com做成應用伺服器,這裡以sshd、gssftp、krb5-telnet為例。

先配置這幾個服務,sshd預設就能用,gssftp和krb5-telnet都是xinetd管理的服務,修改/etc/xinetd.d/的相關配置檔案就行,如果要telnet加密,同時打開ekrb5-telnet服務就行,建議打開。

配置伺服器為NIS的用戶端,并且使用Kerberos認證

server#authconfig-tui,修改相應的NIS資訊就行

在KDC增加服務的principal,并且導出生成server自己的鑰匙

server#kadmin

kadmin:addprinc-randkeyhost/server.example.com#krb5-telnet和ssh的principal都是host

kadmin:addprinc-randkeyftp/server.example.com#gssftp的principal是ftp

導出到本地

kadmin:ktadd-k/etc/krb5.keytabhost/server.example.com

kadmin:ktadd-k/etc/krb5.keytabftp/server.example.com

檢查防火牆和selinux

因為要做雙向驗證,是以我們在kdc.example.com上也把sshd服務注冊一下,登入到kdc.example.com

kadmin.local:addprinc-randkeyhost/server.example.com

kadmin.local:ktadd-k/etc/krb5.confhost/server.example.com

重新開機跟kdc相關的服務

4.客戶機測試

先将客戶機加入NIS域,并使用Kerberos驗證

然後以user1登入系統,密碼為KDC中addprinc時輸入的對應密碼,注意這裡不能用root直接su到user1,因為root是不驗證密碼的,這樣會導緻得不到TGT票,正常登入的話說明驗證沒有問題

此時該使用者已經得到了TGT的授權票,可以用klist檢視使用者得到的票的資訊

client#klist

使用ssh登入server.example.com,不需要密碼就能登入

使用ftp登入server.example.com,不需要密碼也能登入

使用telnet指令telnet-xserver.example.com-kKDC.EXAMPLE.COM登入server.example.com,同樣不需要密碼就能登入

再此用klist檢視,該使用者已經得到了多張用于通路服務的票,預設的有效時間是10個小時。

ps.ssh登入到server.example.com以後,再ssh回client.example.com是需要密碼的,如果要取消密碼,可以修改client.example.com上的ssh配置,增加GSSAPIDelegateCredentialsyes的參數,讓ssh能夠傳遞認證資訊

5.KDC安全配置

增加preauth功能

修改/var/kerberos/krb5kdc/kdc.conf,增加參數

default_principal_flags=+preauth

重新開機krb5kdc,kadmin服務

6.KDC跨域信任

一台KDC可以實作跨域的驗證,實作方式隻要在KDC中加入對其他域TGT的信任就可以了,如:

kadmin.local:kdctgt/[email protected]

以上是配置Kerberos統一認證的過程,全部都使用RHEL5.4,強烈推薦大家看看那個對話,非常經典。

kerberos是由MIT開發的提供網絡認證服務的系統,很早就聽說過它的大名,但一直沒有使用過它。它可用來為網絡上的各種server提供認證服務,使得密碼不再是以明文方式在網絡上傳輸,并且聯接之間通訊是加密的;它和PKI認證的原理不一樣,PKI使用公鑰體制(不對稱密碼體制),kerberos基于私鑰體制(對稱密碼體制)。

本篇文章不打算詳細講解kerberos的工作原理,而是側重介紹在redhat8.0環境下如何使用kerberos自己提供的Ktelnetd,Krlogind,Krshd來替代傳統的telnetd,rlogind,rshd服務,有關kerberos工作的原理可以參考《Kerberos:ANAuthenticationServicesforComputerNetworks》。

安裝環境:一台i386機器。

安裝包:krb5-server-1.2.5-6,krb5-workstation-1.2.5-6,krb5-libs-1.2.5-6

rpm-ivhkrb5-libs-1.2.5-6.i386.rpm

rpm-ivhkrb5-server-1.2.5-6.i386.rpm

rpm-ivhkrb5-workstation-1.2.5-6.i386.rpm

上述要求滿足後,我們就可以先配KDC伺服器,然後再配Ktelnetd,Krlogind,Krsh伺服器,最後就可以使用krb5-workstation提供的telnet,rlogin,rsh來登入這些服務了。下面是安裝步驟:

1、生成kerberos的本地資料庫

kdb5_utilcreate-rEXAMPLE.COM-s

這個指令用來生成kerberos的本地資料庫,包括幾個檔案:principal,principal.OK,principal.kadm5,principal.kadm5.lock.-r指定realm(kerberos術語),我們随便取一個叫EXAMPLE.COM.

2、生成賬号

kerberos用principal(kerberos術語)來表示realm下的一個帳戶,表示為primary/instance@realm,舉個例子就是username/[email protected],這裡假設9.181.92.90是你機器的ip位址.

在資料庫中加入管理者帳戶:

/usr/kerberos/sbin/kadmin.local

kadmin.local:addprincadmin/[email protected]

在資料庫中加入使用者的帳号:

kadmin.local:addprincusername/[email protected]

在資料庫中加入Ktelnetd,Krlogind,Krshd公用的帳号:

kadmin.local:addprinc-randkeyhost/[email protected]

3、檢查/var/kerberos/krb5kdc/kadm5.keytab是否有下列語句:

*/[email protected]*

若沒有,那麼就添上。

4、修改/etc/krb5.conf檔案,修改所有的realm為EXAMPLE.COM,并且加入下列句子

kdc=9.181.92.90:88

admin_server=9.181.92.90:749

5、在/etc/krb.conf中加入下列語句:

EXAMPLE.COM

EXAMPLE.COM9.181.92.90:88

EXAMPLE.COM9.181.92.90:749adminserver

6、啟動kdc伺服器和Ktelnetd,Krlogind,Krshd

/etc/init.d/krb5kdcrestart

chkconfigkloginon

chkconfigkshellon

chkconfigekloginon

chkconfigkrb5-telneton

/etc/init.d/xinetdrestart

7、制作本地緩存

将username/[email protected]的credentials(kerberos術語)取到本地做為cache,這樣以後就可以不用重複輸入password了。

kinitusername/9.181.92.90

如果順利的話,在/tmp下面會生成檔案krb5*;這步如果不通,那麼就必須檢查以上步驟是否有漏。

可以用klist指令來檢視credential。

8、導出使用者密匙

exporthost/[email protected]的key到/etc/krb5.keytab,Ktelnetd、Krlogind和Krshd需要/etc/krb5.keytab來驗證username/9.181.92.90的身份。

kadmin.local:ktadd-k/etc/krb5.keytabhost/9.181.92.90

9、修改~/.k5login檔案

在其中加入username/[email protected],表示允許username/[email protected]登入該帳戶

catusername/[email protected]>>~/.k5login

10、測試kerberos用戶端

krsh9.181.92.90-kEXAMPLE.COMls

krlogin9.181.92.90-kEXAMPLE.COM

rlogin9.181.92.90-kEXAMPLE.COM

rsh9.181.92.90-kEXAMPLE.COM

telnet-x9.181.92.90-kEXAMPLE.COM

上一篇: kerberos 巨坑
下一篇: ext designer

繼續閱讀