分类: 网络与安全
2015-07-10 10:17:28
Heimdal 被選為 Samba4 所使用的 Kerberos 伺服器,
沒有理由一直在協會內沒有文章介紹它的。
注:Heimdal 同样是FreeBSD10.1用户手册中推荐的Kerberos5应用系统。安装很简单,ports在/usr/ports/security/heimdal。
今天就和大家介紹一下 Heimdal 的建立和初步使用。
但是要明白的是 Kerberos 仍是有一大堆背後理論,
在這裡就只簡略介紹。
我初次使用 Heimdal 是在兩年多前了。 當時我剛學習 Kerberos 的設定, 當時是玩 MIT Kerberos 的, 但是某晚自己有些貪玩, 加上當時沒有 Internet access , 而手上只有一隻 Debian CD1 ; 所以就在那 CD 內找, 沒有找到 MIT Kerberos 。 但是卻找到了 Heimdal 。它竟然放在第一片 Debian CD 內, 也可以看見 Debian 對這 Kerberos 伺服器的重視。
但是單以 version number 來比較 Heimdal 的版本編號只有 0.6 版本。 而 MIT Kerberos 卻在版本編號上是 1.3 。加上 MIT 是 Kerberos 通訊協定的的發展社團, 所以理應也是在開始時選擇玩 MIT Kerberos 的。
但是經那次的經驗後, 總是沒有辦法忘記 Heimdal 的簡單易用。
當然你們未必有 MIT Kerberos 的管理經驗, 可能無法了解 Heimdal 之間的差別, 那不如我們只就著 Heimdal 來談 Kerberos 伺服器的建立吧。
在 Heimdal 中建立 KDC (Kerberos 的 Ticket Server) 要有兩個很重要的步驟。
產生 Heimdal 的主匙, 可以使用以下的指令來達到。
# kstash (目录在/usr/sbin/) Master key: Verifying - Master key: kstash: writing key to `/var/heimdal/m-key' #
這樣就可以產生 Kerberos 資料庫的主匙, 而主匙就被收在 m-key 這檔案內。
產生 Heimdal Kerberos 認証資料庫的最主要 princial 。
這方面就要透過 kadmin 這指令來達到。
# kadmin -l
kadmin> 這時你會進入 kadmin 管理者介面, -l 的參數是用來連接你本地 Kerberos 資料庫的。
你可以在這裡建入如下的指令。
# kpasswd freak@SAMBA.HK's Password: New password: Verifying - New password: Success : Password changed # 這樣你就可以修改你使用者密碼了。 有關 kadmind 的設定。 ( kadmind 是一讓管理者遠端管理 Kerberos 認証資料庫的管理者伺服器。 ) 這方面的設定可算十分簡單, 你只要在 file:///var/heimdal/kadmind.acl 內加上你的設定就可以了。 freak/admin@SAMBA.HK all 加上這一句的義意就是讓 freak/admin@SAMBA.HK 擁有最高的管理者權限。 執行 kadmin 。 # kadmin (注:这回不用加-l,即不直接访问数据库,而是以krb5.conf中配置的kadmind地址,从网络访问) kadmin> list * (管理者从网络访问kdc需要验证身份密码) freak/admin@SAMBA.HK's Password: freak@SAMBA.HK default@SAMBA.HK freak/admin@SAMBA.HK kadmin/admin@SAMBA.HK kadmin/hprop@SAMBA.HK kadmin/changepw@SAMBA.HK krbtgt/SAMBA.HK@SAMBA.HK changepw/kerberos@SAMBA.HK kadmin> 這樣你就可遠端地管理你的 Kerberos 伺服器了。 假設我們的使用 Kerberos 認証的 telnetd 伺服器 FQDN 名稱為 lok.samba.hk 的話, 而它的網絡地址為 192.168.1.9 你要留意你兩個地方, 一就是在 Kerberos 的資料庫中加入 host/lok.samba.hk@SAMBA.HK 的 Principal 及產生 host/lok.samba.hk 的 keytab 檔案。 而另一個地方是在你的 telnetd 伺服器中的 file:///etc/hosts 檔案內加入以下的一行。 192.168.1.9 lok.samba.hk lok 我們試試在 Hemidal 中加入這個 Principal 的設定。( 留意一點就是 Services 的 Principal 是使用 random-key 來作密碼的。 ) kdmin> add -r host/lok.samba.hk Max ticket life [1 day]: Max renewable life [1 week]: Principal expiration time [never]: Password expiration time [never]: Attributes []: kadmin> export keytab 檔案︰ kadmin> ext_keytab host/lok.samba.hk kadmin> 注:kadmin> ext_keytab --keytab=/tmp/krb1.keytab host/lok.sam.hk 在/tmp下导出一个keytab文件,该文件是host/lok.sam.hk 在kadmin -l的shell里面用list *可以看到。 ************************************************************************** 一、sshd服务验证。 1、sshd服务器 sshd服务器端:把刚才的krb1.keytab复制到/etc/krb5.keytab。 修改/etc/ssh/sshd_config,把GSSAPIAuthentication=no改成yes,然后重启sshd服务。 使用adduser为系统添加用户tillman (这个tillman和kerberos kdc数据库里的tillman同名,仅用于ssh登录系统时用户的映射关系, 但是他们两个本身是没有关系的) 2、ssh客户端 kinit -p tillman (生成tillman的验证cache文件) klist验证tillman的cache文件。 root@krbvms:~ # klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: tillman@TEST Issued Expires Principal Jul 11 16:50:21 2015 Jul 12 10:48:18 2015 krbtgt/TEST@TEST Jul 11 18:18:26 2015 Jul 12 10:48:18 2015 host/bsdbox.test@TEST(这一行连接一次成功后显示,如果还没有ssh连接成功则不显示。) 从客户端连接sshd服务器bsdbox.test: ssh -o GSSAPIAuthentication=yes bsdbox.test -l tillman 下边没有提示了,因为已经进入了bsdbox.test。 二、telnet服务验证。关于keytab文件的复制和客户端kinit初始化验证cache文件的步骤相同。 客户端: telnet bsdbox.test [ Trying mutual KERBEROS5 (host/bsdbox.test@TEST)... ] Kerberos V5: mk_req failed (encryption type des-cbc-crc is disabled) [ Trying KERBEROS5 (host/bsdbox.test@TEST)... ] Kerberos V5: mk_req failed (encryption type des-cbc-crc is disabled) Trying SRA secure login: User (root): 注:我在BSD上没作出来,看来是telnet不支持这个加密方式keytype,没有找到怎么设置,暂且放下,如果有高手请略指导, 下面是香港人的:V 這樣你就可以使用 ktelnet 來連的 telnet 伺服器了。 freak@lok$ ktelnet -k SAMBA lok.samba.hk Trying 192.168.1.5... Connected to lok.samba.hk. Escape character is '^]'. Waiting for encryption to be negotiated... [ Trying mutual KERBEROS5 (host/lok.samba.hk@SAMBA.HK)... ] [ Kerberos V5 accepts you as ``freak@SAMBA.HK ] Encryption negotiated. Debian GNU/Linux 3.1 %h freak@lok$ 這時你可以再看使用 klist 來檢查你的認証 cache 檔案。 freak@lok$ klist Credentials cache: FILE:/tmp/krb5cc_1000 Principal: freak@SAMBA.HK Issued Expires Principal Oct 8 11:43:24 Oct 8 21:43:24 krbtgt/SAMBA.HK@SAMBA.HK Oct 8 11:43:24 Oct 8 21:43:24 krbtgt/SAMBA.HK@SAMBA.HK Oct 8 12:13:37 Oct 8 21:43:24 host/lok.samba.hk@SAMBA.HK V4-ticket file: /tmp/tkt1000 klist: No ticyket file (tf_util) freak@lok:~$ 有關 file:///etc/krb5.conf [libdefaults] default_realm = SAMBA.HK [realms] SAMBA.HK = { kdc = 192.168.1.5 admin_server = 192.168.1.5 } 這是最簡單而又有效的 file:///etc/krb5.conf 檔案。 在設定 heimdal 時, 請把它先設定好。