Chinaunix首页 | 论坛 | 博客
  • 博客访问: 265249
  • 博文数量: 54
  • 博客积分: 1425
  • 博客等级: 上尉
  • 技术积分: 541
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-27 23:26
文章分类

全部博文(54)

文章存档

2018年(2)

2015年(3)

2014年(6)

2013年(5)

2012年(5)

2011年(7)

2010年(14)

2009年(1)

2008年(3)

2007年(6)

2006年(1)

2005年(1)

我的朋友

分类: 网络与安全

2015-07-10 10:17:28

转载自 />

如何設定 Heimdal Kerberos 服務?

前語

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 Kerberos Key Distribution Center (KDC)

在 Heimdal 中建立 KDC (Kerberos 的 Ticket Server) 要有兩個很重要的步驟。

  1. 產生 Heimdal 的主匙。 這主匙是用來加密整個 Heimdal 伺服器的。
  2. 產生 Heimdal Kerberos 認証資料庫中最主要的 princial 。

產生 Heimdal 主匙

產生 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 資料庫的。 你可以在這裡建入如下的指令。

kadmin> init SAMBA.HK
Realm max ticket life [unlimited]:
Realm max renewable ticket life [unlimited]:
kadmin>
這樣就可以產生了 realm 的 SAMBA.HK 之 Kerberos 資料庫。 如何定義及使用 SAMBA.HK 的 realm , 你需要設定 file:///etc/krb5.conf , 我等一下再詳談。
[新增使用者]
要在 Kerberos 資料庫中新增一位使用者的話, 你可以在 kadmin 的管理者介面內使用 add 的指令。
kadmin> add freak
Max ticket life [1 day]:
Max renewable life [1 week]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
freak@SAMBA.HK's Password:
Verifying - freak@SAMBA.HK's Password:
kadmin>
現在我們多建立一個定義有 admin 權限的使用者 freak/admin 。
kadmin> add freak/admin
Max ticket life [1 day]:
Max renewable life [1 week]:
Principal expiration time [never]:
Password expiration time [never]:
Attributes []:
freak/admin@SAMBA.HK's Password:
Verifying - freak/admin@SAMBA.HK's Password:
kadmin>
你也可以使用 list 的指令來顯示 Kerberos 資料庫內有那些的 Principal 。 (在 Kerberos 內所有的資料都是 Principal , 像 LDAP 內所有的資料都是 DN 。)
kadmin> list *
    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>
在這裡除了 freak 所擁有的 Principal , 其它的 Principal 都是 Kerberos 資料庫內重要的 Principal ,
而當中的 krbtgt/SAMBA.HK@SAMBA.HK 就是你的 Kerberos Ticket Granting Ticket 。
現在你可以離開你的 kadmin 介面了。
# service kdc restart
Stopping kdc.
Starting kdc.
# service kadmind restart
Stopping kadmind.
Starting kadmind.
# 重新起動 heimdal-kdc 伺服器。
理論上你在設定後並不需要從新起動 Heimdal KDC 的, 但是如果你要重新起動它的話, 就可以如上所示來起動它。
你可以看見這裡起動了 heimdal-kdc 和 kadmind 伺服器。
注:在/etc/rc.conf中设置
    kdc_enable="YES"
    kadmind_enable="YES"
在系统启动时kdc和kadmind两个服务进程就自动启动了。
使用 kinit 來 init 使用者的認証 cache 。 也可以使用 klist 來把使用的認証 cache 內的 Serives 顯示出來。
這樣的工作十分簡單。
# kinit -p freak
freak@SAMBA.HK's Password:
kinit: NOTICE: ticket renewable lifetime is 1 week
# klist
Credentials cache:
    FILE:/tmp/krb5cc_0 Principal: freak@SAMBA.HK
Issued Expires Principal Oct 8 10:43:20 Oct 8 20:43:20
krbtgt/SAMBA.HK@SAMBA.HK
V4-ticket file: /tmp/tkt0
Principal: guest.admin@SAMBA.HK
Issued Expires Principal Oct 8 10:43:20 Oct 8 20:43:20
krbtgt.SAMBA.HK@SAMBA.HK
#
[更改使用者密碼]
更改使用者帳號的密碼。
# 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 時, 請把它先設定好。
阅读(1313) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~