OSWikiHK: 請協力 GPLv3 的中文翻譯工作。

Setup Heimdal Kerberos Service

OSWikiHK,自由中文開源知識庫

目录

如何設定 Heimdal Kerberos 服務?

前語

Heimdal 被選為 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 時, 請把它先設定好。

Personal tools
廣告橫額