Solaris のシステム管理 (セキュリティサービス)

第 9 章 SEAM の構成 (手順)

この章では、ネットワークアプリケーションサーバーの構成と手順およびインストール手順について説明します。

SEAM の構成 (作業マップ)

構成手順は、その個々の手順がほかの手順に依存するため、規定の順序で実行する必要があります。多くの場合、これらの手順に従うことにより、 SEAM に必要なサービスを設定できます。その他の手順は互いに依存しないため、任意のタイミングで実行できます。次の作業マップで、推奨する SEAM のインストール順序を示します。

表 9–1 第一段階: SEAM の構成順序

作業 

説明 

参照先 

1. SEAM インストールの計画 

ソフトウェア構成処理を開始する前に、構成についての問題を解決する。事前に計画することで、結果的に時間やその他のリソースを節約できる 

第 8 章「SEAM の計画」

2. (省略可能) NTP のインストール 

NTP ソフトウェアなどのクロック同期プロトコルを構成する。SEAM が正常に動作するには、レルムに含まれるすべてのシステムのクロックを同期化する必要がある 

KDC と SEAM クライアントのクロックの同期化

3. マスター KDC の構成 

レルムに対してマスター KDC とデータベースを構成および構築する 

マスター KDC を構成する方法

4. (省略可能) スレーブ KDC の構成 

レルムに対してスレーブ KDC を構成および構築する 

スレーブ KDC を構成する方法

5. (省略可能) KDC のセキュリティ強化 

KDC サーバーに対するセキュリティ違反を回避する 

KDC サーバーへのアクセスを制限する方法

6. (省略可能) スワップ可能な KDC の構成  

マスター KDC とスレーブ KDC を簡単にスワップできるようにする 

スワップ可能なスレーブ KDC を構成する方法

必要な手順が完了したあと、必要に応じて次の手順を行います。

表 9–2 次の段階: 追加の SEAM 作業

作業 

説明 

参照先 

レルム間認証の構成 

レルム間の通信を使用可能にする 

レルム間認証の構成

SEAM クライアントの構成 

クライアントが SEAM サービスを使用できるようにする 

SEAM クライアントの構成

SEAM NFS サーバーの構成 

Kerberos 認証を必要とするファイルシステムをサーバーが共有できるようにする 

SEAM NFS サーバーの構成

KDC サーバーの構成

SEAM ソフトウェアをインストールしたあと、KDC サーバーを構成する必要があります。資格を発行するには、1 つのマスター KDC と 1 つ以上のスレーブ KDC を構成する必要があります。KDC が発行する資格は、SEAM の基本要素であるため、KDC をインストールしないと、ほかの処理を行うことはできません。

マスター KDC とスレーブ KDC の最も大きな違いは、マスター KDC だけがデータベース管理要求を処理できることです。たとえば、パスワードの変更や新しい主体の追加は、マスター KDC で行います。これらの変更は、スレーブ KDC に伝播されます。資格の生成は、スレーブ KDC とマスター KDC が行います。この機能は、マスター KDC が応答できない場合に、冗長性を確保します。

マスター KDC を構成する方法

この手順では、次の構成パラメータを使用します。

  1. マスター KDC を構成するための前提条件を完了します。

    この手順では、DNS が動作している必要があります。マスター KDC をスワップ可能にする場合の命名手順については、マスター KDC とスレーブ KDC のスワップ を参照してください。

  2. マスター KDC 上でスーパーユーザーになります。

  3. Kerberos 構成ファイル (krb5.conf) を編集します。

    レルム名とサーバー名を変更する必要があります。Kerberos 構成ファイルの詳細は、krb5.conf(4) のマニュアルページを参照してください。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = EXAMPLE.COM
    
    [realms]
                    EXAMPLE.COM = {
                    kdc = kdc1.example.com
                    kdc = kdc2.example.com
                    admin_server = kdc1.example.com
            }
    
    [domain_realm]
            .example.com = EXAMPLE.COM
    #
    # ドメイン名とレルム名が同じ場合、 
    # このエントリは必要ない
    #
    [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
            }

    この例では、domain_realm kdcadmin_server、およびすべての domain_realm エントリの行を変更しました。また、help_url を定義する行を編集しました。

  4. KDC 構成ファイル (kdc.conf) を編集します。

    レルム名を変更する必要があります。KDC 構成ファイルの詳細は、kdc.conf(4) のマニュアルページを参照してください。


    kdc1 # cat /etc/krb5/kdc.conf
    [kdcdefaults]
            kdc_ports = 88,750
    
    [realms]
            EXAMPLE.COM= {
                    profile = /etc/krb5/krb5.conf
                    database_name = /var/krb5/principal
                    admin_keytab = /etc/krb5/kadm5.keytab
                    acl_file = /etc/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 の認証に使用される stash ファイルが作成されます。


    kdc1 # /usr/sbin/kdb5_util create -r EXAMPLE.COM -s
    Initializing database '/var/krb5/principal' for realm 'EXAMPLE.COM'
    master key name 'K/M@EXAMPLE.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 key to verify: <鍵を再度入力する>
    

    レルム名がサーバーの名前空間のドメイン名と同じ場合は、レルム名を指定する -r オプションは必要はありません。

  6. Kerberos アクセス制御リストファイル (kadm5.acl) を編集します。

    /etc/krb5/kadm5.acl ファイルには、KDC を管理できる主体名がすべて含まれている必要があります。最初のエントリは、次のようになります。


    kws/admin@EXAMPLE.COM   *

    このエントリにより、 EXAMPLE.COM レルム内の kws/admin 主体に対して、KDC 内の主体またはポリシーを変更する機能が提供されます。デフォルトでは、アスタリスク (*) が指定され、すべての admin 主体に変更権限が与えられます。このデフォルトの指定では、セキュリティが低下する可能性があります。そのため、admin 主体をすべてリストに含めると、セキュリティが向上します。詳細は、kadm5.acl(4) のマニュアルページを参照してください。

  7. kadmin.local コマンドを起動します。

    次の手順では、SEAM で使用される主体を作成します。


    kdc1 # /usr/sbin/kadmin.local
    kadmin.local: 
    1. データベースに管理主体を追加します。

      必要な数の admin 主体を追加できます。KDC 構成処理を完了するには、1 つ以上の admin 主体を追加する必要があります。この例では、kws/admin 主体を追加します。「kws」の代わりに、適切な主体名を置き換えてください。


      kadmin.local: addprinc kws/admin
      Enter password for principal kws/admin@EXAMPLE.COM: <パスワードを入力する>
      Re-enter password for principal kws/admin@EXAMPLE.COM: <パスワードを再度入力する>
      Principal "kws/admin@EXAMPLE.COM" created.
      kadmin.local: 
    2. kadmind サービスのキータブファイルを作成します。

      このコマンドシーケンスは、kadmin および changepw 主体のエントリを保持するキータブを作成します。これらの主体は、kadmind サービスに必要です。主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかにかかわらず、FQDN は小文字で入力する必要があります。


      kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc1.example.com
      Entry for principal kadmin/kdc1.example.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.example.com
      Entry for principal changepw/kdc1.example.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 start
    kdc1 # /etc/init.d/kdc.master start
    
  9. kadmin を起動します。

    この時点で、SEAM 管理ツールを使用して、主体を追加します。追加するには、上記の手順で作成した admin 主体名を使用してログインする必要があります。ただし、以下のコマンド行の例では、簡略化されています。


    kdc1 # /usr/sbin/kadmin -p kws/admin
    Enter password: <kws/admin パスワードを入力する>
    kadmin: 
    1. マスター KDC のホスト主体を作成します。

      ホスト主体は、klistkprop などの Kerberos アプリケーションで使用されます。主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかにかかわらず、FQDN は小文字で入力する必要があります。


      kadmin: addprinc -randkey host/kdc1.example.com
      Principal "host/kdc1.example.com@EXAMPLE.COM" created.
      kadmin: 
    2. (省略可能) マスター KDC の root 主体を作成します。

      この主体は、認証済みの NFS マウントで使用されます。そのため、この主体は、マスター KDC 上にある必要はありません。主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかにかかわらず、FQDN は小文字で入力する必要があります。


      kadmin: addprinc root/kdc1.example.com
      Enter password for principal root/kdc1.example.com@EXAMPLE.COM: <パスワードを入力する>
      Re-enter password for principal root/kdc1.example.com@EXAMPLE.COM: <パスワードを再度入力する>
      Principal "root/kdc1.example.com@EXAMPLE.COM" created.
      kadmin: 
    3. マスター KDC のキータブファイルにマスター KDC のホスト主体を追加します。

      キータブファイルに追加したホスト主体が、自動的に使用されます。


      kadmin: ktadd host/kdc1.example.com
      kadmin: Entry for principal host/kdc1.example.com with
        kvno 3, encryption type DES-CBC-CRC added to keytab
        WRFILE:/etc/krb5/krb5.keytab
      kadmin: 
    4. kadmin を終了します。


      kadmin: quit
      
  10. 各 KDC のエントリを伝播構成ファイル (kpropd.acl) に追加します。

    このファイルの詳細は、kprop(1M) のマニュアルページを参照してください。


    kdc1 # cat /etc/krb5/kpropd.acl
    host/kdc1.example.com@EXAMPLE.COM
    host/kdc2.example.com@EXAMPLE.COM
  11. (省略可能) NTP などのクロック同期メカニズムを使用して、マスター KDC のクロックを同期化します。

    NTP のインストールと使用は、必須ではありません。ただし、認証が正常終了するには、krb5.conf ファイルの libdefaults セクションに定義されているデフォルト時間内に、すべてのクロックを調整する必要があります。NTP については、KDC と SEAM クライアントのクロックの同期化を参照してください。

スレーブ KDC を構成する方法

この手順では、kdc3 という名前のスレーブ KDC を構成します。次の構成パラメータを使用します。

  1. スレーブ KDC を構成するための前提条件を完了します。

    マスター KDC が構成済みである必要があります。スレーブ KDC をスワップ可能にする場合の手順については、マスター KDC とスレーブ KDC のスワップ を参照してください。

  2. マスター KDC 上でスーパーユーザーになります。

  3. マスター KDC 上で kadmin を起動します。

    マスター KDC を構成するときに作成した admin 主体名を使用して、ログインする必要があります。


    kdc1 # /usr/sbin/kadmin -p kws/admin
    Enter password: <kws/admin パスワードを入力する>
    kadmin: 
    1. マスター KDC のデータベースにスレーブホスト主体が存在しない場合は、追加します。

      スレーブが機能するには、ホスト主体が必要です。主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかにかかわらず、FQDN は小文字で入力する必要があります。


      kadmin: addprinc -randkey host/kdc3.example.com
      Principal "host/kdc3@EXAMPLE.COM" created.
      kadmin: 
    2. (省略可能) マスター KDC 上で、スレーブ KDC の root 主体を作成します。

      この主体が必要なのは、認証済みのファイルシステムをスレーブが NFS マウントする場合だけです。主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかに関係なく、FQDN は小文字で入力する必要があります。


      kadmin: addprinc root/kdc3.example.com
      Enter password for principal root/kdc3.example.com@EXAMPLE.COM: <パスワードを入力する>
      Re-enter password for principal root/kdc3.example.com@EXAMPLE.COM: <パスワードを再度入力する>
      Principal "root/kdc3.example.com@EXAMPLE.COM" created.
      kadmin: 
    3. kadmin を終了します。


      kadmin: quit
      
  4. マスター KDC 上で、Kerberos 構成ファイル (krb5.conf) を編集します。

    各スレーブのエントリを追加する必要があります。Kerberos 構成ファイルの詳細は、krb5.conf(4) のマニュアルページを参照してください。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = EXAMPLE.COM
    
    [realms]
                    EXAMPLE.COM = {
                    kdc = kdc1.example.com
                    kdc = kdc2.example.com
                    kdc = kdc3.example.com
                    admin_server = kdc1.example.com
            }
    
    [domain_realm]
            .example.com = EXAMPLE.COM
    #
    #ドメイン名とレルム名が同じ場合 
    # このエントリは不要
    #        
    [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) のマニュアルページを参照してください。


    kdc1 # cat /etc/krb5/kpropd.acl
    host/kdc1.example.com@EXAMPLE.COM
    host/kdc2.example.com@EXAMPLE.COM
    host/kdc3.example.com@EXAMPLE.COM
    
  6. すべてのスレーブ KDC 上で、マスター KDC サーバーから KDC 管理ファイルをコピーします。

    この手順は、マスター KDC サーバーが、各 KDC サーバーに必要な情報を更新したため、すべてのスレーブ KDC 上で実行する必要があります。ftp などの転送メカニズムを使用して、マスター KDC から次のファイルのコピーを取得できます。

    • /etc/krb5/krb5.conf

    • /etc/krb5/kdc.conf

    • /etc/krb5/kpropd.acl

  7. 新しいスレーブ上で kadmin を使用して、スレーブのホスト主体をスレーブのキータブファイルに追加します。

    マスター KDC を構成するときに作成したadmin 主体名を使用してログインする必要があります。ログインすると、kprop などの Kerberos アプリケーションが機能します。主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかにかかわらず、FQDN は小文字で入力する必要があります。


    kdc3 # /usr/sbin/kadmin -p kws/admin
    Enter password: <kws/admin パスワードを入力する>
    kadmin: ktadd host/kdc3.example.com
    kadmin: Entry for principal host/kdc3.example.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 を実行して、自動的にバックアップを実行します。

    kprop_script 行の末尾に、各スレーブ KDC のサーバー名を追加します。


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

    バックアップの時刻を変更することもできます。この構成では、バックアップ処理を毎日午前 3 時 10 分に開始します。

  9. マスター KDC 上のデータベースを、 kprop_script を使用してバックアップし、伝播します。

    データベースのバックアップコピーがすでに作成されている場合は、ここでバックアップを作成する必要はありません。詳細は、Kerberos データベースをスレーブ KDC に手動で伝播する方法 を参照してください。


    kdc1 # /usr/lib/krb5/kprop_script kdc3.example.com
    Database propagation to kdc3.example.com: SUCCEEDED
  10. 新しいスレーブ上で、kdb5_util を使用して stash ファイルを作成します。


    kdc3 # /usr/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 上で、NTP などのクロック同期メカニズムを使用して、マスター KDC のクロックと同期化します。

    NTP のインストールと使用は、必須ではありません。ただし、認証を正常終了させるには、krb5.conf ファイルの libdefaults セクションに定義されているデフォルト時間内に、すべてのクロックを調整する必要があります。NTP については、KDC と SEAM クライアントのクロックの同期化を参照してください。

  12. 新しいスレーブ上で、KDC デーモン (krb5kdc) を起動します。


    kdc3 # /etc/init.d/kdc start
    

レルム間認証の構成

複数のレルムを接続して、レルム間でユーザーを認証することができます。いくつかの方法がありますが、通常は、秘密鍵を作成し、2 つのレルム間で共有します。レルム間の関係には、階層関係または直接接続があります (レルムの階層 を参照)。

階層関係のレルム間認証を設定する方法

この手順の例では、 ENG.EAST.EXAMPLE.COM レルムと EAST.EXAMPLE.COM レルムを使用します。レルム間認証は、双方向に確立されます。この手順は、2 つのレルムのマスター KDC 上で完了する必要があります。

  1. 階層関係のレルム間認証の前提条件を完了します。

    マスター KDC の各レルムが構成済みである必要があります。認証処理を十分にテストするには、複数のクライアントまたはスレーブ KDCをインストールしている必要があります。

  2. 最初のマスター KDC 上でスーパーユーザーになります。

  3. 2 つのレルムに対して、TGT のサービス主体を作成します。

    マスター KDC を構成したときに作成した admin 主体名を使用して、ログインする必要があります。


    # /usr/sbin/kadmin -p kws/admin
    Enter password: <kws/admin パスワードを入力する>
    kadmin: addprinc krbtgt/ENG.EAST.EXAMPLE.COM@EAST.EXAMPLE.COM
    Enter password for principal krgtgt/ENG.EAST.EXAMPLE.COM@EAST.EXAMPLE.COM: <パスワードを入力する>
    kadmin: addprinc krbtgt/EAST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM
    Enter password for principal krgtgt/EAST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM: <パスワードを入力する>
    kadmin: quit
    

    注 –

    各サービス主体のパスワードは、2 つの KDC で同一である必要があります。そのため、サービス主体 krbtgt/ENG.EAST.EXAMPLE.COM@EAST.EXAMPLE.COM のパスワードは、2 つのレルムで同じである必要があります。


  4. Kerberos 構成ファイル (krb5.conf) にエントリを追加して、すべてのレルムのドメイン名を定義します。


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

    この例では、ENG.EAST.EXAMPLE.COM レルムと EAST.EXAMPLE.COM レルムのドメイン名を定義しています。Kerberos 構成ファイルは先頭から末尾方向に検索されるため、サブドメインは最初に定義してください。

  5. Kerberos 構成ファイルをこのレルムのすべてのクライアントにコピーします。

    レルム間認証が動作するには、すべてのシステム (スレーブ KDC などのサーバーを含む) に新しいバージョンの Kerberos 構成ファイル (/etc/krb5/krb5.conf) がインストールされている必要があります。

  6. もう一方のレルムで上記の手順を繰り返します。

直接接続のレルム間認証を確立する方法

この手順の例では、 ENG.EAST.EXAMPLE.COM レルムと SALES.WEST.EXAMPLE.COM レルムを使用します。レルム間認証は、双方向に確立されます。この手順は、2 つのレルムのマスター KDC 上で完了する必要があります。

  1. 直接接続のレルム間認証の前提条件を完了します。

    マスター KDC の各レルムが構成済みである必要があります。認証処理を十分にテストするには、複数のクライアントまたはスレーブ KDCをインストールしている必要があります。

  2. いずれかのマスター KDC サーバー上でスーパーユーザーになります。

  3. 2 つのレルムに対して、TGT のサービス主体を作成します。

    マスター KDC を構成したときに作成した admin 主体名を使用して、ログインする必要があります。


    # /usr/sbin/kadmin -p kws/admin
    Enter password: <kws/admin パスワードを入力する>
    kadmin: addprinc krbtgt/ENG.EAST.EXAMPLE.COM@SALES.WEST.EXAMPLE.COM
    Enter password for principal 
      krgtgt/ENG.EAST.EXAMPLE.COM@SALES.WEST.EXAMPLE.COM: <パスワードを入力する>
    kadmin: addprinc krbtgt/SALES.WEST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM
    Enter password for principal 
      krgtgt/SALES.WEST.EXAMPLE.COM@ENG.EAST.EXAMPLE.COM: <パスワードを入力する>
    kadmin: quit
    

    注 –

    各サービス主体のパスワードは、2 つの KDC で同一である必要があります。そのため、サービス主体 krbtgt/ENG.EAST.EXAMPLE.COM@SALES.WEST.EXAMPLE.COM のパスワードは、2 つのレルムで同じである必要があります。


  4. Kerberos 構成ファイル (krb5.conf) にエントリを追加して、リモートレルムへの直接パスを定義します。

    この例は、ENG.EAST.EXAMPLE.COM レルムのクライアントを示しています。SALES.WEST.EXAMPLE.COM レルムで適切な定義をするには、レルム名をスワップする必要があります。


    # cat /etc/krb5/krb5.conf
    [libdefaults]
     .
     .
    [capaths]
        ENG.EAST.EXAMPLE.COM = {
            SALES.WEST.EXAMPLE.COM = .
        }
    
        SALES.WEST.EXAMPLE.COM = {
             ENG.EAST.EXAMPLE.COM = .
        }
    
  5. Kerberos 構成ファイルを現在のレルムのすべてのクライアントにコピーします。

    レルム間認証が動作するには、すべてのシステム (スレーブ KDC などのサーバーを含む) に新しいバージョンの Kerberos 構成ファイル (krb5.conf) がインストールされている必要があります。

  6. もう一方のレルムで上記の手順を繰り返します。

SEAM NFS サーバーの構成

NFS サービスは、UNIX ユーザー ID (UID) を使用してユーザーを識別しますが、主体を直接使用することはできません。そのため、主体を UID に対応付けるために、ユーザー主体を UNIX UID に割り当てる資格テーブルを作成する必要があります。この節では、SEAM NFS サーバーの構成手順、資格テーブルの管理手順、および NFS マウントしたファイルシステムに対して Kerberos セキュリティモードを有効にする手順を中心に説明します。次の表は、この節で説明する作業の一覧です。

表 9–3 SEAM NFS サーバーの構成 (作業マップ)

作業 

説明 

参照先 

SEAM NFS サーバーを構成する 

Kerberos 認証を必要とするファイルシステムを、サーバーが 共有できるようにする 

SEAM NFS サーバーを構成する方法

資格テーブルを作成する 

資格テーブルを生成する 

資格テーブルを作成する方法

ユーザー主体を UNIX UID に割り当てる資格テーブルを変更する 

資格テーブルの情報を更新する 

資格テーブルに 1 つのエントリを追加する方法

Kerberos 認証を使用してファイルシステムを共有する 

セキュリティモードを使用してファイルシステムを共有し、Kerberos 認証を常に行う 

複数の Kerberos セキュリティモードで安全な NFS 環境を設定する方法

SEAM NFS サーバーを構成する方法

この手順では、次の構成パラメータを使用します。

  1. SEAM NFS サーバーを構成するための前提条件を完了します。

    マスター KDC が構成済みである必要があります。処理を十分にテストするには、複数のクライアントが必要です。

  2. (省略可能) NTP クライアントなどのクロック同期メカニズムをインストールします。

    NTP のインストールと使用は、必須ではありません。ただし、認証を正常終了させるには、krb5.conf ファイルの libdefaults セクションに定義されているデフォルト時間内に、すべてのクロックを調整する必要があります。NTP については、KDC と SEAM クライアントのクロックの同期化を参照してください。

  3. kadmin を起動します。

    SEAM 管理ツールを使用して、主体を追加することができます (新しい主体を作成する方法を参照)。追加するときは、マスター KDC を構成するときに作成した admin 主体名を使用してログインする必要があります。ただし、次の例では、コマンド行を使用して、必要な主体を追加しています。


    denver # /usr/sbin/kadmin -p kws/admin
    Enter password: <kws/admin パスワードを入力する>
    kadmin: 
    1. サーバーの NFS サービス主体を作成します。

      主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかにかかわらず、FQDN は小文字で入力する必要があります。


      kadmin: addprinc -randkey nfs/denver.example.com
      Principal "nfs/denver.example.com" created.
      kadmin:
    2. (省略可能) NFS サーバーの root 主体を作成します。


      kadmin: addprinc root/denver.example.com
      Enter password for principal root/denver.example.com@EXAMPLE.COM: <パスワードを入力する>
      Re-enter password for principal root/denver.example.com@EXAMPLE.COM: <パスワードを再度入力する>
      Principal "root/denver.example.com@EXAMPLE.COM" created.
      kadmin: 
    3. サーバーの NFS サービス主体をサーバーのキータブファイルに追加します。


      kadmin: ktadd nfs/denver.example.com
      kadmin: Entry for principal nfs/denver.example.com with
        kvno 3, encryption type DES-CBC-CRC added to keytab
        WRFILE:/etc/krb5/krb5.keytab
      kadmin: 
    4. kadmin を終了します。


      kadmin: quit
      
  4. gsscred テーブルを作成します。

    詳細は、資格テーブルを作成する方法を参照してください。

  5. NFS ファイルシステムを Kerberos セキュリティモードで共有します。

    詳細は、複数の Kerberos セキュリティモードで安全な NFS 環境を設定する方法を参照してください。

  6. クライアントごとに、ユーザー主体と root 主体を認証します。

資格テーブルを作成する方法

gsscred 資格テーブルは、SEAM 主体を UID に割り当てるために NFS サーバーが使用します。NFS クライアントが Kerberos 認証を使用して NFS サーバーからファイルシステムをマウントするには、このテーブルを作成して使用可能にする必要があります。

  1. /etc/gss/gsscred.conf を編集してこのメカニズムを変更します。

    このメカニズムを files に変更します。

  2. gsscred を使用して資格テーブルを作成します。


    # gsscred -m kerberos_v5 -a
    

    gsscred コマンドは、 /etc/nsswitch.conf ファイル内の passwd エントリに指定されているすべてのソースから、情報を収集します。資格テーブルにローカルのパスワードエントリを入れたくない場合は、files エントリを一時的に削除しなければならないことがあります。詳細は、gsscred(1M) のマニュアルページを参照してください。

資格テーブルに 1 つのエントリを追加する方法

この手順を行うには、gsscred テーブルがすでに NFS サーバーに作成済みである必要があります。

  1. NFS サーバーでスーパーユーザーになります。

  2. gsscred を使用してエントリをテーブルに追加します。


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

    mech

    使用するセキュリティメカニズムを定義する 

    name

    KDC に定義されている、ユーザーの主体名を定義する 

    uid

    パスワードデータベースに定義されている、ユーザーの UID を定義する 

    -a

    UID を主体名の割り当てに追加する 

例 — 資格テーブルに 1 つのエントリを追加する

次の例では、sandy という名前のユーザーエントリを追加し、UID 3736 に割り当てます。UID をコマンド行に指定しない場合は、パスワードファイルの UID が使用されます。


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

複数の Kerberos セキュリティモードで安全な NFS 環境を設定する方法

  1. NFS サーバー上でスーパーユーザーになります。

  2. キータブファイルに NFS サービス主体が存在することを確認します。

    klist コマンドを指定すると、キータブファイルが存在するかどうかが出力され、その主体が表示されます。キータブファイルが存在しない場合、または NFS サービス主体が存在しない場合は、SEAM NFS サーバーを構成する方法 のすべての手順が完了していることを検証する必要があります。


    # klist -k
    Keytab name: FILE:/etc/krb5/krb5.keytab
    KVNO Principal
    ---- ---------------------------------------------------------
       3 nfs/denver.example.com@EXAMPLE.COM
  3. /etc/nfssec.conf ファイル内の Kerberos セキュリティモードを有効にします。

    /etc/nfssec.conf ファイルを編集して、Kerberos セキュリティモードの先頭にある # を削除します。


    # cat /etc/nfssec.conf
     .
     .
    #
    # NFS の Kerberos V5 を使用するために次の行をコメントからはずす
    #
    krb5            390003  kerberos_v5     default -               # RPCSEC_GSS
    krb5i           390004  kerberos_v5     default integrity       # RPCSEC_GSS
    krb5p           390005  kerberos_v5     default privacy         # RPCSEC_GSS
  4. /etc/dfs/dfstab ファイルを編集します。必要なセキュリティモードを sec= オプションに指定して、適切なエントリに追加します。


    share -F nfs -o sec=mode file-system
    

    mode

    共有するときに使用するセキュリティモードを指定する。複数のセキュリティモードを使用するときは、デフォルトとして、リストの最初のモードがオートマウンタによって使用される 

    file-system

    共有するファイルシステムへのパスを定義する 

    指定されたファイルシステムのファイルにアクセスするすべてのクライアントは、Kerberos 認証が必要です。ファイルにアクセスするには、NFS クライアント上のユーザー主体と root 主体が両方とも認証される必要があります。

  5. NFS サービスがサーバー上で動作していることを確認します。

    share コマンドまたは share コマンドセットを初めて実行する場合、NFS デーモンが動作していないことがあります。次のコマンドでデーモンを終了し、再起動してください。


    # /etc/init.d/nfs.server stop
    # /etc/init.d/nfs.server start
    
  6. (省略可能) オートマウンタを使用する場合は、auto_master データベースを編集して、デフォルト以外のセキュリティモードを選択してください。

    ファイルシステムのアクセスにオートマウンタを使用しない場合やデフォルトの選択をセキュリティモードとして使用する場合は、この手順を行う必要はありません。


    file-system  auto_home  -nosuid,sec=mode
    
  7. (省略可能) 手動で mount コマンドを実行し、デフォルト以外のモードを使用してファイルシステムにアクセスします。

    この代わりに、mount コマンドにセキュリティモードを指定できますが、オートマウンタは利用できません。


    # mount -F nfs -o sec=mode file-system
    

例 — 1 つの Kerberos セキュリティモードでファイルシステムを共有する

この例の dfstab ファイルの行は、NFS サービスを使用してファイルにアクセスするには、Kerberos 認証が正常終了する必要があることを示しています。


# grep krb /etc/dfs/dfstab
share -F nfs -o sec=krb5 /export/home

例 — 複数の Kerberos セキュリティモードでファイルシステムを共有する

次の例では、3 つの Kerberos セキュリティモードがすべて選択されています。マウント要求にセキュリティモードが指定されていない場合は、NFS V3 のすべてのクライアントに対して、最初のモードが使用されます (この場合は krb5)。詳細は、nfssec.conf(4) のマニュアルページを参照してください。


# grep krb /etc/dfs/dfstab
share -F nfs -o sec=krb5:krb5i:krb5p /export/home

SEAM クライアントの構成

SEAM クライアントは、SEAM サービスを使用する同じネットワーク上のすべてのホスト (KDC サーバーを除く) です。この節では、SEAM クライアントのインストール手順と、root 認証を使用して NFS ファイルシステムをマウントする方法について説明します。

SEAM クライアントを構成する方法

この手順では、次の構成パラメータを使用します。

  1. スーパーユーザーになります。

  2. Kerberos 構成ファイル (krb5.conf) を編集します。

    デフォルトの SEAM ファイルを変更する場合は、レルム名とサーバー名を変更する必要があります。gkadmin のヘルプファイルへのパスも指定する必要があります。


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = EXAMPLE.COM
    
    [realms]
                    EXAMPLE.COM = {
                    kdc = kdc1.example.com
                    kdc = kdc2.example.com
                    admin_server = kdc1.example.com
            }
    
    [domain_realm]
            .example.com = EXAMPLE.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 のクロックと同期化します。

    NTP のインストールと使用は、必須ではありません。ただし、認証を正常終了させるには、krb5.conf ファイルの libdefaults セクションに定義されているデフォルト時間内に、すべてのクロックを調整する必要があります。NTP については、KDC と SEAM クライアントのクロックの同期化を参照してください。

  4. (省略可能) ユーザー主体が存在しない場合は、ユーザー主体を作成します。

    このホストに関連付けられているユーザーに主体が割り当てられていない場合だけ、ユーザー主体を作成します。SEAM 管理ツールの使用方法については、新しい主体を作成する方法 を参照してください。以下は、コマンド行の例です。


    client1 # /usr/sbin/kadmin -p kws/admin
    Enter password: <kws/admin パスワードを入力する>
    kadmin: addprinc mre
    Enter password for principal mre@EXAMPLE.COM: <パスワードを入力する>
    Re-enter password for principal mre@EXAMPLE.COM: <パスワードを再度入力する>
    kadmin: 
  5. root 主体を作成します。

    主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかにかかわらず、FQDN は小文字で入力する必要があります。


    kadmin: addprinc root/client1.example.com
    Enter password for principal root/client1.example.com@EXAMPLE.COM: <パスワードを入力する>
    Re-enter password for principal root/client1.example.com@EXAMPLE.COM: <パスワードを再度入力する>
    kadmin: quit
    
  6. (省略可能) NFS で Kerberos を使用するには、 /etc/nfssec.conf ファイル内の Kerberos セキュリティモードを有効にします。

    /etc/nfssec.conf ファイルを編集して、Kerberos セキュリティモードの先頭にある # を削除します。


    # cat /etc/nfssec.conf
     .
     .
    #
    # NFS の Kerberos V5 を使用するために次の行をコメントからはずす
    #
    krb5            390003  kerberos_v5     default -               # RPCSEC_GSS
    krb5i           390004  kerberos_v5     default integrity       # RPCSEC_GSS
    krb5p           390005  kerberos_v5     default privacy         # RPCSEC_GSS
  7. (省略可能) SEAM クライアント上のユーザーが Kerberos NFS ファイルシステムを自動的にマウントして Kerberos 認証を使用する場合は、root ユーザーを認証する必要があります。

    この処理を最も安全に実行するには、kinit コマンドを使用します。ただし、Kerberos によって保護されているファイルシステムをマウントするときは、 root として kinit を使用する必要があります。代わりに、キータブファイルを使用することもできます。キータブファイルの要件の詳細については、NFS ファイルシステムをマウントするように root 認証を設定する を参照してください。


    client1 # /usr/bin/kinit root/client1.example.com
    Password for root/client1.example.com@EXAMPLE.COM: <パスワードを入力する>
    

    キータブファイルを使用するには、kadmin を使用して root 主体をクライアントのキータブに追加します。


    client1 # /usr/sbin/kadmin -p kws/admin
    Enter password: <kws/admin パスワードを入力する>
    kadmin: ktadd root/client1.example.com
    kadmin: Entry for principal root/client.example.com with
      kvno 3, encryption type DES-CBC-CRC added to keytab
      WRFILE:/etc/krb5/krb5.keytab
    kadmin: quit
    
  8. クライアントから Kerberos チケットの有効期限切れをユーザーに警告する場合は、/etc/krb5/warn.conf ファイルにエントリを作成します。

    詳細は、warn.conf(4) のマニュアルページを参照してください。

例 - SEAM 以外の KDC を使用するように SEAM クライアントを設定する

SEAM 以外の KDC を使用するように SEAM クライアントを設定することができます。この場合、/etc/krb5/krb5.conf ファイルの realms セクションに、1 行を追加する必要があります。この行を追加すると、クライアントが Kerberos パスワード変更サーバーとの通信に使用するプロトコルが変更されます。この行の書式は次のとおりです。


[realms]
                EXAMPLE.COM = {
                kdc = kdc1.example.com
                kdc = kdc2.example.com
                admin_server = kdc1.example.com
                kpasswd_protocol = SET_CHANGE
        }

NFS ファイルシステムをマウントするように root 認証を設定する

Kerberos 以外の NFS ファイルシステムにアクセスする場合は、root として NFS ファイルシステムをマウントするか、ユーザーがファイルシステムにアクセスしたときにオートマウンタを介して自動的にアクセスできます。後者の場合、root アクセス権は必要ありません。

Kerberos NFS ファイルシステムをマウントする場合もほとんど同じですが、操作が複雑になります。Kerberos NFS ファイルシステムをマウントするには、root として kinit コマンドを使用し、クライアントの root 主体の資格を取得する必要があります。クライアントの root 主体は通常、クライアントのキータブに登録されていないためです。この手順は、オートマウンタが設定されているときでも必要です。また、すべてのユーザーがシステムの root パスワードと root 主体のパスワードを知っている必要があります。

この手順を省略するには、クライアントの root 主体をクライアントのキータブファイルに追加し、root の資格を自動的に与えるようにします。この方法を利用すると、ユーザーは kinit コマンドを実行しなくても NFS ファイルシステムをマウントでき、使いやすさが向上しますが、セキュリティが低下します。たとえば、キータブ内の root 主体を使用してシステムへのアクセス権を取得した場合、root の資格を取得できます。このため、セキュリティ対策を適切に行う必要があります。詳細は、キータブファイルの管理 を参照してください。

KDC と SEAM クライアントのクロックの同期化

Kerberos 認証システムに参加するすべてのホストは、指定した最大時間内で内部クロックを同期化する必要があります (「クロックスキュー」) 。同時に、Kerberos セキュリティを検査することにもなります。参加しているホスト間のクロックスキューが超過すると、クライアントの要求が拒否されます。

アプリケーションサーバーが再実行要求を認識し拒否する目的で、すべての Kerberos プロトコルメッセージをどのくらいの間追跡管理する必要があるかも、クロックスキューで決まります。そのため、クロックスキュー値が長いほど、アプリケーションサーバーが収集する情報も多くなります。

最大クロックスキューのデフォルト値は、300 秒 (5 分) です。このデフォルトは、krb5.conf ファイルの libdefaults セクションで変更できます。


注 –

セキュリティ上の理由から、クロックスキュー値は 300 秒より大きくしないでください。


KDC と SEAM クライアント間で同期化したクロックを管理することは重要であるため、NTP ソフトウェアを使用して同期化します。デラウェア大学が作成した NTP パブリックドメインソフトウェアが Solaris 2.6 以降の Solaris ソフトウェアに含まれています。


注 –

クロックを同期化するときは、rdate コマンドと cron ジョブを使用することもできます。この方法は、NTP より簡単に使用できます。ただし、ここでは NTP を中心に説明します。ネットワークを使用してクロックを同期化する場合は、クロック同期化プロトコル自体も安全である必要があります。


NTP を使用すると、正確な時間とネットワーククロック同期をネットワーク環境で管理できます。NTP は基本的にはクライアントサーバー実装の状態をとります。1 つのシステムをマスタークロック (NTP サーバー) として指定します。次に、その他のすべてのシステム (NTP クライアント) をマスタークロックと同期するように設定します。

クロックを同期化するために、NTP は xntpd デーモンを使用して、インターネット標準時サーバーに合わせて UNIX システムの時刻を設定および管理します。次の図は、NTP のクライアントサーバー実装の例です。

図 9–1 NTP を使用したクロック同期

NTP サーバーがマスタークロックとなり、NTP クライアントと Kerberos クライアント上が xntpd デーモンを実行しています。

KDC および SEAM クライアントがクロックを同期化するには、次の手順を実行します。

  1. ネットワークに NTP サーバーを設定します。NTP サーバーは、マスター KDC 以外であればどのシステムでも設定できます。NTP サーバーの作業については、『Solaris のシステム管理 (資源管理とネットワークサービス)』の「NTP の管理 (作業)」を参照してださい。

  2. ネットワークの KDC と SEAM クライアントを構成するときに、それらを NTP サーバーの NTP クライアントとして設定します。NTP クライアントの作業については、『Solaris のシステム管理 (資源管理とネットワークサービス)』の「NTP の管理 (作業)」を参照してください。

マスター KDC とスレーブ KDC のスワップ

マスター KDC とスレーブ KDC をスワップするときは、この節で説明する手順を行います。マスター KDC とスレーブ KDC のスワップは、マスター KDC に何らかの理由で障害が発生した場合、またはマスター KDC を再インストールする必要がある場合 (新しいハードウェアをインストールした場合など) にだけ行なってください。

スワップ可能なスレーブ KDC を構成する方法

この手順は、マスター KDC にスワップ可能なスレーブ KDC に対して実行します。

  1. KDC をインストールするときに、マスター KDC およびスワップ可能なスレーブ KDC に対して別名を使用します。

    KDC に対してホスト名を定義するときは、各システムの別名が DNS に登録されている必要があります。/etc/krb5/krb5.conf ファイルにホストを定義するときも、別名を使用します。

  2. 手順に従って、スレーブ KDC をインストールします。

    スワップするサーバーは、レルム内でスレーブ KDC として動作している必要があります。手順については、スレーブ KDC を構成する方法 を参照してください。

  3. マスター KDC コマンドを移動します。

    このスレーブ KDC からマスター KDC コマンドが実行されるのを回避するために、kpropkadmind、および kadmin.local コマンドを予約した場所に移動します。


    kdc4 # mv /usr/lib/krb5/kprop /usr/lib/krb5/kprop.save
    kdc4 # mv /usr/lib/krb5/kadmind /usr/lib/krb5/kadmind.save
    kdc4 # mv /usr/sbin/kadmin.local /usr/sbin/kadmin.local.save
    
  4. rootcrontab ファイルの kprop 行をコメントにします。

    スレーブ KDC が KDC データベースのコピーを伝播しなくなります。


    kdc4 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # root の crontab はアカウントデータ収集を実行するために使用する
    #
    # rtc コマンドは、夏時間を変更する場合に実時間クロックを
    # 調整するために実行する
    #
    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/lib/krb5kprop_script kdc1.example.sun.com #SUNWkr5ma
    

マスター KDC とスレーブ KDC をスワップする方法

この手順を実行するには、スレーブ KDC がスワップ可能なスレーブとして設定されている必要があります (スワップ可能なスレーブ KDC を構成する方法 を参照)。この手順では、旧マスター KDC サーバー名は、kdc1 です。新しいマスター KDC となるスレーブ KDC の名前は、kdc4 です。

  1. 旧マスター KDC 上で、kadmind プロセスを終了します。


    kdc1 # /etc/init.d/kdc.master stop
    

    kadmind プロセスを終了するときは、旧 KDC データベースに対する変更は行わないでください。

  2. 旧マスター KDC 上で、rootcrontab ファイルの kprop 行をコメントにします。


    kdc1 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # root の crontab はアカウントデータ収集を実行するために使用する
    #
    # rtc コマンドは、夏時間を変更する場合に実時間クロックを
    # 調整するために実行する
    #
    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/lib/krb5/kprop_script kdc2.example.sun.com #SUNWkr5ma
    

    旧マスター KDC が KDC データベースのコピーを伝播しなくなります。

  3. 旧マスター KDC 上で、kprop_script を実行してデータベースをバックアップし、伝播します。


    kdc1 # /usr/lib/krb5/kprop_script kdc4.example.com
    Database propagation to kdc4.example.com: SUCCEEDED
  4. 旧マスター KDC 上で、マスター KDC コマンドを移動します。

    マスター KDC コマンドが実行されるのを回避するために、kpropkadmind、および kadmin.local コマンドを予約した場所に移動します。


    kdc4 # mv /usr/lib/krb5/kprop /usr/lib/krb5/kprop.save
    kdc4 # mv /usr/lib/krb5/kadmind /usr/lib/krb5/kadmind.save
    kdc4 # mv /usr/sbin/kadmin.local /usr/sbin/kadmin.local.save
    kdc4 # mv /etc/krb5/kadm5.acl /etc/krb5/kadm5.acl.save
    
  5. DNS サーバー上で、マスター KDC の別名を変更します。

    サーバーを変更するために、example.com ゾーンファイルを編集して masterkdc のエントリを変更します。


    masterkdc IN CNAME kdc4
  6. DNS サーバー上で、インターネットドメインネームサーバーを再起動します。

    両方のサーバー上で次のコマンドを実行して、新しい別名情報を取得します。


    # pkill -1 in.named
  7. 新しいマスター KDC 上で、マスター KDC コマンドを移動します。


    kdc4 # mv /usr/lib/krb5/kprop.save /usr/lib/krb5/kprop
    kdc4 # mv /usr/lib/krb5/kadmind.save /usr/lib/krb5/kadmind
    kdc4 # mv /usr/sbin/kadmin.local.save /usr/sbin/kadmin.local
    
  8. 新しいマスター KDC 上で、Kerberos アクセス制御リストファイル ( kadm5.acl) を編集します。

    /etc/krb5/kadm5.acl ファイルには、KDC を管理できる主体名がすべて含まれている必要があります。最初のエントリは、次のようになります。


    kws/admin@EXAMPLE.COM   *

    このエントリにより、 EXAMPLE.COM レルム内の kws/admin 主体に対して、KDC 内の主体またはポリシーを変更する機能が与えられます。デフォルトのインストールでは、アスタリスク (*) が指定され、すべての admin 主体に変更権限が与えられます。アスタリスクを指定すると、セキュリティが低下する可能性があります。admin 主体をすべて指定すれば、セキュリティが向上します。詳細は、kadm5.acl(4) のマニュアルページを参照してください。

  9. 新しいマスター KDC 上で、kadmin.local を使用して kadmin のキータブファイルを作成します。

    このコマンドシーケンスは、admin および changepw 主体のエントリを格納するためのキータブを作成します。これらの主体は、kadmind サービスに必要です。


    kdc4 # /usr/sbin/kadmin.local
    kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/kdc4.example.com
    Entry for principal kadmin/kdc4.example.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.example.com
    Entry for principal changepw/kdc4.example.com with kvno 3, encryption type DES-CBC-CRC 
              added to keytab WRFILE:/etc/krb5/kadm5.keytab.
    kadmin.local: quit
    
  10. 新しいマスター KDC 上で、kadmind を起動します。


    kdc4 # /etc/init.d/kdc.master start
    
  11. rootcrontab ファイル内の kprop 行を有効にします。


    kdc4 # crontab -e
    #ident  "@(#)root       1.19    98/07/06 SMI"   /* SVr4.0 1.1.3.1       */
    #
    # root の crontab はアカウントデータ収集を実行するために使用する
    #
    # rtc コマンドは、夏時間を変更する場合に実時間クロックを
    # 調整するために実行する
    #
    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/lib/krb5/kprop_script kdc1.example.sun.com #SUNWkr5ma
    

Kerberos データベースの管理

Kerberos データベースは、Kerberos の最も重要な構成要素であるため、適切に管理する必要があります。この節では、データベースのバックアップと復元、並列伝播の設定、stash ファイルの管理など、Kerberos データベースの管理についていくつかの手順を説明します。データベースを初期設定する手順については、マスター KDC を構成する方法 を参照してください。

Kerberos データベースのバックアップと伝播

マスター KDC の Kerberos データベースをスレーブ KDC に伝播する処理は、構成処理の中で最も重要なものの 1 つです。伝播の頻度が少ないと、マスター KDC とスレーブ KDC が同期しなくなります。マスター KDC に障害が発生した場合、スレーブ KDC は最新のデータベース情報を取得できません。また、負荷を分散するためにスレーブ KDC がマスター KDC として構成されている場合も、そのスレーブ KDC をマスター KDC として使用するクライアントは最新情報を取得できません。このため、Kerberos データベースの変更頻度に基づいて、伝播頻度を適切に設定する必要があります。

マスター KDC を構成するときは、cron ジョブ内に kprop_script コマンドを設定して、Kerberos データベースを /var/krb5/slave_datatrans ダンプファイルに自動的にバックアップし、それをスレーブ KDC に伝播します。ただし、他のファイルと同様に、Kerberos データベースは壊れることがあります。スレーブ KDC のデータが壊れた場合でも、次回のデータベース自動伝播によって最新のコピーがインストールされるため、影響が発生しないこともあります。ただし、マスター KDC のデータが壊れた場合は、壊れたデータベースが次回の伝播ですべてのスレーブ KDC に伝播されます。また、壊れたデータがバックアップされると、マスター KDC 上の壊れていない前回のバックアップファイルが上書きされます。

この場合、安全なバックアップコピーが存在しないため、cron ジョブを設定して slave_datatrans ダンプファイルを定期的に別の場所にコピーするか、kdb5_utildump コマンドを使用して別のバックアップコピーを作成することも必要です。これにより、データベースが壊れても、kdb5_util load コマンドを使用して、マスター KDC の最新のバックアップを復元することができます。

次の点も重要です。データベースダンプファイルには主体鍵が含まれているため、許可されないユーザーがアクセスできないように、ファイルを保護する必要があります。デフォルトでは、データベースダンプファイルの読み取り権および書き込み権は、root にだけ与えられます。許可されないアクセスから保護するには、 kprop コマンドだけを使用して、データベースダンプファイルを伝播します。この場合、転送するデータが暗号化されます。また、kprop はデータをスレーブ KDC だけに伝播するため、データベースダンプファイルが間違って許可されないホストに送信される可能性が最小限になります。


注意 – 注意 –

Kerberos データベースが伝播されたあとに更新され、次の伝播の前にデータベースが壊れた場合は、スレーブ KDC には更新が反映されません。この更新は失われます。このため、定期的に実行される伝播の前に重要な更新を追加した場合は、データの損失を回避するために手動でデータベースを伝播する必要があります。


kpropd.acl ファイル

KDC の kpropd.acl ファイルの各行には、ホスト主体名と、伝播された最新のデータベースの受信元となるシステムが指定されています。マスター KDC を使用してすべてのスレーブ KDC に伝播する場合は、各スレーブ KDC の kpropd.acl ファイルに対してマスター KDC の主体名だけを指定する必要があります。

ただし、このマニュアルの SEAM のインストールおよびインストール後の構成手順では、マスター KDC とスレーブ KDC に対して同じkpropd.acl ファイルを追加するように説明しています。このファイルには、すべての KDC ホスト主体名が含まれます。この構成を使用すると、伝播元の KDC が一時的に使用できなくなったときでも、任意の KDC から伝播することができます。また、すべての KDC に同一のコピーを保持すると、構成の管理が容易になります。

kprop_script コマンド

kprop_script コマンドは、kprop コマンドを使用して Kerberos データベースをほかの KDC に伝播します。 kprop_script コマンドをスレーブ KDC 上で実行すると、そのスレーブ KDC の Kerberos データベースのコピーがほかの KDC に伝播されます。kprop_script には、ホスト名のリストを引数として指定します。区切り文字は空白です。指定したホスト名は、伝播先の KDC になります。

kprop_script を実行すると、Kerberos データベースのバックアップが /var/krb5/slave_datatrans ファイルに作成され、指定した KDC にそのファイルがコピーされます。Kerberos データベースは、伝播が完了するまでロックされます。

Kerberos データベースをバックアップする方法

  1. マスター KDC 上でスーパーユーザーになります。

  2. kdb5_utildump コマンドを使用して、Kerberos データベースをバックアップします。


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

    -verbose

    バックアップする各主体とポリシー名を出力する 

    dbname

    バックアップするデータベース名を定義する。指定したデータベース名には、.db が付加される。ファイルの絶対パスを指定できる。-d オプションを指定しない場合、デフォルトのデータベース名は /var/krb5/principal となる。実際には、/var/krb5/principal.db という名前に変換される

    filename

    データベースのバックアップに使用するファイルを定義する。ファイルの絶対パスを指定できる。ファイルを指定しなかった場合、データベースは標準出力にダンプされる 

    principal

    バックアップする主体を 1 つ以上定義する (区切り文字は空白)。主体名は完全指定形式にする必要がある。主体を指定しなかった場合、データベース全体がバックアップされる 

例 — Kerberos データベースのバックアップ

次の例では、Kerberos データベースは dumpfile と呼ばれるファイルにバックアップされます。-verbose オプションが指定されているため、各主体はバックアップされるときに出力されます。


# kdb5_util dump -verbose dumpfile 
kadmin/kdc1.eng.example.com@ENG.EXAMPLE.COM 
krbtgt/eng.example.com@ENG.EXAMPLE.COM 
kadmin/history@ENG.EXAMPLE.COM 
pak/admin@ENG.EXAMPLE.COM 
pak@ENG.EXAMPLE.COM
changepw/kdc1.eng.example.com@ENG.EXAMPLE.COM

次の例では、pak および pak/admin 主体が Kerberos データベースからバックアップされます。


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

Kerberos データベースを復元する方法

  1. マスター KDC 上でスーパーユーザーになります。

  2. kdb_utilload コマンドを使用して、Kerberos データベースを復元します。


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

    -verbose

    復元する各主体とポリシー名を出力する 

    dbname

    復元するデータベース名を定義する。指定したデータベース名には、.db が付加される。ファイルの絶対パスを指定できる。-d オプションを指定しない場合、デフォルトのデータベース名は /var/krb5/principal となる。実際には、/var/krb5/principal.db という名前に変換される

    -update

    既存のデータベースを更新する。指定しない場合、新しいデータベースが作成されるか、既存のデータベースが上書きされる 

    filename

    データベースの復元に使用するファイルを定義する。ファイルの絶対パスを指定できる 

例 — Kerberos データベースの復元

次の例では、database1.db というデータベースが、dumpfile ファイルから現在のディレクトリに復元されます。-update オプションが指定されていないため、復元によって新しいデータベースが作成されます。


# kdb5_util load -d database1 dumpfile

Kerberos データベースをスレーブ KDC に手動で伝播する方法

この手順では、kprop コマンドを使用して、Kerberos データベースを伝播します。定期的に実行する cron ジョブ以外に、スレーブ KDC とマスター KDC を同期化する必要がある場合は、この手順を行います。また、kprop_script と異なり、kprop を使用した場合は、現在のデータベースバックアップだけを伝播できます。伝播する前に、Kerberos データベースの新しいバックアップは作成されません。

  1. マスター KDC 上でスーパーユーザーになります。

  2. (省略可能) kdb5_util コマンドを使用して、データベースをバックアップします。


    # /usr/sbin/kdb5_util dump /var/krb5/slave_datatrans
    
  3. kprop コマンドを使用して、データベースをスレーブ KDC に伝播します。


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

定期的に実行する cron ジョブ以外に、データベースをバックアップし、そのファイルをスレーブ KDC に伝播する場合は、次のように kprop_script コマンドを使用することもできます。


# /usr/lib/krb5/kprop_script slave_KDC

並列伝播の設定

ほとんどの場合、マスター KDC は、Kerberos データベースをスレーブ KDC に伝播するときにだけ使用されます。使用するサイトに複数のスレーブ KDC が存在する場合は、伝播処理の負荷を分散させることもできます。この概念は、「並列伝播」と呼ばれます。

並列伝播を利用すると、複数のスレーブ KDC 間でマスター KDC の伝播処理を分散できます。処理を分散すると、伝播をより早く実行でき、マスター KDC の作業を軽減することができます。

たとえば、使用するサイトに 1 つのマスター KDC と 6 個のスレーブ KDC があるとします (図 9–2 参照)。 slave-1 から slave-3 で 1 つの論理グループを構成し、slave-4 から slave-6 で別の論理グループを構成しています。並列伝播を設定するには、マスター KDC がデータベースを slave-1slave-4 に伝播し、これらのスレーブ KDC がグループ内のスレーブ KDC にデータベースを伝播するようにします。

図 9–2 並列伝播の構成例

2 つの伝播スレーブを持つマスター KDC です。伝播スレーブはさらにそれぞれが持つ 2 つのスレーブに、マスター KDC データベースを伝播します。

並列伝播を設定する方法

ここでは、並列伝播の詳細な手順は説明しませんが、並列伝播を有効にする構成手順の概要を示します。

  1. マスター KDC 上で、cron ジョブ内の kprop_script エントリを変更して、次の伝播先のスレーブ KDC (伝播スレーブ) だけを引数に指定します。

  2. 伝播スレーブごとに、kprop_script エントリをその cron ジョブに追加し、伝播先のスレーブを引数に指定します。並列伝播を正しく行うには、伝播スレーブが新しい Kerberos データベースから伝播されたあとに、cron ジョブが実行されるように設定する必要があります。


    注 –

    伝播スレーブにかかる伝播時間は、ネットワークの帯域幅やデータベースのサイズなどの要因によって異なります。


  3. スレーブ KDC ごとに、伝播に必要なアクセス権を設定します。伝播元の KDC のホスト主体名を各スレーブ KDC の kpropd.acl ファイルに追加します。

例 — 並列伝播の設定

図 9–2 のマスター KDC の kprop_script エントリは、次のようになります。


0 3 * * * /usr/lib/krb5/kprop_script slave-1.example.com slave-4.example.com

slave-1kprop_script エントリは、次のようになります。


0 4 * * * /usr/lib/krb5/kprop_script slave-2.example.com slave-3.example.com

このスレーブの伝播は、マスターからの伝播が完了してから 1 時間後に開始します。

伝播スレーブの kpropd.acl ファイルには、次のエントリが含まれます。


host/master.example.com@EXAMPLE.COM

slave-1 から伝播されるスレーブ KDC の kpropd.acl ファイルには、次のエントリが含まれます。


host/slave-1.example.com@EXAMPLE.COM

stash ファイルの管理

stash ファイルには、Kerberos データベースのマスター鍵が含まれます。このファイルは、Kerberos データベースを作成すると自動的に作成されます。stash ファイルが壊れた場合は、 kdb5_util ユーティリティの stash コマンドを使用して、置き換えることができます。kdb5_utildestroy コマンドを使用して Kerberos データベースを削除したときは、stash ファイルも削除する必要があります。データベースを削除しても、stash ファイルは自動的に削除されないため、クリーンアップを完了するには、このファイルを削除する必要があります。

stash ファイルを削除する方法

  1. stash ファイルが配置されている KDC の上でスーパーユーザーになります。

  2. stash ファイルを削除します。


    # rm stash-file
    

    この例では、stash-file は stash ファイルのパスを示します。デフォルトでは、stash ファイルは /var/krb5/.k5.realm にあります。

stash ファイルを再作成する場合は、kdb5_util コマンドの -f オプションを使用します。

セキュリティの強化

SEAM アプリケーションサーバーと KDC サーバーのセキュリティを強化するには、次の手順に従ってください。

KDC サーバーへのアクセスを制限する方法

マスター 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 サービスはクロック同期で使用される
    #
    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/lib/ktkt_warnd kwarnd
    krb5_prop stream  tcp     nowait  root    /usr/lib/krb5/kpropd  kpropd

    変更が完了したら、KDCをリブートします。

  2. KDC をサポートするハードウェアに対するアクセスを制限します。

    物理的なアクセスを制限するために、KDC とそのモニターは安全な場所に設置します。このサーバーへのアクセスを完全に制限することが目的です。

  3. KDC データベースのバックアップを、ローカルディスクまたはスレーブ KDC に格納します。

    KDC のバックアップをテープに作成する場合、そのテープのセキュリティを十分に確保してください。キータブファイルのコピーも、同様に作成します。これらのファイルをローカルファイルシステムに格納する場合は、できるだけほかのシステムと共有しないでください。格納先のファイルシステムは、マスター KDC または任意のスレーブ KDC から選択できます。