Sun 企業辯證機制使用指南

第 3章 設置 SEAM

本章將說明 KDC 伺服器、網路應用程式伺服器、NFS 伺服器、及 SEAM 客戶端等的設置程序。許多這些程序都需要 root 的存取權限,因此應由系統管理員或進階使用者來使用。此外並包含跨範疇設置程序及其他與 KDC 伺服器有關的主題。

SEAM 設置工作對映

設置過程的部份取決於其他的部份,而且必須依照特定的順序來完成。這些程序通常會建立使用 SEAM 時所必需的服務。其他程序互不相干,可以在需要時完成。下表顯示建議的 SEAM 安裝順序﹕

表 3-1 第一個步驟﹕SEAM 設置的順序

工作 

說明 

如需有關說明,請到 ... 

1. 計劃您的 SEAM 安裝 

 考慮設置方面的問題並且在開始軟體的安裝過程之前做決定。第 2章, SEAM 的計劃

2.(可任選)安裝 NTP 

 為了讓 SEAM 能夠正常運作,範疇中所有系統之上的時鐘必須保持同步。"同步化 KDC 及 SEAM 客戶端之間的時鐘"

3.(可任選)執行 SEAM 事先設置程序 

 要使安裝一個有許多主機的網站時容易一點,請先執行程序來將大部份的安裝資訊貯存在一個 NFS 伺服器之上。然後可以在安裝過程中使用這些資訊。SEAM 安裝及發行注意事項

4. 設置主 KDC 伺服器 

 設置與建構一個範疇的主 KDC 伺服器及資料庫的步驟。"如何設置一個主 KDC"

5.(可任選)設置一個從屬 KDC 伺服器 

 設置與建構一個範疇的從屬 KDC 伺服器的步驟。"如何設置一個從屬 KDC"

6.(可任選)增進 KDC 伺服器之上的安全 

 防止 KDC 伺服器安全性產生危險的步驟。"如何限制 KDC 伺服器的存取權限"

7.(可任選)設置可調換的 KDC 伺服器 

 請依照此程序的步驟好讓調換主與一個從屬 KDC 的工作容易一點。"如何設置一個可調換從屬 KDC"

一旦完成必要的步驟之後,下列程序可於必要時使用。

表 3-2 下一步﹕額外的 SEAM 工作

工作 

說明 

如需有關說明,請到 ... 

設置跨範疇辯證 

 啟用範疇之間通訊功能的步驟。"設置跨範疇辯證"

設置 SEAM 應用程式伺服器 

使用 Kerberos 辯證,讓一個伺服器去支援如 ftptelnet 、及 rsh 等服務的步驟。"設置 SEAM 網路應用程式伺服器"

設置 SEAM 客戶端 

 讓一個客戶端能夠使用 SEAM 服務的步驟。"設置 SEAM 客戶端"

設置 SEAM NFS 伺服器 

 讓一個伺服器去共享一個需要 Kerberos 辯證的檔案系統的步驟。"設置 SEAM NFS 伺服器"

增進一個應用程式伺服器上的安全 

 將存取權限限制於辯證的交易,而增進一個應用程式伺服器安全的步驟。"如何只啟用 Kerberos 化應用程式"

設置 KDC 伺服器

在安裝 SEAM 軟體之後,您必須設置 KDC 伺服器。設置可以提供核發證書服務的一個主 KDC 和至少一個從屬 KDC。這些證書是 SEAM 的基礎,因此必須在嘗試進行其他工作之前先安裝 KDC。

主及從屬 KDC 之間最大的差異之處在於只有主 KDC 可以處理資料庫管理的要求。例如,必須在主 KDC 之上才能變更一個密碼或新增一個新的主管。然後這些變更會被傳播至從屬 KDC。從屬及主 KDC 都能生成證書,以便在主 KDC 無法回應時提供備用。

如何設置一個主 KDC

要為您提供一個完成的範例,我們假設您並未執行事先設置的程序。如果您在安裝軟體時使用事先設置的程序,那麼此程序中所包括的許多檔案就不需要編輯;不過您還是應該要審閱檔案的內容來確定。

在此程序中必須使用下列的設置參數﹕

  1. 設置一個主 KDC 的先決條件。

    此程序需要先已安裝主 KDC 軟體。此外還必須執行 DNS。如果此主 KDC 要是可調換的話,請參見 "調換主與從屬 KDC" 中特定的命名指示。

  2. 成為主 KDC 之上的超級使用者。

  3. 編輯 Kerberos 設置檔案 (krb5.conf)。

    您必須變更伺服器的範疇名稱及名稱。請參見 krb5.conf(4) 線上援助頁中有關此檔案的詳細說明。如果您是使用設置檔案來安裝 SEAM 軟體的話,請確認檔案內容而不要編輯它。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = ACME.COM
    
    [realms]
                    ACME.COM = {
                    kdc = kdc1.acme.com
                    kdc = kdc2.acme.com
                    admin_server = kdc1.acme.com
            }
    
    [domain_realm]
            .acme.com = ACME.COM
    #
    # if the domain name and realm name are equivalent, 
    # this entry is not needed
    #
    [logging]
            default = FILE:/var/krb5/kdc.log
            kdc = FILE:/var/krb5/kdc.log
    
    [appdefaults]
        gkadmin = {
            help_url = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
            }

    在此範例中,default_realmkdcadmin_server、及所有的 domain_realm 項目數行文字都被變更。default_realm 的文字也包括在內以使範例完整,但如果範疇及領域名稱對等的話,安裝過程便不會建立此項目。此外,定義 help_url 的文字也經過編輯。

  4. 編輯 KDC 設置檔案 (kdc.conf)。

    您必須變更範疇名稱。請參見 kdc.conf(4) 線上援助頁中有關此檔案的詳細說明。如果您是使用設置檔案來安裝 SEAM 軟體的話,請確認檔案內容而不要編輯它。


    kdc1 # cat /etc/krb5/kdc.conf
    [kdcdefaults]
            kdc_ports = 88,750
    
    [realms]
            ACME.COM= {
                    profile = /etc/krb5/krb5.conf
                    database_name = /var/krb5/principal
                    admin_keytab = /var/krb5/kadm5.keytab
                    acl_file = /var/krb5/kadm5.acl
                    kadmind_port = 749
                    max_life = 8h 0m 0s
                    max_renewable_life = 7d 0h 0m 0s
            }

    在此範例中,realms 一節中所定義的範疇名稱也經過變更。

  5. 使用 kdb5_util 來建立 KDC 資料庫。

    kdb5_util 指令會建立 KDC 資料庫,而且在與 -s 選項一起使用時,會建立一個在開始kadmindkrb5kdc 常駐程式之前用來向其本身辯證 KDC 的存放檔案。


    kdc1 # /usr/krb5/sbin/kdb5_util create -r ACME.COM -s 
    Initializing database '/var/krb5/principal' for realm 'ACME.COM'
    master key name 'K/M@ACME.COM' 
    You will be prompted for the database Master Password.
    It is important that you NOT FORGET this password.
    Enter KDC database master key:< 鍵入密鑰>	
    Re-enter KDC database master 密鑰 to verify: < 再一次鍵入>
    

    如果範疇名稱對等於伺服器名稱空間領域名稱的話,後面跟著範疇名稱的 -r 選項就非必要。

  6. 編輯 Kerberos 存取控制清單檔案 (kadm5.acl)。

    一旦傳播之後,/etc/krb5/kadm5.acl 應該 包含可以管理 KDC 的所有主管名稱。第一個新增的項目如下所示﹕


    kws/admin@ACME.COM   *

    此項目賦予 ACME.COM 範疇中的 kws/admin 主管修改 KDC 中的主管或政策的功能。預設的安裝包括一個 “*” 以符合所有的管理主管。這可能造成安全上的顧慮,因此包括一份所有管理主管的清單會比較安全。

  7. 開始 kadmin.local

    下幾個步驟可以建立 SEAM 所用的主管。


    kdc1 # /usr/krb5/sbin/kadmin.local
    kadmin.local: 
    1. 使用 kadmin.local 來將管理主管新增至資料庫中。

      您可以隨您所需來新增許多管理主管。您必須新增至少一個管理主管以完成 KDC 的設置過程。在此例中,新增了一個 kws/admin 主管。您可以利用一個適當的主管名稱來取代 “kws。”


      kadmin.local: addprinc kws/
      admin
      Enter password for principal kws/admin@ACME.COM: < 鍵入密碼>
      Re-enter password for principal kws/admin@ACME.COM: < 再一次鍵入> Principal "kws/admin@ACME.COM" created. 
      kadmin.local:
    2. 使用 kadmin.local 來建立一個 kadmin 的密鑰表檔案。

      此指令序列可以利用 kadminchangepw 的主管項目來建立一個特殊的密鑰表檔案。這些主管為 kadmind 服務所需。


      kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc1.acme.com
      Entry for principal kadmin/kdc1.acme.com with kvno 3, 
      encryption type DES-CBC-CRC
      added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      kadmin.local: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc1.acme.com 
      Entry for principal changepw/kdc1.acme.com with 
      kvno 3, encryption type DES-CBC-CRC added to keytab 
      WRFILE:/etc/krb5/kadm5.keytab.
      kadmin.local: 
    3. 退出 kadmin.local

      您已經新增了下一步的所有必要主管。


      kadmin.local: quit
      
  8. 開始 Kerberos 常駐程式。


    kdc1 # /etc/init.d/kdc startkdc1 # 
    /etc/init.d/kdc.master start
    
  9. 開始 kadmin

    此時您可以使用 SEAM 管理工具來新增主管。此處所示的指令行範例僅供方便之用。您必須以您在此程序之前所建立的其中一個管理主管名稱來登入。


    kdc1 # /usr/krb5/sbin/kadmin -p kws/admin
    Enter password: <輸入 kws/admin 密碼> 
    kadmin:
    1. 使用 kadmin 來建立主 KDC 主機主管。

      主機主管是由 Kerberos 化的應用程式(如 klistkprop)以及 Kerberos 化服務(如 ftptelnet)所使用。


      kadmin: addprinc -randkey host/kdc1.acme.com
      Principal "host/kdc1.acme.com@ACME.COM" created.
      kadmin: 
    2. 可任選﹕使用 kadmin 來建立主 KDC root 主管。

      此主管是用於辯證的 NFS 裝載,因此一個主 KDC 上可能並不需要。


      kadmin: addprinc root/kdc1.acme.com 
      Enter password for principal root/kdc1.acme.com@ACME.COM:< 鍵入密碼> 
      Re-enter password for principal root/kdc1.acme.com@ACME.COM:< 再一次鍵入> 
      Principal "root/kdc1.acme.com@ACME.COM" created. 
      kadmin:
    3. 將主 KDC 主機主管新增至主 KDC 密鑰表檔案中。

      將主機主管新增至密鑰表檔案中以自動使用此主管。


      kadmin: ktadd host/kdc1.acme.com
      kadmin: Entry for principal host/kdc1.acme.com with
        kvno 3, encryption type DES-CBC-CRC added to keytab
        WRFILE:/etc/krb5/krb5.keytab
      kadmin: quit
      
    4. 退出 kadmin


      kadmin: quit
      
  10. 將每個 KDC 的項目新增至傳播設置檔案中 (kpropd.acl)。

    請參見 kprop(1M) 線上援助頁中有關此檔案的詳細說明。如果您是使用設置檔案來安裝 SEAM 軟體的話,請確認檔案內容而不要編輯它。


    kdc1 # cat /etc/krb5/kpropd.acl
    host/kdc1.acme.com@ACME.COM
    host/kdc2.acme.com@ACME.COM
  11. 可任選﹕使用 NTP 或另一個時鐘同步化機制來同步化主 KDC 時鐘。

    雖然沒有必要安裝與使用 NTP,但每個時鐘必須在 krb5.conf 檔案的 libdefaults 一節中所定義的預設時間之內,以確保辯證成功。請參見 "同步化 KDC 及 SEAM 客戶端之間的時鐘" 中有關 NTP 的資訊。

如何設置一個從屬 KDC

在此程序中設置了一個名為 kdc3 的新從屬 KDC。要提供 一個完成的範例,我們假設您在安裝軟體時並未使用事先設置程序,或者在執行事先設置程序時並位將 kdc3 定義為一個從屬。如果您使用程序並且辨識 kdc3 為一個從屬,那麼此程序中所包括的許多檔案都不需要編輯,但您應該審閱檔案的內容。

此程序使用下列設置參數﹕

  1. 設置一個從屬 KDC 的先決條件。

    此程序需要先已設置主 KDC,而且 SEAM 從屬 KDC 軟體也已安裝在 kdc3 之上。如果此從屬要是可調換的話,請參見 "調換主與從屬 KDC" 中的特定指示。

  2. 成為主 KDC 之上的超級使用者。

  3. 在主 KDC 之上﹕開始 kadmin

    您必須以其中一個您在設置主 KDC 時所建立的管理主管名稱來登入。


    kdc1 # /usr/krb5/sbin/kadmin -p kws/admin
    Enter password: 
    <輸入 kws/admin 密碼>
    kadmin: 
    
    1. 在主 KDC 之上﹕如果尚未將從屬主機主管新增至資料庫中的話,請使用 kadmin 來新增。

      為了讓從屬能夠正常運作,它必須有一個主機主管。


      kadmin: addprinc -randkey host/kdc3.acme.com
      Principal "host/kdc3@ACME.COM" created.
      kadmin: 
    2. 可任選﹕在主 KDC 之上,使用 kadmin 來建立從屬 KDC root 主管。

      如果從屬將要 NFS 裝載一個辯證的檔案系統的話,才需要此主管。


      kadmin: addprinc root/kdc3.acme.com 
      Enter password for principal root/kdc3.acme.com@ACME.COM:< 鍵入密碼>
      Re-enter password for principal root/kdc3.acme.com@ACME.COM: < 再一次鍵入> 
      Principal "root/kdc3.acme.com@ACME.COM" created. kadmin:
    3. 退出 kadmin


      kadmin: quit
      
  4. 在主 KDC 之上﹕編輯 Kerberos 設置檔案 (krb5.conf)。

    您必須為每個從屬新增一個項目。請參見 krb5.conf(4) 線上援助頁中有關此檔案的詳細說明。如果您在執行事先設置的程序時,將 kdc3 定義為一個從屬伺服器,請確認檔案的內容而不要編輯它。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = ACME.COM
    
    [realms]
                    ACME.COM = {
                    kdc = kdc1.acme.com
                    kdc = kdc2.acme.com
                    kdc = kdc3.acme.com
                    admin_server = kdc1.acme.com
            }
    
    [domain_realm]
            .acme.com = ACME.COM
    #
    # if the domain name and realm name are equivalent, 
    # this entry is not needed
    #        
    [logging]
            default = FILE:/var/krb5/kdc.log
            kdc = FILE:/var/krb5/kdc.log
    
    [appdefaults]
        gkadmin = {
            help_url = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
    
  5. 在主 KDC 之上﹕為每個從屬 KDC 新增一個項目至資料庫傳播設置檔案中 (kpropd.acl)。

    請參見 kprop(1M) 線上援助頁中有關此檔案的詳細說明。如果您在執行事先設置的程序時,將 kdc3 定義為一個從屬伺服器,請確認檔案的內容而不要編輯它。


    kdc1 # cat /etc/krb5/kpropd.acl
    host/kdc1.acme.com@ACME.COM
    host/kdc2.acme.com@ACME.COM
    host/kdc3.acme.com@ACME.COM
    
  6. 在所有從屬 KDC 之上﹕從主 KDC 伺服器中複製 KDC 管理檔案。

    所有的從屬 KDC 之上都必須依照此步驟,因為主 KDC 伺服器有每個 KDC 伺服器所需的已更新資訊。如果您在執行事先設置的程序時,將 kdc3 定義為一個從屬伺服器,請確認檔案的內容而不要編輯它。 您可以使用 ftp 或是一個較簡單的傳輸機制,從主 KDC 中抓取下列檔案的副本﹕

    • /etc/krb5/krb5.conf

    • /etc/krb5/kdc.conf

    • /etc/krb5/kpropd.acl

  7. 在新的從屬之上﹕使用 kadmin 來將從屬的主機主管新增至從屬的密鑰表檔案。

    您必須以您在設置主 KDC 時所建立的其中一個管理主管名稱來登入。此項目可以讓 kprop 及其他 Kerberos 化的應用程式正常運作。


    kdc3 # /usr/krb5/sbin/kadmin -p kws/admin 
    Enter password:<輸入 kws/admin 密碼> 
    kadmin:ktadd host/kdc3.acme.com
    kadmin: Entry for principal host/kdc3.acme.com with   
    kvno 3, encryption type DES-CBC-CRC added to keytab   
    WRFILE:/etc/krb5/krb5.keytab
     kadmin: quit
    
  8. 在主 KDC 之上﹕將從屬 KDC 名稱新增至 cron 工作,它會執行 crontab -e 以自動執行備份。

    將每個從屬 KDC 伺服器的名稱新增在 kprop_script 行的結尾。如果您在執行事先設置的程序時,將 kdc3 定義為一個從屬伺服器,請確認檔案的內容而不要編輯它。


    10 3 * * * /usr/krb5/lib/kprop_script kdc2.acme.com kdc3.acme.com
    

    您可能也要變更備份的時間。此項設置會在每天的上午 3:10 開始備份過程。

  9. 在主 KDC 之上﹕使用 kprop_script 來備份與傳播資料庫。

    如果已經有一個資料庫的備份副本,就不需要完成另一個備份。請參見 "如何以手動方式將 Kerberos 資料庫傳播至從屬 KDC" 中進一步的指示。


    kdc1 # /usr/krb5/lib/kprop_script kdc3.acme.com
    Database propagation to kdc3.acme.com: SUCCEEDED
  10. 在新的從屬之上﹕使用kdb5_util 來建立一個存放檔案。


    kdc3 # /usr/krb5/sbin/kdb5_util stash
    kdb5_util: Cannot find/read stored master key while reading master key 
    kdb5_util: Warning: proceeding without master key 
    
    Enter KDC database master key:  < 鍵入密鑰>
    
  11. 在新的從屬之上﹕開始 KDC 常駐程式 (krb5kdc)。


    kdc3 # /etc/init.d/kdc start
    
  12. 可任選﹕在新的從屬之上,使用 NTP 或另一個時鐘同步化機制來同步化主 KDC 時鐘。

    您並不一定要安裝與使用 NTP,但是每一個時鐘都必須在 krb5.conf 檔案的 libdefaults 一節中所定義的預設時間之內,才能讓辯證成功。請參見 "同步化 KDC 及 SEAM 客戶端之間的時鐘" 中有關 NTP 的資訊。

設置跨範疇辯證

有數種將範疇鏈結在一起的方法,好讓一個範疇的使用者在另一個範疇中辯證。通常您可以建立一個由兩個範疇共享的密鑰來達到此目的。範疇之間的關係可以是階層式或是定向的(請參見 "範疇階層")。

如何建立階層式的跨範疇辯證

在此範例中,我們將要使用 ENG.EAST.ACME.COMEAST.ACME.COM 這兩個範疇。跨範疇辯證會向兩個方向同時建立,此程序必須在兩個範疇中的主 KDC 之上完成。

  1. 建立階層式跨範疇辯證的先決條件。

    此程序需要先已設置每個範疇的主 KDC。要完全測試整個過程,您必須安裝數個客戶端或從屬 KDC。

  2. 成為第一個主 KDC 之上的 root

  3. 使用 kadmin 來為兩個範疇建立能賦予許可證的許可證服務主管。

    您必須以在設置主 KDC 時所建立的其中一個管理主管名稱來登入。


    # /usr/krb5/sbin/kadmin -p kws/admin
    Enter password: <輸入 kws/admin 密碼>kadmin: 
    addprinc krbtgt/ENG.EAST.ACME.COM@EAST.ACME.COM
    Enter password for principal krgtgt/ENG.EAST.ACME.COM@EAST.ACME.COM: <鍵入密碼> 
    kadmin:addprinc krbtgt/EAST.ACME.COM@ENG.EAST.ACME.COM 
    Enter password for principal krgtgt/EAST.ACME.COM@ENG.EAST.ACME.COM:<鍵入密碼>
    kadmin: quit
    

    註解 -

    為每個服務主管所輸入的密碼必須與兩個 KDC 中的一致;亦即兩個範疇中的 krbtgt/ENG.EAST.ACME.COM@EAST.ACME.COM 密碼必須一模一樣。


  4. 將項目新增至 Kerberos 設置檔案中以定義每個範疇 (krb5.conf) 的領域名稱。


    # cat /etc/krb5/krb5.conf
    [libdefaults]
     .
     .
    [domain_realm]
            .eng.east.acme.com = ENG.EAST.ACME.COM
            .east.acme.com = EAST.ACME.COM
    

    在此範例中,ENG.EAST.ACME.COMEAST.ACME.COM 範疇的領域名稱被經過定義。您必須先包括子領域,因為檔案是由上向下搜尋的。

  5. 將 Kerberos 設置檔案複製至此範疇中的所有客戶端。

    為了讓跨範疇辯證能夠正常運作,所有的系統(包括從屬 KDC 及其他伺服器)必須有所安裝的新版 Kerberos 設置檔案 (/etc/krb5/krb5.conf)。

  6. 在第二個範疇中重覆這些步驟。

如何建立直接的跨範疇辯證

此範例使用兩個範疇﹕ENG.EAST.ACME.COMSALES.WEST.ACME.COM。跨範疇辯證會向兩個方向同時建立,此程序必須在兩個範疇中的主 KDC 之上完成。

  1. 建立直接跨範疇辯證的先決條件。

    此程序需要先已設置每個範疇的主 KDC。要完全測試整個過程,您必須安裝數個客戶端或從屬 KDC。

  2. 成為其中一個主 KDC 伺服器之上的超級使用者。

  3. 使用 kadmin 來為兩個範疇建立能賦予許可證的許可證服務主管。

    您必須以在設置主 KDC 時所建立的其中一個管理主管名稱來登入。


    # /usr/krb5/sbin/kadmin -p kws/admin
    Enter password: <輸入 kws/admin 密碼> 
    kadmin:addprinc krbtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM 
    Enter password for principal
    krgtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM:< 鍵入密碼> 
    kadmin:addprinc krbtgt/SALES.WEST.ACME.COM@ENG.EAST.ACME.COM 
    Enter password for principal 
    krgtgt/SALES.WEST.ACME.COM@ENG.EAST.ACME.COM:< 鍵入密碼> 
    kadmin:quit
    

    註解 -

    為每個服務主管所輸入的密碼必須與兩個 KDC 中的一致;亦即 krbtgt/ENG.EAST.ACME.COM@SALES.WEST.ACME.COM 的密碼必須和兩個範疇中的一模一樣。


  4. 在 Kerberos 設置檔案中新增項目以定義的遠端範疇的直接路徑 (kdc.conf)。

    此範例是供 ENG.EAST.ACME.COM 範疇中的客戶端參考。您必須調換範疇名稱以取得 SALES.WEST.ACME.COM 範疇中的正確定義。


    # cat /etc/krb5/krb5.conf
    [libdefaults]
     .
     .
    [capaths]
        ENG.EAST.ACME.COM = {
            SALES.WEST.ACME.COM = .
        }
    
        SALES.WEST.ACME.COM = {
             ENG.EAST.ACME.COM = .
        }
    
  5. 將 Kerberos 設置檔案複製至目前範疇中的所有客戶端。

    為了讓跨範疇辯證能夠正常運作,所有系統(包括從屬 KDC 及其他伺服器)都必須安裝新版的 Kerberos 設置檔案 (krb5.conf)。

  6. 為第二個範疇重覆這些步驟。

設置 SEAM 網路應用程式伺服器

網路應用程式伺服器是使用下列其中一個網路應用程式來提供存取權限的主機﹕ftprcprloginrsh、及 telnet。只需要幾個步驟來在一個伺服器之上啟用這些指令的 SEAM 版本。

如何設置一個 SEAM 網路應用程式伺服器

此程序使用下列設置參數﹕

  1. 設置一個應用程式伺服器的先決條件。

    此程序需要先已設置主 KDC。要完全測試整個過程,您必須安裝數個客戶端。

  2. 安裝 SEAM 客戶端軟體.

    必須安裝 SEAM 客戶端軟體。

  3. 可任選﹕安裝 NTP 客戶端或其他時鐘同步化機制。

    請參見 "同步化 KDC 及 SEAM 客戶端之間的時鐘" 中有關 NTP 的資訊。

  4. 開始 kadmin

    "如何建立一位新主管" 中將說明如何使用 SEAM 管理工具來新增一位主管。下面的範例顯示應如何使用指令行來新增必要的主管。您必須以您在設置主 KDC 時所建立的其中一個管理主管名稱來登入。


    kdc1 # /usr/krb5/sbin/kadmin -p kws/admin
    Enter password: <輸入 kws/admin 密碼>kadmin: 
    
    1. 建立伺服器的主機主管。


      kadmin: addprinc -randkey host/boston.acme.com
      Principal "host/boston.acme.com" created.
       kadmin: 
    2. 可任選﹕建立一個主機主管的 root 主管。


      kadmin: addprinc root/boston.acme.com 
      Enter password for principal root/boston.acme.com@ACME.COM:< 鍵入密碼>
      Re-enter password for principal root/boston.acme.com@ACME.COM: < 再一次鍵入> 
      Principal "root/boston.acme.com@ACME.COM" created.kadmin:
    3. 將伺服器的主機主管新增至伺服器的密鑰表中。

      如果並未執行 kadmin 指令,請以類似下列的指令來將它重新啟動﹕/usr/krb5/bin/kadmin -p kws/admin


      kadmin: ktadd host/boston.acme.com
      kadmin: Entry for principal host/boston.acme.com with
        kvno 3, encryption type DES-CBC-CRC added to keytab
        WRFILE:/etc/krb5/krb5.keytab
      kadmin: quit
      
    4. 退出 kadmin


      kadmin: quit
      

設置 SEAM NFS 伺服器

NFS 服務會使用 UNIX UID 而無法直接使用主管來辨識一位使用者。要將主管轉譯為一個 UID,必須建立一個將使用者主管對映為 UNIX UID 的證書表。下列程序著重於設置一個 SEAM NFS 伺服器、管理證書表、以及為 NFS 裝載的檔案系統初始化 Kerberos 安全模式等所需的工作。下表將說明本節所涵蓋的所有工作。

表 3-3 設置 SEAM NFS 伺服器工作對映

工作 

說明 

如需有關說明,請到 ... 

設置一個 SEAM NFS 伺服器 

 讓伺服器共享一個需要 Kerberos 辯證的檔案系統的步驟。"如何設置 SEAM NFS 伺服器"

變更證書表的後端機制 

定義gsscred 所用的後端機制的步驟。"如何變更 gsscred 表的後端機制"

建立一個證書表 

 生成一個證書表的步驟。"如何建立一個證書表"

如何變更將使用者主管對映至 UNIX UID 的證書表。 

 在證書表中更新資訊的步驟。"如何將單一項目新增至證書表中"

利用 Kerberos 辯證來共享一個檔案系統 

 以安全模式來共享一個檔案系統的步驟,因此 Kerberos 辯證是必要的。"如何設定一個有多個 Kerberos 安全模式的安全 NFS 環境"

如何設置 SEAM NFS 伺服器

此程序需要先已設置主 KDC。要完全測試整個過程,您必須安裝數個客戶端。必須使用下列的設置參數﹕

  1. 設置一個 SEAM NFS 伺服器的先決條件。

    SEAM 客戶端軟體必須先已安裝。

  2. 可任選﹕安裝 NTP 客戶端或其他時鐘同步化機制。

    請參見 "同步化 KDC 及 SEAM 客戶端之間的時鐘" 中有關 NTP 的資訊。

  3. 開始 kadmin

    "如何建立一位新主管" 中說明如何使用 SEAM 管理工具來新增一位主管。下面的範例顯示應如何使用指令行來新增必要的主管。您必須以其中一個您在設置主 KDC 時所建立的管理主管名稱來登入。


    denver # /usr/krb5/sbin/kadmin -p kws/admin
    Enter password: 
    <輸入 kws/admin 密碼> 
    kadmin:
    1. 建立伺服器的 NFS 服務主管。


      kadmin: addprinc -randkey nfs/denver.acme.com
      Principal "nfs/denver.acme.com" created.
      kadmin:
    2. 可任選﹕為 NFS 伺服器建立一位 root 主管。


      kadmin: addprinc root/denver.acme.com 
      Enter password for principal root/denver.acme.com@ACME.COM:<鍵入密碼>
      Re-enter password for principal root/denver.acme.com@ACME.COM: < 再一次鍵入> 
      Principal "root/denver.acme.com@ACME.COM" created.
      kadmin:
    3. 將伺服器的 NFS 服務主管新增至伺服器的密鑰表中。


      kadmin: ktadd nfs/denver.acme.com
      kadmin: Entry for principal nfs/denver.acme.com with
        kvno 3, encryption type DES-CBC-CRC added to keytab
        WRFILE:/etc/krb5/krb5.keytab
      kadmin: quit
      
    4. 退出 kadmin


      kadmin: quit
      
  4. 建立 gsscred 表。

    請參見 "如何建立一個證書表" 中的詳細資訊。

  5. 使用 Kerberos 安全模式來共享 NFS 檔案系統。

    請參見 "如何設定一個有多個 Kerberos 安全模式的安全 NFS 環境" 中的詳細資訊。

  6. 在每個客戶端之上﹕同時辯證使用者以及 root 主管。

    請參見 "設定 Root 辯證以裝載 NFS 檔案系統" 中的詳細資訊。

如何變更 gsscred 表的後端機制

  1. 成為 NFS 伺服器之上的超級使用者。

  2. 編輯 /etc/gss/gsscred.conf 與變更機制。

    請使用下列其中一種後端機制﹕filesxfn_filesxfn_nisxfn_nisplus、或 xfn"使用 gsscred 表" 中將說明這些機制中每一個的優點。

如何建立一個證書表

NFS 伺服器會使用 gsscred 證書表來將 SEAM 主管對映至一個 UID。為了讓 NFS 客戶端能夠使用 Kerberos 辯證從一個 NFS 伺服器來裝載檔案系統,此表就建立必須使它可用。

  1. 成為正確伺服器之上的超級使用者。

    您是從哪一個伺服器來執行此指令,以及您是以哪一個識別碼來執行指令,取決於被選定以支援 gsscred 表的後端機制。除了 xfn_nisplus 以外的所有機制,您必須成為 root 的身份。

    如果您的後端機制為 ... 

    那麼 ... 

    files

    在 NFS 伺服器之上執行 

    xfn

    根據預設的 xfn 檔案設定來選擇主機

    xfn_files

    在 NFS 伺服器之上執行 

    xfn_nis

    在 NIS 主之上執行 

    xfn_nisplus

    只要有變更 NIS+ 資料的權限便執行。 

  2. 可任選﹕如果 /var/fn 並不存在而您想要使用其中一個 xfn 選項的話,請建立一個初始化 XFN 資料庫。


    # fnselect files
    # 
    fncreate -t org -o org//
    
  3. 使用 gsscred 來建立證書表。

    指令會從所有 /etc/nsswitch.confpasswd 項目所列的來源中搜集資訊。如果您不希望證書表中包括本機的密碼項目,可能必須暫時移除 files 項目。請參見 gsscred(1M) 線上援助頁中的詳細資訊。


    # gsscred -m kerberos_v5 -a
    

如何將單一項目新增至證書表中

此程序需要先已將 gsscred 表安裝在 NFS 伺服器之上。

  1. 成為一個 NFS 伺服器之上的超級使用者。

  2. 使用 gsscred 來將一個項目新增至表中。


    # gsscred -m [mech] -n [name] -u [uid] -a
    

    mech

    要使用的安全機制。 

    name

    使用者的主管名稱,如 KDC 中所定義的。 

    uid

    使用者的 UID,如密碼資料庫中所定義的。 

    -a

    將 UID 新增至主管名稱對映。 

範例 - 變更證書表中的單一項目

下列範例會為名為 sandy 的使用者新增一個項目,對映至 UID 3736。如果指令行中沒有包括 UID 的話,它會被從密碼檔案中拉出。


# gsscred -m kerberos_v5 -n sandy -u 3736 -a

如何設定一個有多個 Kerberos 安全模式的安全 NFS 環境

  1. 成為 NFS 伺服器之上的超級使用者。

  2. 編輯 /etc/dfs/dfstab 檔案並且以必要的安全模式來將 sec= 選項新增至適當的項目中。


    #share -F nfs -o [mode] [filesystem]
    

    mode

    開始時要使用的安全模式。使用多個安全模式時,根據預設,autofs 會使用清單中的第一個模式。 

    filesystem

    值要被共享的檔案系統的路徑。 

    所有嘗試從指名的檔案系統中存取檔案的客戶端都需要 Kerberos 辯證。要完成檔案的存取,both 使用者主管及 NFS 客戶端之上的 root 主管都應該進行辯證。

  3. 檢查以確定 NFS 服務正在伺服器之上執行。

    如果這是您所初始化的第一個共享指令或共享指令集,很可能就沒有執行 NFS 常駐程式。下列指令集會殺掉常駐程式並且將它們重新啟動。


    # /etc/init.d/nfs.server stop
    # 
    /etc/init.d/nfs.server start
    
  4. 可任選﹕如果使用 autofs,請編輯 auto_master 資料以選擇預設值以外的一個安全模式。

    如果您不使用 autofs 來存取檔案系統,或者如果預設的安全模式選取可行的話,就不需要依照此程序進行。


    /home	  auto_home  -nosuid,sec=krbi
  5. 可任選﹕以手動的方式核發 裝載 指令以存取使用一個非預設模式的檔案系統。

    或者您也可以使用 mount 指令來指定安全模式,但這就不會利用到自動裝載器﹕


    # mount -F nfs -o sec=krb5p /export/home
    

範例 - 與一個 Kerberos 安全模式共享一個檔案系統

此範例會在存取檔案之前要求 Kerberos 辯證。


# share -F nfs -o sec=krb5 /export/home

範例 - 與多個 Kerberos 安全模式共享一個檔案系統

在此範例中,已經選定了所有的三種 Kerberos 安全模式。如果在要求裝載時沒有指定任何安全模式,那麼列出的第一個模式就會被用於所有的 NFS V3 客戶端之上(在此例中為 krb5)。"share 指令的變更" 附有額外的資訊。


# share -F nfs -o sec=krb5:krb5i:krb5p /export/home

設置 SEAM 客戶端

SEAM 客戶端包括網路上需要使用 SEAM 服務的任何主機,而非一個 KDC 伺服器。本節將提供您安裝 SEAM 客戶端的程序,以及有關使用 root 辯證來裝載 NFS 檔案系統的特定資訊。

如何設置一個 SEAM 客戶端

必須使用下列的設置參數﹕

  1. 設置一個 SEAM 客戶端的先決條件。

    必須安裝 SEAM 客戶端軟體。

  2. 編輯 Kerberos 設置檔案 (krb5.conf)。

    如果您使用事先設置的程序,就不需要編輯此檔案,但您應該審閱其內容。 要從 SEAM 的預設版本來變更檔案,您必須變更範疇名稱及伺服器名稱,並且識別 gkadmin 說明檔案的路徑。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = ACME.COM
    
    [realms]
                    ACME.COM = {
                    kdc = kdc1.acme.com
                    kdc = kdc2.acme.com
                    admin_server = kdc1.acme.com
            }
    
    [domain_realm]
            .acme.com = ACME.COM
    #
    # if the domain name and realm name are equivalent, 
    # this entry is not needed
    #
    [logging]
            default = FILE:/var/krb5/kdc.log
            kdc = FILE:/var/krb5/kdc.log
    
    [appdefaults]
        gkadmin = {
            help_url = http://denver:8888/ab2/coll.384.1/SEAM/@AB2PageView/6956
    
  3. 可任選﹕使用 NTP 或另一個時鐘同步化機制來與主 KDC 的時鐘同步化。

    請參見 "同步化 KDC 及 SEAM 客戶端之間的時鐘" 中有關 NTP 的詳細資訊。

  4. 可任選﹕如果沒有任何使用者主管的話便建立一位。

    與此主機有關的使用者沒有一位相關的主管存在時,您才需要建立一位使用者主管。請參見 "如何建立一位新主管" 中有關使用 SEAM 管理工具的指示。指令行範例顯示如下﹕


    client1 # /usr/krb5/sbin/kadmin -p kws/admin 
    Enter password:<輸入 kws/admin 密碼> 
    kadmin:addprinc mre
    Enter password for principal mre@ACME.COM: < 鍵入密碼>
    Re-enter password for principal mre@ACME.COM: < 再一次鍵入> 
    kadmin:
  5. 建立一位 root 主管。


    kadmin: addprinc root/client1.acme.com 
    Enter password for principal root/client1.acme.com@ACME.COM:< 鍵入密碼>
    Re-enter password for principal root/client1.acme.com@ACME.COM: < 再一次鍵入>
    kadmin: quit
    
  6. (選擇性的) 如果您想要 SEAM 客戶端上的一位使用者自動使用 Kerberos 辯證來裝載 Kerberos 化的 NFS 檔案系統的話,就必須辯證 root 使用者。

    藉由 kinit 指令來安全地完成此過程;不過每一次使用者需要裝載一個由 Kerberos 所維護安全的檔案系統時,都必須使用 kinit 來作為 root。您也可以選擇要使用一個密鑰表檔案。請參見 "設定 Root 辯證以裝載 NFS 檔案系統" 中有關密鑰表要求條件的詳細資訊。


    client1 # /usr/krb5/bin/kinit root/client1.acme.com 
    Password for root/client1.acme.com@ACME.COM:<輸入密碼>
    

    要使用密鑰表檔案選項,請使用 kadmin 來將 root 主管新增至客戶端的密鑰表中﹕


    client1 # /usr/krb5/sbin/kadmin -p kws/admin 
    Enter password:<輸入 kws/admin 密碼>
    kadmin: ktadd root/client1.acme.com
    kadmin: Entry for principal root/client.acme.com with   
    kvno 3, encryption type DES-CBC-CRC added to keytab   
    WRFILE:/etc/krb5/krb5.keytab
     kadmin: quit
    
  7. 如果您想要客戶端警告使用者有關 Kerberos 許可證截止時間,請在 /etc/krb5/warn.conf 檔案中建立一個項目。

    請參見 warn.conf(4) 中的詳細資訊。

  8. 更新使用者的 shell 搜尋路徑來包括 SEAM 指令和線上援助頁的位置。

    如果您是使用設置檔案來安裝 SEAM 軟體,並且選擇要自動更新 PATH 定義,您只需要變更 MANPATH 變數即可。如果您是使用 C shell 的話,請鍵入﹕


    % set path=(/usr/krb5/bin $path)
    % set MANPATH=(/usr/krb5/man $MANPATH)
    

    要使您 shell 搜尋路徑的這些變更永久生效,請編輯您的 .cshrc.login 啟動檔案。

    如果您使用 Bourne 或 Korn shell,請鍵入﹕


    $ PATH=/usr/krb5/bin:$PATH$ 
    MANPATH=/usr/krb5/man:$MANPATH
    

    要使您 shell 搜尋路徑的這些變更永久生效,請編輯您的 .profile 啟動檔案。

設定 Root 辯證以裝載 NFS 檔案系統

如果使用者想要存取一個非 Kerberos 化的 NFS 檔案系統,不是將 NFS 檔案系統裝載為 root,就是在每次要存取時透過自動裝載器來自動存取檔案系統(不需要 root 權限)。

一個 Kerberos 化NFS 檔案系統的裝載沒有多大的差別,卻會產生一個額外的障礙。要裝載一個 Kerberos 化 NFS 檔案系統,使用者必須使用 kinit 指令來作為 root 的身份,以獲得客戶端 root 主管的證書,因為客戶端的 root 主管通常不在客戶端的密鑰表中。即使自動裝載器被設定也是如此。這不僅是額外的步驟,也迫使所有的使用者都知道其系統的 root 密碼及 root 主管的密碼。

要變通此種問題,您可以將一個客戶端的 root 主管新增至客戶端的密鑰表中,它會自動提供 root 的證書。雖然這會讓使用者在不執行 kinit 指令的情況下裝載 NFS 檔案系統,並且提高使用的容易度,卻也是一種安全上的顧慮。例如,若某人獲得 root 主管在其密鑰表中的一個系統存取權限,此人就有能力獲得 root 的證書。請確定您採取適當的安全措施。請參見 "管理密鑰表" 中的詳細資訊。

同步化 KDC 及 SEAM 客戶端之間的時鐘

參與 Kerberos 辯證系統的所有主機都必須將其內部時鐘與指定的最大時間量(亦稱為時鐘偏差)之內同步化,以提供另一層 Kerberos 安全檢查。如果時鐘偏差超出任何參與的主機之間,那麼客戶端的要求就會被拒。

時鐘偏差也會決定應用程式伺服器必須記錄所有 Kerberos 協定訊息的狀態多長的時間,以同意或是拒絕重播的要求。因此時鐘偏差值越長,應用程式伺服器必須搜集的資訊就越多。

預設的最大時鐘偏差值為 300 秒鐘(五分鐘),您可以在 krb5.conf 檔案的 libdefaults 一節加以變更。


註解 -

為了安全起見,請勿將時鐘偏差增出 300 秒鐘以上。


既然要在 KDC 與 SEAM 客戶端之間維護同步化的時鐘是如此的重要,我們建議您使用網路時間協定 (NTP) 軟體來達到這個目的。從 Solaris 2.6 發行版開始,所有 Solaris 的軟體中都包括這個由達拉維爾大學所開發的網路時間協定 (NTP) 公開領域軟體。


註解 -

另一種同步化時鐘的方法是使用 rdate 指令及 cron 工作,此過程要比使用 NTP 所涉及的方面來得少。不過本節將繼續著重在使用 NTP 之上。如果您使用網路來同步化時鐘,時鐘同步化協定的本身也必須是安全的。


NTP 可讓您管理一個網路環境中的確切時間,及/或網路時鐘的同步化。NTP 基本上是一種伺服器/客戶端的實行。您先挑選一個作為主時鐘(NTP 伺服器)的系統,然後設定所有您的其他系統以將其時鐘與主時鐘(NTP 客戶端)同步化。上述的所有動作都是透過 xntpd 常駐程式完成的,它可以設定與維護一個 UNIX 系統的時間,讓它與網際網路標準時間伺服器一致。圖 3-1會顯示使用伺服器/客戶端 NTP 實行的一個範例。

圖 3-1 使用 NTP 來同步化時鐘

Graphic

要確保 KDC 及 SEAM 客戶端維護同步化的時鐘,請進行下列步驟﹕

  1. 在您的網路上設定一個 NTP 伺服器(可以是主 KDC 之外的任何系統)。請參見 "如何設定一個 NTP 伺服器"

  2. 當您在網路上設置 KDC 及 SEAM 客戶端時,請將它們設定為 NTP 伺服器的 NTP 客戶端。請參見 "如何設定一個 NTP 客戶端"

如何設定一個 NTP 伺服器

  1. 成為要作為 NTP 伺服器的系統之上的超級使用者。

  2. 變更至 /etc/inet 目錄。

  3. ntp.server 檔案複製到 ntp.conf 檔案中。


    # cp ntp.server ntp.conf
    
  4. 變更至 /etc/init.d 目錄。

  5. 開始 xntpd 常駐程式。


    # ./xntpd start
    

如何設定一個 NTP 客戶端

  1. 成為要作為 NTP 客戶端的系統之上的超級使用者。

  2. 變更至 /etc/inet 目錄。

  3. ntp.client 檔案複製到 ntp.conf 檔案中。


    # cp ntp.client ntp.conf
    
  4. 變更至 /etc/init.d 目錄。

  5. 開始 xntpd 常駐程式。


    # ./xntpd start
    

調換主與從屬 KDC

應該使用這些程序,好讓與一個從屬 KDC 調換主 KDC 的工作容易一點。在主 KDC 伺服器由於某種原因失敗,或是必須重新安裝主 KDC 時(例如有新的硬體),才需要這樣做。

如何設置一個可調換從屬 KDC

此程序應該在您想要讓它成為主 KDC 的從屬 KDC 伺服器之上完成。

  1. 在安裝過程中使用主及可調換從屬 KDC 伺服器的別名。

    在定義 KDC 的主機名稱時,確定每個系統都有一個別名包括在 DNS 中,並且在 /etc/krb5/krb5.conf 中定義主機時使用別名。

  2. 安裝主 KDC 軟體。

    安裝主 KDC 軟體提供二進位以及調換過程中所需的其他檔案,其中包括所有從屬 KDC 伺服器需要的檔案。當安裝完成之後請勿將系統重新開機。

  3. 請依照安裝一個從屬 KDC 的步驟進行。

    在任何調換之前,此伺服器應該就像範疇中任何其他從屬 KDC 一樣地運作。請參見 "如何設置一個從屬 KDC" 中的指示。請勿安裝從屬軟體。所有必要的檔案都必須在安裝主軟體時安裝。

  4. 移動主 KDC 指令。

    要防止主 KDC 指令被從此從屬中執行,請將 kpropkadmind、及 kadmin.local 移至一個保留的位置。


    kdc4 # mv /usr/krb5/lib/kprop /usr/krb5/lib/kprop.save
    kdc4 # mv /usr/krb5/lib/kadmind /usr/krb5/lib/kadmind.save
    kdc4 # mv /usr/krb5/sbin/kadmin.local /usr/krb5/sbin/kadmin.local.save
    
  5. 停用 /etc/init.d/kdc.master 中的 kadmind 啟動。

    要防止從屬處理變更 KDC 資料庫的要求,請加註刪掉指令集中開始 kadmind 的一行文字﹕


    kdc4 # cat /etc/init.d/kdc.master
    
     .
     .
    
    case "$1" in
    'start')
    
            if [ -f $KDC_CONF_DIR/kdc.conf ]
            then
    #                $BINDIR/kadmind 
            fi
            ;;
  6. 加註刪掉 root crontab 檔案中的 kprop 一行文字。

    此步驟會防止從屬將其 KDC 資料庫的副本傳播出去。


    kdc4 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # The root crontab should be used to perform accounting data collection.
    #
    # The rtc command is run to adjust the real time clock if and when
    # daylight savings time changes.
    #
    10 3 * * 0,4 /etc/cron.d/logchecker
    10 3 * * 0   /usr/lib/newsyslog
    15 3 * * 0 /usr/lib/fs/nfs/nfsfind
    1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
    30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
    #10 3 * * * /usr/krb5/lib/kprop_script kdc1.acme.sun.com #SUNWkr5ma
    

如何調換主與從屬 KDC

此程序需要先已將從屬 KDC 伺服器設定為一個可調換從屬(請參見 "如何設置一個可調換從屬 KDC")。在此程序中,要被調換的主伺服器稱為 kdc1,而將成為新的主伺服器的從屬則稱為 kdc4

  1. 在舊的主 KDC 之上﹕殺掉 kadmind 過程。

    殺掉 kadmind 的過程會防止對 KDC 資料庫進行任何變更。


    kdc1 # /etc/init.d/kdc.master stop
    
  2. 在舊的主 KDC 之上﹕加註刪掉 root crontab 檔案中的 kprop 一行文字。

    此步驟會防止舊的主 KDC 將其 KDC 資料庫的副本傳播出去。


    kdc1 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # The root crontab should be used to perform accounting data collection.
    #
    # The rtc command is run to adjust the real time clock if and when
    # daylight savings time changes.
    #
    10 3 * * 0,4 /etc/cron.d/logchecker
    10 3 * * 0   /usr/lib/newsyslog
    15 3 * * 0 /usr/lib/fs/nfs/nfsfind
    1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
    30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
    #10 3 * * * /usr/krb5/lib/kprop_script kdc2.acme.sun.com #SUNWkr5ma
    
  3. 在舊的主 KDC 之上﹕停用 /etc/init.d/kdc.master 中的 kadmind 啟動。

    如果要在重新開機伺服器時防止主 KDC 重新啟動 kadmind,請加註刪掉指令集中開始 kadmind 的一行文字﹕


    kdc1 # cat /etc/init.d/kdc.master
    
     .
     .
    
    case "$1" in
    'start')
    
            if [ -f $KDC_CONF_DIR/kdc.conf ]
            then
    #                $BINDIR/kadmind 
            fi
            ;;
  4. 在舊的主 KDC 之上﹕執行 kprop_script 以備份與傳播資料庫。


    kdc1 # /usr/krb5/lib/kprop_script kdc4.acme.com
    Database propagation to kdc4.acme.com: SUCCEEDED
  5. 在舊的主 KDC 之上﹕移動主 KDC 指令。

    要防止主 KDC 指令被執行,請將 kpropkadmind、及 kadmin.local 移到一個保留的位置之上。


    kdc4 # mv /usr/krb5/lib/kprop /usr/krb5/lib/kprop.save
    kdc4 # mv /usr/krb5/lib/kadmind /usr/krb5/lib/kadmind.save
    kdc4 # mv /usr/krb5/sbin/kadmin.local /usr/krb5/sbin/kadmin.local.save
    
  6. 在 DNS 伺服器之上﹕變更主 KDC 的別名。

    要變更伺服器,請編輯 acme.com 區域檔案並且變更 masterkdc 的項目。


    masterkdc IN CNAME kdc4
  7. 在 DNS 伺服器之上﹕重新啟動網際網路領域名稱伺服器。

    在兩個伺服器之上執行下列指令以取得新的別名資訊﹕


    # pkill -1 in.named
  8. 在新的主 KDC 之上﹕移動主 KDC 指令。


    kdc4 # mv /usr/krb5/lib/kprop.save /usr/krb5/lib/kprop
    kdc4 # mv /usr/krb5/lib/kadmind.save /usr/krb5/lib/kadmind
    kdc4 # mv /usr/krb5/sbin/kadmin.local.save /usr/krb5/sbin/kadmin.local
    
  9. 在新的主 KDC 之上﹕使用 kadmin.local 來為 kadmin 建立一個密鑰表檔案。

    此指令序列會以主管項目為 adminchangepw 建立特殊的密鑰表檔案。kadmind 服務需要這些主管。


    kdc4 # /usr/krb5/sbin/kadmin.local
    kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc4.acme.com
    Entry for principal kadmin/kdc4.acme.com with 
              kvno 3, encryption type DES-CBC-CRC
              added to keytab WRFILE:/etc/krb5/kadm5.keytab.
    kadmin.local: ktadd -k /etc/krb5/kadm5.keytab changepw/kdc4.acme.com
    Entry for principal changepw/kdc4.acme.com with kvno 3, encryption type DES-CBC-CRC 
              added to keytab WRFILE:/etc/krb5/kadm5.keytab.
    kadmin.local: quit
    
  10. 在新的主 KDC 之上﹕啟用 /etc/init.d/kdc.master 中的 kadmind 啟動。


    kdc4 # cat /etc/init.d/kdc.master
    
     .
     .
    
    case "$1" in
    'start')
    
            if [ -f $KDC_CONF_DIR/kdc.conf ]
            then
                    $BINDIR/kadmind 
            fi
            ;;
  11. 在新的主 KDC 之上﹕開始 kadmind


    kdc4 # /etc/init.d/kdc.master start
    
  12. 啟用 root crontab 檔案中的 kprop 一行文字。


    kdc4 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # The root crontab should be used to perform accounting data collection.
    #
    # The rtc command is run to adjust the real time clock if and when
    # daylight savings time changes.
    #
    10 3 * * 0,4 /etc/cron.d/logchecker
    10 3 * * 0   /usr/lib/newsyslog
    15 3 * * 0 /usr/lib/fs/nfs/nfsfind
    1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
    30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
    10 3 * * * /usr/krb5/lib/kprop_script kdc1.acme.sun.com #SUNWkr5ma
    

管理 Kerberos 資料庫

Kerberos 資料庫是 Kerberos 的主幹,必須適當地維護。本節提供您某些管理 Kerberos 資料庫,如備份與恢復資料庫、設定平行傳播、及管理存放檔案等的程序。"如何設置一個主 KDC" 中附有一開始設定資料庫的步驟。

備份與傳播 Kerberos 資料庫

從主 KDC 將 Kerberos 資料庫傳播至從屬 KDC 是最重要的設置工作之一。如果傳播的工作執行得不夠,主 KDC 及從屬 KDC 就彼此錯雜而無法同步,所以若主 KDC 當機的話,從屬 KDC 也沒有最近的資料庫資訊足以取代。同時,如果將一個從屬的 KDC 設置為主 KDC 以均衡載入量,使用該從屬來作為主 KDC 的客戶端便無法擁有最新的資訊。因此,您必須確定定期傳播,依照您多常變更 Kerberos 資料庫而定。

當您設置主 KDC 時,必須在一個 cron 工作中設定 kprop_script 以自動將 Kerberos 資料庫備份至 /var/krb5/slave_datatrans 傾印檔案中,並且將它傳播給從屬 KDC。但是就和任何檔案一樣,Kerberos 資料庫還是有損毀的可能。如果其中一個從屬 KDC 之上發生這種情況,您可能不會注意到,因為下一次資料庫的自動傳播會安裝一個全新的副本。不過如果這是發生在主 KDC 之上的話,損毀的資料庫就會在下一次傳播時被傳給所有的從屬。那麼損毀的備份就會覆寫主 KDC 之上先前未損毀的備份檔案。

因為這時沒有任何“安全”的備份副本,您也應該設定一個 cron 工作,定期將 slave_datatrans傾印檔案複製到另一個位置,或是使用 kdb5_util傾印 指令來建立另一個分開的備份副本。然後若您的資料庫被損毀,您便可以使用 kdb5_utilload 指令來恢復主 KDC 之上最近的備份。

要注意的另一點是,因為資料庫傾印檔案包含主管密鑰,您必須保護檔案不受未授權的使用者存取(根據預設,資料庫傾印檔案只允許 root 身份的讀/寫權限)。其中包括只使用 kprop 指令來傳播負責加密被傳輸資料的資料庫傾印檔案。同時,kprop 只將資料傳播至從屬 KDC,以將不慎把資料庫傾印傳送給未授權的主機的可能性減至最小。


小心 - 小心 -

如果 Kerberos 資料庫是在傳播之後更新而在下一次傳播之前資料庫不慎損毀的話,則從屬不會包含更新﹕更新會被遺失。因為這種狀況,如果您在定期的傳播之前將大量的更新新增至資料庫,應該以手動的方式傳播資料庫以避免資料遺失。


kpropd.acl 檔案

KDC 上的 kpropd.acl 檔案會提供一份主機主管名稱清單,每行一個,指定 KDC 可以透過傳播機制從其中收到一個更新資料庫的系統。如果主 KDC 被用來傳播所有的從屬 KDC,那麼每個從屬之上的 kpropd.acl 檔案便只能包含主 KDC 的主機主管名稱。

不過 SEAM 安裝及本指南後續的設置步驟會指示您把相同的 kpropd.acl 檔案新增至主及從屬 KDC。檔案包含所有的 KDC 主機主管名稱。在傳播 KDC 暫時變得無法使用時,此設置會允許您從任何 KDC 傳播。而且在所有的 KDC 上保留相同的副本也比較容易維護。

kprop_script 指令

kprop_script 指令會使用 kprop 指令來將 Kerberos 資料庫傳播給其他的 KDC。(如果在一個從屬 KDC 之上執行 kprop_script,它會將 Kerberos 資料庫的從屬副本傳播給其他的 KDC。)kprop_script 接受一份引數的主機名稱清單,以空格分開,以代表要傳播的 KDC。

執行 kprop_script 時,它會在 /var/krb5/slave_datatrans 檔案中建立 Kerberos 資料庫的一個備份,然後複製檔案至指定的 KDC。在傳播結束前,Kerberos 資料庫會保持鎖定的狀態。

如何備份 Kerberos 資料庫

  1. 成為主 KDC 之上的超級使用者。

  2. 使用 kdb5_util傾印 指令來備份 Kerberos 資料庫。


    # /usr/krb5/sbin/kdb5_util dump [verbose-] [-d dbname] [filename [principals...]]

    -verbose

    列印所備份的每位主管及每個政策的名稱。 

    dbname

    要備份的資料庫名稱。請注意 ".db" 是被附加在所指定的資料庫名稱之後,而且還可以指定一個檔案的絕對路徑。如果沒有指定 -d 選項,預設的資料庫名稱就是 /var/krb5/principal,實際上會成為 /var/krb5/principal.db

    filename

    要備份資料庫的檔案。可以指定一個檔案的絕對路徑。如果您沒有指定任何檔案,資料庫會被傾印至標準輸出。 

    principal

    要備份的一或多位主管的清單(以空格分開)。您必須使用完全合格的主管名稱。如果您並未指定主管,那麼整個資料庫都會被備份。 

範例 - 備份 Kerberos 資料庫

下列範例可以將 Kerberos 資料庫備份至一個稱為 dumpfile 的檔案中。因為指定了 -verbose 選項,每位主管會在備份時被列印出來。


# kbd5_util dump -verbose dumpfile 
kadmin/kdc1.eng.acme.com@ENG.ACME.COM 
krbtgt/eng.acme.com@ENG.ACME.COM 
kadmin/history@ENG.ACME.COM 
pak/admin@ENG.ACME.COM 
pak@ENG.ACME.COM
changepw/kdc1.eng.acme.com@ENG.ACME.COM
#

下列範例會從 Kerberos 資料庫中備份 pakpak/admin 主管。


# kdb5_util dump -verbose dumpfile pak/admin@ENG.ACME.COM pak@ENG.ACME.COM
pak/admin@ENG.ACME.COM
pak@ENG.ACME.COM
#

如何恢復 Kerberos 資料庫

  1. 成為主 KDC 之上的超級使用者。

  2. 使用 kdb_utilload 指令來恢復 Kerberos 資料庫。


    # /usr/krb5/sbin/kdb5_util load [-verbose] [-d dbname] [-update] [filename] 

    -verbose

    列印每個被恢復的主管及政策名稱。 

    dbname

    要恢復的資料庫名稱。請注意 ".db" 是被附加在所指定的資料庫名稱之後,而且還可以指定一個檔案的絕對路徑。如果沒有指定 -d 選項,預設的資料庫名稱就是 /var/krb5/principal,實際上會成為 /var/krb5/principal.db

    -update

    更新現存的資料庫;否則會建立一個新的資料庫,或是覆寫現存的資料庫。 

    filename

    要從其中恢復資料庫的檔案。可以指定檔案的一個絕對路徑。 

範例 - 恢復 Kerberos 資料庫

下列範例會從 dumpfile 檔案中將稱為 database1.db 的資料庫恢復為目前的目錄。因為 -update 選項並未指定,因此恢復會建立一個新的資料庫。


# kdb5_util load -d database1 dumpfile

如何以手動方式將 Kerberos 資料庫傳播至從屬 KDC

此程序會顯示應如何使用 kprop 指令來傳播 Kerberos 資料庫。如果您必須將一個從屬 KDC 與定期 cron 工作以外的主 KDC 同步化的話,就可以使用此指令。而且不像 kprop_script,您還可以使用 kprop 來傳播目前的資料庫備份,而不需要製作新的資料庫備份。

  1. 成為主 KDC 之上的超級使用者。

  2. (可任選)使用 kdb5_util 指令來備份資料庫。


    # /usr/krb5/sbin/kdb5_util dump /var/krb5/slave_datatrans
    
  3. 使用 kprop 指令來將資料庫傳播至一個從屬 KDC。


    # /usr/krb5/lib/kprop -f /var/krb5/slave_datatrans slave_KDC
    

如果您想要將資料庫備份並且傳播至一個定期 cron 工作以外的從屬 KDC,您也可以使用 kprop_script 指令如下所示來進行﹕


# /usr/krb5/lib/kprop_script slave_KDC

設定平行傳播

在大多數情況下,主 KDC 只是專門用來將其資料庫傳播給從屬 KDC 的。不過如果您的網站有很多的從屬 KDC,您就可以考慮載入分享的傳播過程,即所謂的平行傳播

平行傳播可以讓特定的從屬 KDC 與主 KDC 共享傳播任務。這樣一來傳播就可以更快完成,也可以減輕主 KDC 的負荷。

例如,若您的網站有一個主及六個從屬(如 圖 3-2 中所示),其中 slave-1slave-3 包括一個邏輯群組,而 slave-4slave-6 包括其他群組。要設定平行傳播,您讓主 KDC 將資料庫傳播至 slave-1slave-4,而其他從屬便可再行將資料庫傳播至其群組中的從屬。

圖 3-2 範例平行傳播設置

Graphic

如何設定平行傳播

這並不是一個詳細的逐步程序,只是高階的簡要設置步驟一覽表,用來確保平行傳播的執行。

  1. 在主 KDC 之上,變更其 cron 工作中的 kprop_script 項目,只包括要執行成功傳播的從屬之引數(傳播從屬)。

  2. 在每個傳播從屬之上,將一個 kprop_script 項目新增至其 cron 工作中,其中必須包括要傳播的從屬引數。要成功地平行傳播,cron 工作應該被設定在傳播從屬本身以新的資料庫傳播之後執行。


    註解 -

    決定傳播從屬時所需的時間長短,取決於如網路頻寬及資料庫大小等因素。


  3. 在每個從屬 KDC 之上,設定要傳播的正確權限。請將其傳播 KDC 主機的主管名稱新增至其 kpropd.acl 檔案中來達到此目的。

範例 - 設定平行傳播

使用 圖 3-2 中的範例,主 KDC 的 kprop_script 項目將如下所示﹕

10 3 * * * /usr/krb5/lib/kprop_script slave-1.acme.com slave-4.acme.com

slave-1kprop_script 項目將如下所示(請注意從屬上的傳播會在被主 KCD 傳播的一個小時之後開始)﹕

10 4 * * * /usr/krb5/lib/kprop_script slave-2.acme.com slave-3.acme.com

傳播從屬上的 kpropd.acl 檔案必須包含下列項目﹕

host/master.acme.com@ACME.COM

slave-1 所傳播的從屬上的 kpropd.acl 檔案將會包含下列項目﹕

host/slave-1.acme.com@ACME.COM

管理存放檔案

存放檔案包含 Kerberos 資料庫的主密鑰,在您建立一個 Kerberos 資料庫時會自動建立。如果存放檔案被損毀的話,您可以使用 kdb5_util(1M)stash 指令來取代損毀的檔案。唯一您必須移除一個存放檔案的時候就是以 kdb5_utildestroy 指令來將 Kerberos 資料庫移除之後。因為存放檔案不會自動與資料庫一起移除,您必須將它移除以完成清理的工作。

如何移除一個存放檔案

  1. 成為包含存放檔案的 KDC 之上的超級使用者。

  2. 移除存放檔案。


    # rm stash_file
    

    stash_file

    至存放檔案的路徑。根據預設,存放檔案位於 /var/krb5/.k5。範疇

如果您必須重新建立存放檔案的話,可以使用 kdb5_util 指令的 -f 選項。

增進安全

這些程序列出您可以用來在 SEAM 應用程式伺服器及 KDC 伺服器之上增進安全的步驟。

如何只啟用 Kerberos 化應用程式

此程序將使用 telnetftprcprsh、及 rlogin 的伺服器之網路存取權限限於僅有 Kerberos 辯證的交換。

  1. 編輯 /etc/inetd.conf 中的 telnet 項目。

    -a user選項新增至 telnet 項目,以將存取權限限制在那些可以提供有效辯證資訊的使用者。


    telnet stream  tcp     nowait  root    /usr/krb5/lib/telnetd  telnetd -a user
    
  2. 編輯 /etc/inetd.conf 中的 ftp 項目。

    -a 選項新增至 ftp 項目中,只許可由 Kerberos 辯證的連線。


    ftp stream  tcp     nowait  root    /usr/krb5/lib/ftpd    ftpd -a
    
  3. 停用 /etc/inetd.conf 中的其他服務之 Solaris 項目。

    shelllogin 的項目必須被加註刪掉或移除


    # shell   stream  tcp     nowait  root    /usr/sbin/in.rshd       in.rshd
    # login   stream  tcp     nowait  root    /usr/sbin/in.rlogind    in.rlogind

如何限制 KDC 伺服器的存取權限

主及從屬 KDC 伺服器都有本機貯存的 KDC 資料庫副本。限制這些伺服器的存取權限以保持資料庫的安全,對 SEAM 安裝的整體安全性而言非常重要。

  1. 停用 /etc/inetd.conf 中的遠端服務。

    要提供一個安全的 KDC 伺服器,就必須加註刪掉開始/etc/inetd.conf 中服務的項目,以停用所有不屬於關鍵性的網路服務。大部份的情況下,只有 timekrdb5_kprop 這兩個服務需要執行。此外,任何使用迴環 tli(ticltsticotsord、及 ticots)的服務都可以保留啟用狀態。在編輯之後,檔案應該如下所示(已將許多註解移除以縮短範例)﹕


    kdc1 # cat /etc/inetd.conf
    #
    #ident  "@(#)inetd.conf 1.33    98/06/02 SMI"   /* SVr4.0 1.5   */
      .
      .
    #name     dgram   udp     wait    root    /usr/sbin/in.tnamed     in.tnamed
    #
    #shell    stream  tcp     nowait  root    /usr/sbin/in.rshd       in.rshd
    #login    stream  tcp     nowait  root    /usr/sbin/in.rlogind    in.rlogind
    #exec     stream  tcp     nowait  root    /usr/sbin/in.rexecd     in.rexecd
    #comsat   dgram   udp     wait    root    /usr/sbin/in.comsat     in.comsat
    #talk     dgram   udp     wait    root    /usr/sbin/in.talkd      in.talkd
    #
    #uucp     stream  tcp     nowait  root    /usr/sbin/in.uucpd      in.uucpd
    #
    #finger   stream  tcp     nowait  nobody  /usr/sbin/in.fingerd    in.fingerd
    #
    # Time service is used for clock synchronization.
    #
    time      stream  tcp     nowait  root    internal
    time      dgram   udp     wait    root    internal
    # 
      .
      .
    #
    100234/1  tli rpc/ticotsord wait  root    /usr/lib/gss/gssd     gssd 
    #dtspc    stream  tcp     nowait  root    /usr/dt/bin/dtspcd      /usr/dt/bin/dtspcd
    #100068/2-5 dgram rpc/udp wait    root    /usr/dt/bin/rpc.cmsd    rpc.cmsd
    100134/1 tli rpc/ticotsord wait   root    /usr/krb5/lib/ktkt_warnd kwarnd
    #klogin   stream  tcp     nowait  root    /usr/krb5/lib/rlogind   rlogind -k
    #eklogin  stream  tcp     nowait  root    /usr/krb5/lib/rlogind   rlogind -k -e
    #telnet   stream  tcp     nowait  root    /usr/krb5/lib/telnetd   telnetd
    #ftp      stream  tcp     nowait  root    /usr/krb5/lib/ftpd      ftpd
    #kshell   stream  tcp     nowait  root    /usr/krb5/lib/rshd      rshd -k -c -A
    krb5_prop stream  tcp     nowait  root    /usr/krb5/lib/kpropd  kpropd

    在製作任何變更之後將伺服器重新開機。

  2. 限制支援 KDC 的硬體之存取權限。

    為了限制實際的存取,請確定伺服器及其顯示器都位於一個安全的設施。一般的使用者應該無法以任何方式來存取此伺服器。

  3. 在本機磁碟或從屬 KDC 之上貯存 KDC 資料庫備份。

    如果您可以妥善地貯存磁帶的話,才可以製作您 KDC 的磁帶備份。密鑰表檔案的副本也應如此處理。最好是將這些檔案貯存在其他系統無法分享的一個本機檔案系統之上。此貯存的檔案系統可以是一個主 KDC 伺服器或是任何的從屬 KDC。