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

OpenBSD 下的 Kerberos

OSWikiHK,自由中文開源知識庫

Jump to: navigation, search

目录


文件是由 johnw 提供,而由 Frankie Chow 張貼到這裡。

其實 OpenBSD 是以網絡安全為己任的伺服器,因此 Kerberos 這一認証伺服器的建立也是 OpenBSD 系統管理者一件十分常見的管理工作。這裡讓我們介紹一下如何在 OpenBSD 下建立 Kerberos 伺服器和當中的使用者認証的工作。

在OpenBSD(雞泡魚)上,起Kerberos(有三個頭的狗)驗証伺服器

OpenBSD是用Heimdal,這個Kerberos程式的

假設這裹有四部電腦,兩部OpenBSD,一部Debian/Linux,一部WinXP

"johnw" -- 是使用者的名 (四部電腦上,都用johnw這個users)

在 Kerberos 下我們需要設定一個很重要的資料,這資料就是 REALM ,這和 MSWindows 下的 Domain 觀念是十分類似的。

這裡我們設定 REALM 為:

REALM = SAMBA.HK

我們在這裡以 Samba.HK 為這個 REALM 的名稱, 我們通常會使用 Domain 網絡名稱作為 REALM 的。 但是你可以留意就是在網絡名稱下所有的字串都要把它轉為大寫的字母。

IP / DNS

這裡有四台電腦,我們分別把它們的 IP Address 和它們的 DNS 名稱分別列出來。 這些對 Kerberos 的設定者是十分重要的資料。

  1. OpenBSD: 192.168.0.1 / kdc.samba.hk
  2. OpenBSD: 192.168.0.2 / openbsd.samba.hk
  3. Debian: 192.168.0.3 / debian.samba.hk
  4. WinXP: 192.168.0.4 / winxp.samba.hk

kdc.samba.hk

我們在 Kerberos 網絡下,會把 Key Distribution Center 簡稱作 kdc 的。 這也是 Kerberos 下最重要的網絡伺服器,負責傳行票的發送。

把 kdc 下的 /etc/kerberosV/krb5.conf, 設定成如下::

[libdefaults]
	default_realm = SAMBA.HK
	clockskew = 300
[realms]
	SAMBA.HK = {
		kdc = kdc.samba.hk
		admin_server = kdc.samba.hk
	}
[domain_realm]
	.samba.hk = SAMBA.HK
	samba.hk = SAMBA.HK
[logging]
	kadmind = FILE:/var/heimdal/kadmind.log

這就是當中的設定檔案。你可以在當中看見一樣十分有趣的欄位 [domain_realm] 理論上如果你的 DNS 下的網域名稱和 REALM 的不同的話, 你就需要設定這裡的資料,例如你的 DNS 下的 domain 是 frankie-itsolutions.com 而你的 REALM 是 SAMBA.HK 的話,你就需要在這裡加上這樣的設定。

[domain_realm] 的設定:

[domain_realm]
    frankie-itsolutions.com = SAMBA.HK
    .frankie-itsolutions.com = SAMBA.HK

但是如果這兩分面的資料是相同的話,你是可以不在這裡加上設定的。

設定及起動 Kerberos 的認証資料庫

在你的 kdc 下,你是需要設定及起動 Kerberos 的認証資料庫。 你可以使用以下的指令來達成這事。如果你也是 Kerberos 愛用者的話, 你要留意一事就是 heimdal 和 MIT Kerberos 在管理上所使用的指令是不一樣的。

使用以下的指令來設定 Kerberos 認証資料庫::

root@kdc# mkdir /var/heimdal
root@kdc# 'kstash

kstash 是使用來產生新的 Kerberos database 的密碼 。 這裡你所鍵入的密碼。有很大機會你是不會再使它的,但是如果你要使用備份你的 Kerberos Database ,或者你要建立 Master 和 Slave 的 Kerberos 伺服器的話,這就是你一定要死記的密碼。 最可怕的是你很少會用到它,所以很多時當你真需要使用到它的時候,你就會忘記它了。

打兩次password....這個打完就唔使記住,反正也遲早忘記。但是怎樣說,也不要把它寫下來, 因為整個 REALM 的安全就看你怎樣看待這一個密碼。

使用 kdc 來起動 KDC 伺服器,另外你也可以使用 kadmin 來管理你的 Kerberos 伺服器, 你可以把 kadmin 看作是 KDC 的管理 console 。

kdc 和 kadmin 的執行情況,在 kadmin 中使用 init 就可以產生新的 Kerberos Database ::

root@kdc# /usr/libexec/kdc &
root@kdc# kadmin -l

kadmin> init SAMBA.HK
kadmin> add johnw
kadmin> ...

打完兩次 password 後,你就把 johnw 的使用者加到 SAMBA.HK 的 REALM 下。這是建立 johnw@SAMBA.HK 的方法,

這是一個使用帳號。如果你要建立一個伺服器帳號的話, 你的帳號名稱就是 host/kdc.samba.hk ,這是建立給予 kdc.samba.hk 這台伺服器的。 (在 Kerberos 下每一個網絡服務也是需要建立一個不同的帳號,這個以 host 為開始的 帳號,基本上是給予 login Services 使用的,包括 telnetd 和 sshd 也是使用這個帳號的。

另外因為保安的需要,很多時候在加入新的服務性帳號的時候,你會加上 -r 這個參數, 因為 -r 參數的意義是 randkey 的意思。

而服務帳號本身因為不會記著自己帳號的密碼,而當他們需要的時候,他們會檢查一個我們稱作 keytab 的檔案。 所以在你建立了服務帳號後,也需要把這帳號 export 出來。

在 kadmin 中使用 add 和 ext 指令:

kadmin> add -r host/kdc.samba.hk
kadmin> ext host/kdc.samba.hk
kadmin> ...
kadmin> quit

以上我們就完成了我們 kadmin 中的工作。

設定 /etc/login.conf,用 login_krb5 來驗証密碼

login.conf 這個檔案和 Linux 上任何一個檔案也不一樣。我也未聽過 Linux 上相類似的觀念。 如果你仔細地看看過這個檔案的話,你可以留意到它是用來管理使用者的 login class 。

也就是說當使用者 login 時或要求 login 時,它就會使用這裡所設定來對使用者作出管理。 最有趣的例子是今天早上。當協會的 zope 伺服器使用到 75 M 內存的時候,突然 zope 伺服器在網絡上 停止了回應!而且它亦再沒有使用到 cpu 資源。(平常 zope 伺服器在 OpenBSD 下可以一直無止境地使用 系統記憶體的。)

其實主要原因就是在新的伺服器下的 zope 的使用者的 login class 沒有被設定作 daemon , 它只是一個 default 的 login class 。

而這 default 的 login class 中的設定如下::

default:\
       :path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin /usr/local/bin:\
       :umask=022:\
       :datasize-max=256M:\
       :datasize-cur=75M:\
       :maxproc-max=128:\
       :maxproc-cur=64:\
       :openfiles-cur=64:\
       :stacksize-cur=4M:\
       :localcipher=blowfish,6:\
       :ypcipher=old:\
       :tc=auth-defaults:\
       :tc=auth-ftp-defaults:

你可以看到這裡所指的 datasize-cur 是 75M , 所以當 zope 使用到 75M 的內存時就停了運作。這樣的資源管理在 Linux 上真沒有看見過。

要使用 krb5 認証,其實你也是需要修改這裡的設定。

修改設定:

default:\
	...
	......
	:auth=krb5:、
	......

張 ":tc=auth-defaults:\" 那行。改成":auth=krb5:\" 然後你要讓你的從新產生新的 login.conf.db 檔案。這樣系統才會接受你所下對 login.conf 所作出的修改。

產生新的 login.conf.db 檔案:

root@kdc# cap_mkdb -f /etc/login.conf /etc/login.conf

這樣就可以用 kerberos 的 password 來 login/sudo, "johnw" 這個 user ,其實如果你是修改 default 的話, 其實代表著你所有的系統使用者也使用 krb5 來作認証。

openbsd.samba.hk

在 kdc.samba.hk 上,加上 openbsd.samba.hk 的電腦的服務帳號。另外在產生 keytab 的時候 把它存放到 file:///etc/kerberosV/openbsd.keytab 下,而不是預設的 file:///etc/kerberosV/krb5.keytab 內。

加入 host/openbsd.samba.hk@SAMBA.COM:

root@kdc# kadmin -l
kadmin> add -r host/openbsd.samba.hk
kadmin> ext --keytab=/etc/kerberosV/openbsd.keytab host/openbsd.samba.hk
kadmin> quit

因為 openbsd.samba.hk 和 kdc.samba.hk 的設定是相同的, 所以你可以簡單地只使用 scp 把重要的設定檔抄到 openbsd.samba.hk 下就可以了。

用scp,將(kdc上)這兩個file,copy去openbsd.samba.hk:

(kdc) /etc/kerberosV/krb5.conf  --> (openbsd) /etc/kerberosV/krb5.conf
(kdc) /etc/login.conf   --> (openbsd) /etc/login.conf 
(kdc) /etc/kerberosV/openbsd.keytab --> (openbsd) /etc/kerberosV/krb5.keytab

你要小心地把 openbsd.keytab 抄到 openbsd.samba.hk 下, 不要把 krb5.keytab 抄到 openbsd.samba.hk 下。因為在 kdc.samba.hk 下 krb5.keytab 所存放的 key 是 kdc.samba.hk 而不是 openbsd.samba.hk 的,所以要把它分開處理。

在 openbsd.samba.hk 上打:

root@openbsd# cap_mkdb -f /etc/login.conf /etc/login.conf

這部就可以用 kerberos 的 password 來 login/sudo, "johnw" 這個 user

debian.samba.hk

在 debian.samba.hk 上 install krb5/heimdal 的 packages 。

使用 apt-get 安裝程式包的情況::

root@debian# apt-get install heimdal-clients libpam-heimdal

在 kdc.samba.hk 上,加上 debian.samba.hk 的伺服器服務的 key 。

這情況如 openbsd.samba.hk 那樣::

root@kdc# kadmin -l
kadmin> add -r host/debian.samba.hk
kadmin> ext --keytab=/etc/kerberosV/debian.keytab host/debian.samba.hk
kadmin> quit

這樣就可以建立完成。

用 scp, 張 (kdc上) 這個 file,copy 去 debian.samba.hk

傳送檔案如下:

(kdc) /etc/kerberosV/krb5.conf  --> (debian) /etc/krb5.conf

這裡你可以留意的就是 krb5.conf 檔案在 OpenBSD 下和 在 Debian Linux 下存放在不同的目錄下的。

設定 PAM 認証模組

在 Debian sarage 下, PAM 開始有一些公用的設定檔案,也就是說如果你修改了這些檔案後, 就會在 Debian 下所有的網絡服務都受到這些設定檔的影響。例如在 auth 下,就有 common-auth 。 而 account 下就有 common-account 等。 (至於如何分別在 PAM 下的 auth 和 account 的分別, 這裡不詳細講解了,但是你可以參考 dovecot 下的 auth_passdb 和 auth_userdb 中的講解。 其實在 PAM 中還多了 session 和 password 這兩項。) dovecot-virtula-mailbox

設定 [pam], 在/etc/pam.d/common-auth 頂頭,加一行:

auth sufficient pam_krb5.so no_ccache

如果你唔加 no_ccache ,xdm 會 login 唔到,可參考

這樣就可以用 kerberos 的 password 來 login/sudo,"johnw" 這個 user

winxp.samba.hk

去 microsoft 度 download(免費的) "WindowsXP-KB838079-SupportTools-ENU.exe" 去 http://microsoft.com search "WindowsXP-KB838079-SupportTools-ENU.exe" 就會見到 install完(要full install),就會有個 ksetup.exe 就是用這 ksetup.exe ,在 cmd.exe 上設定(我唔識用 gui 的 tools 來整)

可以參考下面兩篇文件。

  1. 在 OpenBSD 上,打 "info heimdal" ,會有一分文件是講 "Windows 2000 compatability" 的
  2. 在 microsoft.com 上,也有一份

但會有小小問題,在 kdc 上,不可照它做, 否則會 login 唔到

在 kdc.samba.hk 上,加上 winxp.samba.hk 的伺服服務的帳號。:

root@kdc# kadmin -l
kadmin> add host/winxp.samba.hk
kadmin> quit

打兩次 password,這個 password 是用來做 winxp.samba.hk computer password (現在假設這個password是"winxppw")

在winxp.samba.hk 上開個 cmd.exe/dos, 打:

dos> ksetup /setdomain SAMBA.HK
dos> ksetup /addkdc SAMBA.HK kdc.samba.hk
dos> ksetup /setcomputerpassword winxppw
dos> ksetup /mapuser johnw@SAMBA.HK johnw

ksetup /mapuser是這樣用的:

ksetup /mapuser kdc_user@REALM.NAME local_nt_user

也可以用萬用字,map晒所有同名的user:

ksetup /mapuser * *

可參考"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\Kerberos" (這個register key,可以改,或delete它,重新設定過)

reboot 後,這部就可以用 kerberos 的 password 來 login,"johnw" 這個 user

感謝你的 Document ,其實在 Linux 下的 Kerberos Services ,我己玩得十分熟了,但是 OpenBSD 下的 Kerberos 伺服器,自己卻一直未玩過。所以也無法和大家分享,多謝你提供的文件。
《OpenBSD 下的 Kerberos》frankie Tue May 17 05:42:24 +0800 2005
Personal tools