Sun 企業辯證機制使用指南

第 6章 使用 SEAM

本章旨在讓那些已安裝 SEAM 的系統上的使用者使用。其中將說明應如何使用 SEAM 所提供的 "Kerberos 化" 指令﹕ftprcprloginrsh、及 telnet。在參閱本章的說明之前,您應該已經對這些指令非常熟悉(其非 Kerberos 化的版本)。您會發現其實 Kerberos 化與非 Kerberos 化的版本幾乎大同小異。事實上,在您使用這些指令時經常都不會區分它們是否為 Kerberos 化還是不是。不同之處在於使用某些利用 Kerberos 的功能(例如﹕在您使用 rlogin 時轉遞一張許可證)。

因為本章適用於一般程度的讀者,其中包括許多有關許可證的說明,如﹕取得、檢視、與損毀許可證等。其中也包括有關選擇或變更一個 Kerberos 密碼的資訊。

請參見 第 1章, SEAM 簡介 中的 SEAM 概觀性介紹。

以下列出本章所涵蓋的各項主題﹕

許可證管理

本節將說明應如何取得、檢視、與損毀許可證。請參見 "SEAM 如何運作" 中有關許可證的說明。

您是否必須擔心許可證的事宜?

在安裝 SEAM 之後,Kerberos 被建入 login 指令,因此您會在登入時自動取得許可證。Kerberos 化指令 rshrcptelnet、及 rlogin 通常是設定為將您許可證的副本轉遞至其他的機器,所以您不需要特定的許可證便能取得這些機器的存取權限。(也許您的 SEAM 設置並不包括此自動轉遞的功能,但是它一向是預設的一個行為。)請參見 "Kerberos 化指令的概觀""以 -f 及 F 來轉遞許可證-" 中有關轉遞許可證的詳細說明。

大多數的 Kerberos 化指令也會在您的許可證時間結束時自動將它們損毀。不過您可能必須在用完您的 Kerberos 許可證之後,以 kdestroy 來確實將它損毀以確保安全。請參見 "如何損毀許可證" 中有關 kdestroy 的詳細資訊。

請參見 "許可證壽命" 中有關許可證壽命的資訊。

如何建立一張許可證

通常在您登入時會自動建立一張許可證,所以您並不需要執行什麼動作。不過您可能必須在下列情況之下建立一張許可證﹕

要建立一張許可證,請使用 kinit 指令。


% /usr/krb5/bin/kinit  

kinit 會提示您要輸入您的密碼。請參見 kinit(1) 線上援助頁中所述的 kinit 指令之完整語法。

範例 - 建立一張許可證

此範例說明一位使用者 jennifer 如何在她自己的系統之上建立一張許可證﹕


% Password for jennifer@ENG.ACME.COM:  
<輸入密碼>

以下使用者 david-l 選項來建立一張時效長達三個小時的許可證﹕


% kinit -l 3h david@ACME.ORG 
Password for david@ACME.ORG:<輸入密碼> 

此範例說明 david (以 -f)為他自己建立一張可轉遞的許可證。他可以利用此可轉遞的許可證來(例如)登入第二個系統,然後再 telnet 到第三個系統。


% kinit -f david@ACME.ORG:
Password for david@ACME.ORG<輸入密碼>

如需有關轉遞許可證如何運作的資訊,請參見 "以 -f 及 F 來轉遞許可證-""許可證類型"

如何檢視許可證

並非所有的許可證都是相同的。一張許可證可能是,例如,可轉遞;另一個可能是遠期的;而第三個也許兩者皆是。您可以利用 klist 指令,配合 -f 選項來查看您所擁有的許可證及其屬性為何﹕


% /usr/krb5/bin/klist -f

下列符號代表與每張許可證有關的屬性,如 klist 所示﹕

可轉遞 

轉遞的 

可代理 

代理 

可遠期 

遠期的 

可更新 

初始的 

無效的 

"許可證類型" 說明一張許可證所含的各種屬性。

範例 - 檢視許可證

此範例說明使用者 jennifer 有一張初始的許可證,是可轉遞 (F) 而且是 遠期的 (d)的,但尚未生效 (i)﹕


% /usr/krb5/bin/klist -f
Ticket cache: /tmp/krb5cc_74287
Default principal: jenniferm@ENG.ACME.COM
 
Valid starting                 Expires                 Service principal
09 Mar 99 15:09:51  09 Mar 99 21:09:51  nfs/ACME.SUN.COM@ACME.SUN.COM
        renew until 10 Mar 99 15:12:51, Flags: Fdi
 

下方的範例說明使用者 david 有兩張從另一個主機被轉遞 (f) 至他主機的許可證。這些許可證同時也是 (re) 可轉遞 (F) 的許可證﹕


% klist -f
Ticket cache: /tmp/krb5cc_74287
Default principal: david@ACME.SUN.COM
 
Valid starting                 Expires                 Service principal
07 Mar 99 06:09:51  09 Mar 99 23:33:51  host/ACME.COM@ACME.COM
        renew until 10 Mar 99 17:09:51, Flags: fF
 
Valid starting                 Expires                 Service principal
08 Mar 99 08:09:51  09 Mar 99 12:54:51  nfs/ACME.COM@ACME.COM
        renew until 10 Mar 99 15:22:51, Flags: fF

如何損毀許可證

通常當建立許可證的指令結束之後,許可證就會自動損毀;不過您可能必須在用完您的 Kerberos 許可證之後,確實將它損毀以確保安全。許可證可能會被偷,如果發生這種情況,擁有它們的人便可以在它們過期之前使用(儘管偷來的許可證要在解密之後才能使用)。

要損毀您的許可證,請使用 kdestroy 指令。


% /usr/krb5/bin/kdestroy

kdestroy 可以損毀您的所有許可證。您無法用它來選擇性地損毀一張特定的許可證。

如果您必須離開您的系統,而又擔心可能會有人侵入而隨意使用您的權限,您就必須使用 kdestroy 或者是一個鎖定螢幕畫面的螢幕保護器。


註解 -

一個確保總是損毀許可證的方法是將 kdestroy 指令新增至您主目錄的 .logout 檔案中。

若已設置 PAM 模組的話(最常使用的預設值),許可證會在您登出時自動損毀,因此就沒有必要將一個 kdestroy 的呼叫新增至您的 .login 檔案中。不過如果尚未設置 PAM 模組,或者如果您並不清楚情況,您最好將 kdestroy 新增至您的 .login 檔案中,以確保許可證確實在您結束您的系統之後被損毀。


密碼管理

在安裝 SEAM 之後,您就有了兩個密碼﹕您普通的 Solaris 密碼,以及一個 Kerberos 密碼。您可以將這兩個密碼設定為相同的,也可以讓它們互不相同。

login 的非 Kerberos 化指令通常會透過 PAM 來設定以與 Kerberos 及 UNIX 一起辯證。如果您擁有不同的密碼,就必須同時提供兩個密碼才能以正確的辯證登入。不過如果兩個密碼相同,您輸入的第一個 UNIX 密碼也會被 Kerberos 所接受。

可惜的是,使用相同的密碼會產生安全上的顧慮。也就是說,如果某人發現了您的 Kerberos 密碼,那麼您的 UNIX 密碼也就不再是秘密了。不過 UNIX 和 Kerberos 都使用相同的密碼還是要比一個沒有 Kerberos 的網站來得安全,因為 Kerberos 環境中的密碼都不是透過網路傳送的。通常您的網站會包括一個為您決定密碼選項的政策。

您的 Kerberos 密碼就是 Kerberos 唯一用來確認您身份的方法。如果某人發現了您的 Kerberos 密碼,Kerberos 的安全防護就失去意義,因為該人可以假裝成您 - 送出來自 "您" 的電子郵件,讀取、編輯、或刪除您的檔案,或是以您的身份來登入其他主機 - 而且沒有人會知道。因此,您必須謹慎選擇一個好的密碼並加以善加保管。如果您必須將您帳號的存取權限賦予他人,您可以透過 Kerberos 而不需要洩露您的密碼(請參見 "賦予您帳號的存取權限")。您永遠都不能將您的密碼告知他人,甚至是您的系統管理員也不行。此外,您必須經常更換您的密碼,特別是在您懷疑可能有人發現的時候。

選擇一個密碼的建議

您的密碼可以包括幾乎所有您能夠鍵入的字元(主要的不同在於控制鍵以及 Return 鍵)。一個好的密碼必須要好記,但又不讓人輕易猜得到。不好的密碼包括﹕

一個好的密碼至少要有八個字元。此外,密碼應該包括大小寫字母的字元、數字、及標點符號等的混合。下列範例在沒被本手冊採用時應該屬於好的密碼選擇﹕


小心 - 小心 -

請勿使用這些範例。手冊中出現的密碼是侵入者會最先嘗試的。


更換您的密碼

您可以有兩種更換您 Kerberos 密碼的方法﹕

在您更換您的密碼之後,變更要花一點時間才會傳播到整個系統(特別是在大型網路之上)。視您系統的設定而定,可能要花到幾分鐘到幾個小時或甚至更久。如果您必須在更換您的密碼之後馬上取得一張新的 Kerberos 許可證,請先試用您的新密碼。如果新密碼無效,再試著使用舊的密碼。

Kerberos V5 允許系統管理員指定可供每位使用者使用的密碼條件。此種條件是由為每位使用者所定的政策(或是一個預設的政策)來定義的 - 請參見 "管理政策" 中有關政策的詳細說明。例如,假設 jennifer 的政策(譬如說是 jenpol)規定密碼至少要有八個字母,還要包括至少兩種字元類型。那麼 kpasswd 就會拒絕接受 "sloth" 作為一個密碼﹕


%kpasswd
kpasswd: Changing password for jennifer@ENG.ACME.COM. 
Old password:<jennifer 輸入她現存的密碼>
kpasswd: jennifer@ENG.ACME.COM's password is controlled by the policy jenpol which requires a minimum of 8 characters from at least 2 classes  (the five classes are lowercase, uppercase, numbers, punctuation, and all other characters). New password: 

<jennifer 輸入 'sloth'> New password (again):
<jennifer 重新輸入 'sloth'>
kpasswd: New password is too short. 
Please choose a password which is at least 4 characters long. 

jennifer 在這__使用 "slothrop49" 來作為密碼。'slothrop49' 符合條件,因為它的長度超過八個字母,而且包含兩種不同的字元(數字和小寫字母)﹕


% kpasswd
kpasswd: Changing password for jennifer@ENG.ACME.COM. 
Old password:<jennifer 輸入她現存的密碼>
kpasswd: jennifer@ENG.ACME.COM's password is controlled by the policy jenpol 
which requires a minimum of 8 characters from at least 2 classes  
(the five classes are lowercase, uppercase, numbers, punctuation, and all other characters). 
New password:  
<jennifer 輸入 'slothrop49'>
New password (again):  
<jennifer 重新輸入 'slothrop49'>Kerberos password changed.

範例 - 更換您的密碼

下列範例說明 davidpasswd 指令來更換他的 UNIX 及 Kerberos 密碼。


% passwd
passwd: Changing password for david 	
Enter login (NIS+) password: <輸入目前的 UNIX 密碼>	
New password:                        
< 輸入新的 UNIX 密碼>
Re-enter password:                   <確認新的 UNIX 密碼>
	Old KRB5 password:                   < 輸入目前的 Kerberos 密碼>	
New KRB5 password:                   <e輸入新的 Kerberos 密碼	Re-enter new KRB5 password:          <確認新的 Kerberos 密碼>

在上面的範例中,passwd 會要求 UNIX 及 Kerberos 兩個密碼,不過如果 PAM 模組中設定了 try_first_pass 的話,Kerberos 密碼就會自動被設定為和 UNIX 密碼相同。(即為預設的設置)。這時,david 必須使用 kpasswd 來將他的 Kerberos 密碼設定為其他的密碼,如下所示。

此範例說明他只以 kpasswd 來變更他的 Kerberos 密碼﹕


% kpasswd
kpasswd: Changing password for david@ENG.ACME.COM. 
Old password:<輸入目前的 Kerberos 密碼>
New password:           
< 輸入新的 Kerberos 密碼>  
New password (again): <確認新的 Kerberos 密碼>  
Kerberos password changed.

在此範例中,david 要更換 Kerberos 主管 david/admin(並非有效的 UNIX 使用者)的密碼。他必須使用 kpasswd 來更換密碼。


% kpasswd david/admin
kpasswd:  Changing password for david/admin. 
Old password:		<輸入目前的 Kerberos 密碼>        
New password:			<輸入新的 Kerberos 密碼>
New password (again):	<確認新的 Kerberos 密碼>
Kerberos password changed.

賦予您帳號的存取權限

如果您必須賦予某人登入您帳號(以您的身份)的存取權限,您可以透過 Kerberos 進行而不需要洩露您的密碼,只需要在您主目錄中放入 .k5login 檔案即可。一個 .k5login 檔案是一份與您想賦予存取權限的每一個人對應的一或多位 Kerberos 主管的清單。(每位主管都必須出現在分別的一行。)

假設使用者 david 在他的主目錄中保留了一個 .k5login 檔案,看起來如下﹕


jennifer@ENG.ACME.COM
 joe@ACME.ORG  

此檔案規定只要使用者 jenniferjoe 已在各自的範疇擁有 Kerberos 許可證,他們就可以成為 david 的身份。例如,jennifer 可以利用他的身份來 rlogin 登入 david 的機器 (boston),而不需要提供他的密碼﹕

圖 6-1 使用 .k5login 檔案

Graphic

(假如 david 的主目錄已經裝載了 NFS,而且使用另一個(第三個)機器的 Kerberos V5 協定的話,那麼 jennifer 就必須有一張可轉遞許可證才能存取他的主目錄。請參見 "如何建立一張許可證" 中使用可轉遞許可證的範例說明。)

如果您將要登入網路上的其他機器,您就必須在那些機器的 .k5login 檔案中包括您自己的 Kerberos 主管在內。

使用一個 .k5login 檔案比把您的密碼告知他人要來得安全﹕

普遍使用 .k5login 檔案的方法是將它置於 root 的主目錄之下,以將該部機器的 root 存取權限賦予所列的 Kerberos 主管。這樣一來,系統管理員可以成為本機的 root,或是以 root 的身份遠端登入,而不需要洩露其 root 密碼,也沒有任何人需要透過網路來鍵入 root 密碼。

範例 - 使用 .k5login 檔案

假設 jennifer 決定要以 root 的身份來登入機器 boston.acme.com。由於她在 boston.acme.comroot 主目錄的 .k5login 檔案中有一個主管名稱項目,因此她就不需要鍵入她自己的密碼﹕


% rlogin boston.acme.com -l root -x
This rlogin session is using DES encryption for all data transmissions.  
Last login: Thu Jun 20 16:20:50 from daffodil  
SunOS Release 5.7 (GENERIC) #2: Tue Nov 14 18:09:31 EST 1998  
boston[root]% 

SEAM 指令

Kerberos V5 是一種單一簽入的系統。這表示您只需要鍵入您的密碼一次,而 Kerberos V5 程式便會自動為您進行辯證(及選擇性的加密),因為 Kerberos 已經被建入每一個現存所有常見的網路程式套件中。Kerberos V5 應用程式是現存的 UNIX 網路程式新增 Kerberos 功能而得出的程式。

例如,當您使用一個 Kerberos 化程式與一個遠端主機連線時,程式、KDC、及遠端主機會執行一連串的快速協調。協調完成之後,您的程式便將您的身份證明給遠端主機,而遠端主機便會因此賦予您存取權限。

請注意 Kerberos 化的指令會先試著以 Kerberos 來進行辯證。如果 Kerberos 辯證失敗的話,會有一個錯誤發生,或者會嘗試 UNIX 的辯證,視與指令使用的選項而定。請參閱 Kerberos 指令線上援助頁中的 Kerberos 安全一節中的詳細資訊。

Kerberos 化指令的概觀

Kerberos 化的網路服務是在網際網路上某處與另一部機器連線的程式。這些程式位於 /usr/krb5/bin 中。請設定您的 PATH 變數好讓他們出現在非 Kerberos 的變數之前。程式包括﹕

這些程式都有與其相應的非 Kerberos 程式相同的功能。此外它們還有額外的功能,可以透明化地使用您的 Kerberos 許可證來與遠端主機協調辯證(及選擇性的加密)。在很多時候,您只會注意到您在使用他們時不再需要鍵入您的密碼,因為 Kerberos 可以證明您的身份。

Kerberos V5 網路程式可以讓您選擇﹕


註解 -

本節將假設您已經對非 Kerberos 的這些程式有所瞭解,因此只會重點式地說明 Kerberos V5 套裝軟體所附帶的 Kerberos 新增功能。欲知有關此處所說明指令的詳細資訊,請參見其各自的線上援助頁。


下列 Kerberos 選項已新增至 ftprcprloginrsh、及 telnet 中﹕

-a

嘗試使用您現存的許可證自動登入。使用如 getlogin() 所傳回的使用者名稱,除非它與目前的使用者識別碼不同。(請參見 telnet(1) 線上援助頁中的詳細說明。)

-f

將一張不可重新轉遞的許可證轉遞至一個遠端主機。此選項和 -F 不能並存(請參見下方);它們無法在相同的指令中一起使用。

如果您有理由相信您必須在一個第三方主機之上向其他 Kerberos 式的服務辯證自己的話,您就必須轉遞一張許可證 - 例如,您想要 rlogin 登入另一部機器然後再從它 rlogin 登入另一部機器。

如果您在遠端主機上的主目錄已使用 Kerberos V5 裝載的話,您就一定要使用一張可轉遞許可證。否則,您將無法存取您的主目錄。(也就是說,假設您一開始登入系統 1。然後又從系統 1 rlogin 登入您的主機器,系統 2,它又從系統 3 裝載您的主目錄。除非您已經與 rlogin 配合使用 -f-F 選項,否則您將無法取得您的主目錄,因為您的許可證無法被轉遞至系統 3。)

根據預設,kinit 會取得可轉遞的能賦予許可證的許可證 (TGT),不過您的 SEAM 設置在此可能會有所不同。

請參見 "以 -f 及 F 來轉遞許可證-" 中有關轉遞許可證的說明。

-F

將您的一張可重新轉遞之能賦予許可證的許可證副本轉遞給一個遠端系統。這和 -f 很類似(請參見上方),不過它還可讓您繼續存取其他更多(比方說第四或第五)的機器。因此 -F 選項可以被視為 -f 選項的上層集合。-F 選項無法與 -f 選項共存,它們無法被用於相同的指令中。

請參見 "以 -f 及 F 來轉遞許可證-" 中有關轉遞許可證的詳細說明。

-k realm

要求存取指定的範疇中的遠端主機之許可證,而不是使用 krb5.conf 檔案來自行決定範疇。

-K

使用您的許可證來向遠端主機辯證,但並不自動登入。

-m mechanism

指定要使用的 GSS-API 安全機制,如 /etc/gss/mech 檔案中所列。預設為 kerberos_v5

-x

加密此作業階段。

-Xauth_type

停用 auth_type 的辯證類型。

表 6-1 顯示擁有特定選項的指令(一個 "X" 表示指令有該選項)。

表 6-1 網路指令的 Kerberos 選項

 

ftp

rcp

rlogin

rsh

telnet

-a

 

 

 

 

-f

 

-F

 

 

-k

 

-K

 

 

 

 

-m

 

 

 

 

-x

 

-X

 

 

 

 

此外,ftp 允許一個作業階段的保護等級在其提示時設定﹕

clear

將保護等級設定為"clear"(沒有任何保護)。此為預設值。

private

將保護等級設定為"private"。利用加密來確保資料傳輸的保密性及整合性。不過這種專用的服務不適用於所有的 SEAM 使用者。

safe

將保護等級設定為"safety"。利用加密核對和來確保資料傳輸的整合性。

您也可以在上述的任何保護等級(clearprivate、或safety)之後輸入 protect,以在 ftp 提示時設定保護等級。

-f 及 F 來轉遞許可證-

"Kerberos 化指令的概觀" 中所述,您可以利用某些指令,配合 -f-F 選項來轉遞許可證。轉遞許可證可讓您將網路交換"鏈結"起來。例如,您可以 rlogin 登入一部機器,然後再從它 rlogin 登入到另一部機器。-f 選項允許您轉遞一張許可證,而 -F 選項則讓您重新將一張轉遞的許可證再轉遞出去。

圖 6-2 中,使用者 davidkinit 取得一張不可轉遞之能賦予許可證的許可證 (TGT)。(因為他並未指定 -f 選項,所以為不可轉遞。)在例 1 中,他可以 rlogin 登入機器 B,但是到此為止。在例 2 中,rlogin -f 指令因為他嘗試轉遞一張不可轉遞的許可證而失敗。

圖 6-2 使用不可轉遞的許可證

Graphic

(實際上 SEAM 設置檔案是預設為 kinit 取得可轉遞許可證。不過您的設置會有所不同。我們為了便於說明,就假設 kinit 沒有取得可轉遞的 TGT,除非它與 kinit -f 有關。同時請注意,kinit 並沒有一個 -F 選項;而 TGT 可以是可轉遞的,也可以不是。)

圖 6-3 中,davidkinit -f 取得可轉遞的 TGT。在例 3 中,他可以存取機器 C,因為他以 rlogin 使用一張可轉遞的許可證。而在例 4 中,第二個 rlogin 登入因為許可證不可重新轉遞而失敗。藉由改用 -F 選項,如例 5 所示,第二個 rlogin 登入成功,而且許可證也被重新重新轉遞至機器 D。

圖 6-3 使用可轉遞的許可證

Graphic

範例 - 使用 Kerberos 化的指令

下列範例將對 Kerberos 化指令選項的運作方式稍加說明。

範例 - 與 telnet 配合使用-a-f、及 -x 選項

在此範例中,使用者 david 已經登入,並且想要 telnet 至機器 denver.acme.com 之上。他使用 -f 選項來轉遞他現存的許可證,而以 -x 選項來加密作業階段,-a 選項來自動執行登入。因為他不打算使用第三部主機的服務, 因此可以使用 -f 而非 -F


% telnet -a -f -x denver.acme.com
Trying 128.0.0.5... 
Connected to denver.acme.com. Escape character is '^]'. 
[ Kerberos V5 accepts you as "david@eng.acme.com" ]
[ Kerberos V5 accepted forwarded credentials ]
SunOS 5.7: Tue May 21 00:31:42 EDT 1998  Welcome to SunOS  %

請注意,david 的機器是使用 Kerberos 來向 denver.acme.com 進行辯證,並且自動將他登入為本人。他有一個加密的作業階段,而且還準備好一份許可證的副本,也永遠不需要鍵入他的密碼。如果他使用的是非 Kerberos 的 telnet,他就會被提示要輸入他的密碼,而且密碼會在沒有加密的情況下透過網路傳送 - 如果當時剛好有人在盜取網路資料的交通,侵入者就會得知 david 的密碼。

如果您轉遞您的 Kerberos 許可證,telnet(以及其他此處所述的指令)便會在它結束時將它損毀。

範例 - 與 -F 選項配合使用 rlogin

在此使用者 jennifer 想要登入她自己的機器 boston.acme.com。她以 -F 來轉遞現存的許可證,並且利用 -x 來加密作業階段。她選擇使用 -F 而不是 -f,因為在她登入 boston 之後,還有可能要執行其他的網路交換,因此需要能夠隨時重新轉遞許可證。同時,因為她正在轉遞她現存的許可證,因此就不需要鍵入她的密碼。


% rlogin boston.acme.com -F -x
This rlogin session is using DES encryption for all transmissions.
Last login Mon May 19 15:19:49 from daffodil 
SunOS Release 5.7 (GENERIC) #2 Tue Nov 14 18:09:3 EST 1998 
%

範例 - 在 ftp 中設定保護等級

現在假設 joe 想要使用 ftp 來從 denver.acme.com 機器中的 ~joe/MAIL 目錄中獲取他的郵件,他就必須加密作業階段。其交換動作如下﹕


% ftp -f denver.acme.com
Connected to denver.acme.com
220 denver.acme.org FTP server (Version 6.0) ready.
334 Using authentication type GSSAPI; ADAT must follow
GSSAPI accepted as authentication type 
GSSAPI authentication succeeded Name (daffodil.acme.org:joe) 
232 GSSAPI user joe@MELPOMENE.ACME.COM is authorized as joe
230 User joe logged in.
Remote system type is UNIX.
Using BINARY mode to transfer files.
ftp> protect private
200 Protection level set to Private
ftp> cd ~joe/MAIL
250 CWD command successful.
ftp> get RMAIL
227 Entering Passive Mode (128,0,0,5,16,49)
150 Opening BINARY mode data connection for RMAIL (158336 bytes).
226 Transfer complete. 158336 bytes received in 1.9 seconds (1.4e+02 Kbytes/s)
ftp> quit
% 

要加密作業階段,joe 將保護等級設定為 private