Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6894951
  • 博文数量: 637
  • 博客积分: 10265
  • 博客等级: 上将
  • 技术积分: 6165
  • 用 户 组: 普通用户
  • 注册时间: 2004-12-12 22:00
文章分类

全部博文(637)

文章存档

2011年(1)

2010年(1)

2009年(3)

2008年(12)

2007年(44)

2006年(156)

2005年(419)

2004年(1)

分类: 系统运维

2005-12-16 15:28:11


如何设定 Heimdal Kerberos 服务?

目录 []




前语

 () 被选为 Samba4 所使用的 Kerberos 服务器, 没有理由一直在协会内没有文章介绍它的。

今天就和大家介绍一下 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 的主匙, 可以使用以下的指令来达到。

lok:/var/lib/heimdal-kdc# kstash
Master key:
Verifying - Master key:
kstash: writing key to `/var/lib/heimdal-kdc/m-key'
lok:/var/lib/heimdal-kdc#

这样就可以产生 Kerberos 数据库的主匙, 而主匙就被收在 m-key 这档案内。 产生 Heimdal Kerberos 认証数据库的最主要 princial 。 这方面就要透过 kadmin 这指令来达到。

lok:/var/lib/heimdal-kdc# 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 接口了。

lok:/var/lib/heimdal-kdc# /etc/init.d/heimdal-kdc restart
Stopping Heimdal password server: kpasswdd.
Stopping Heimdal KDC: heimdal-kdc.
Starting Heimdal KDC: heimdal-kdc.
Starting Heimdal password server: kpasswdd.
lok:/var/lib/heimdal-kdc#

重新起动 heimdal-kdc 服务器。 理论上你在设定后并不需要从新起动 Heimdal KDC 的, 但是如果你要重新起动它的话, 就可以如上所示来起动它。 你可以看见这里起动了 heimdal-kdc 和 kpasswdd 服务器。

使用 kinit 来 init 使用者的认証 cache 。 也可以使用 klist 来把使用的认証 cache 内的 Serives 显示出来。 这样的工作十分简单。

lok:/var/lib/heimdal-kdc# kinit -p freak
freak@SAMBA.HK's Password:
kinit: NOTICE: ticket renewable lifetime is 1 week
lok:/var/lib/heimdal-kdc# 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
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
lok:/var/lib/heimdal-kdc#
[]

更改使用者密码

更改使用者帐号的密码。

lok:/var/lib/heimdal-kdc# kpasswd
freak@SAMBA.HK's Password:
New password:
Verifying - New password:
Success : Password changed
lok:/var/lib/heimdal-kdc#

这样你就可以修改你使用者密码了。

有关 kadmind 的设定。 ( kadmind 是一让管理者远端管理 Kerberos 认証数据库的管理者服务器。 ) 这方面的设定可算十分简单, 你只要在 file:///var/lib/heimdal-kdc/kadmind.acl 内加上你的设定就可以了。

freak/admin@SAMBA.HK    all

加上这一句的义意就是让 freak/admin@SAMBA.HK 拥有最高的管理者权限。 执行 kadmin 。

lok:/var/lib/heimdal-kdc# kadmin
kadmin> list *
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>

这样你就可以使用 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 时, 请把它先设定好。

阅读(2299) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~