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

ProcedureLDAP データサーバーを使用するように KDC を構成する方法

Solaris 10 5/08 リリースから、次の手順を使用して、LDAP データサーバーを使用するように KDC を構成できるようになりました。

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

始める前に

この手順を実行する場合も、ホストが DNS を使用するように構成されている必要があります。パフォーマンスを向上させるためには、KDC と LDAP ディレクトリサービスを同じサーバーにインストールしてください。さらに、ディレクトリサーバーも稼働させるようにしてください。次の手順は、Sun Java Directory Server Enterprise Edition リリースを使用しているサーバーで機能します。

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

  2. ディレクトリサーバーの証明書を作成し、その証明書をインポートします。

    次の手順では、Directory Server 6.1 自己署名付き証明書を使用するように S10 KDC を構成します。証明書の期限が切れている場合は、『Sun Java System Directory Server Enterprise Edition 6.2 管理ガイド』「自己署名済み証明書を管理する」の手順に従って証明書を更新してください。

    1. 自己署名付きのディレクトリサーバー証明書をエクスポートします。


      # /usr/sfw/bin/certutil -L -n defaultCert -d /export/sun-ds6.1/directory/alias \
              -P 'slapd-' -a > /var/tmp/ds_cert.pem
      
    2. ローカルの証明書データベースを作成します。


      # /usr/sfw/bin/certutil -N -d /var/ldap
      
    3. ディレクトリサーバー証明書をローカルの証明書データベースに追加します。


      # /usr/sfw/bin/certutil -A -n defaultCert -i /var/tmp/ds_cert -a -t CT -d /var/ldap
      
    4. ディレクトリサーバー証明書をインポートします。


      # pktool setpin keystore=nss dir=/var/ldap
      # chmod a+r /var/ldap/*.db
      # pktool import keystore=nss objtype=cert trust="CT" infile=/tmp/defaultCert.certutil.der \
              label=defaultCert dir=/var/ldap
      
  3. 必要に応じて、LDAP ディレクトリにデータを設定します。

  4. 既存のスキーマに Solaris Kerberos スキーマを追加します。


    # ldapmodify -h dsserver.example.com -D "cn=directory manager" -f /usr/share/lib/ldif/kerberos.ldif
    
  5. LDAP ディレクトリ内に Kerberos コンテナを作成します。

    krb5.conf ファイルに次のエントリを追加します。

    1. データベースの種類を定義します。

      realms セクションに database_module を定義するエントリを追加します。


      database_module = LDAP
      
    2. データベースのモジュールを定義します。


      [dbmodules]
          LDAP = {
              ldap_kerberos_container_dn = "cn=krbcontainer,dc=example,dc=com"
              db_library = kldap
              ldap_kdc_dn = "cn=kdc service,ou=profile,dc=example,dc=com"
              ldap_kadmind_dn = "cn=kadmin service,ou=profile,dc=example,dc=com"
              ldap_cert_path = /var/ldap
              ldap_servers = ldaps://dsserver.example.com
          }
      
    3. LDAP ディレクトリ内に KDC を作成します。

      このコマンドによって、krbcontainer とその他のいくつかのオブジェクトが作成されます。また、/var/krb5/.k5.EXAMPLE.COM マスター鍵の stash ファイルも作成されます。


      # kdb5_ldap_util -D "cn=directory manager" create -P abcd1234 -r EXAMPLE.COM -s
  6. KDC のバインド識別名 (DN) のパスワードを隠します。

    これらのパスワードは、DS にバインドするときに KDC によって使用されます。KDC は、その KDC が使用しているアクセスの種類に応じて異なる役割を使用します。


    # kdb5_ldap_util stashsrvpw "cn=kdc service,ou=profile,dc=example,dc=com"
    # kdb5_ldap_util stashsrvpw "cn=kadmin service,ou=profile,dc=example,dc=com"
    
  7. KDC サービスの役割を追加します。

    1. 次に示すような内容を含む kdc_roles.ldif ファイルを作成します。


      dn: cn=kdc service,ou=profile,dc=example,dc=com
      cn: kdc service
      sn: kdc service
      objectclass: top
      objectclass: person
      userpassword: test123
      
      dn: cn=kadmin service,ou=profile,dc=example,dc=com
      cn: kadmin service
      sn: kadmin service
      objectclass: top
      objectclass: person
      userpassword: test123
    2. LDAP ディレクトリ内に役割のエントリを作成します。


      # ldapmodify -a -h dsserver.example.com -D "cn=directory manager" -f kdc_roles.ldif
      
  8. KDC に関連する役割の ACL を設定します。


    # cat << EOF | ldapmodify -h dsserver.example.com -D "cn=directory manager" 
    # Set kadmin ACL for everything under krbcontainer.
    dn: cn=krbcontainer,dc=example,dc=com
    changetype: modify
    add: aci
    aci: (target="ldap:///cn=krbcontainer,dc=example,dc=com")(targetattr="krb*")(version 3.0;\
          acl kadmin_ACL; allow (all)\
          userdn = "ldap:///cn=kadmin service,ou=profile,dc=example,dc=com";)
    
    # Set kadmin ACL for everything under the people subtree if there are
    # mix-in entries for krb princs:
    dn: ou=people,dc=example,dc=com
    changetype: modify
    add: aci
    aci: (target="ldap:///ou=people,dc=example,dc=com")(targetattr="krb*")(version 3.0;\
          acl kadmin_ACL; allow (all)\
          userdn = "ldap:///cn=kadmin service,ou=profile,dc=example,dc=com";)
    EOF
  9. Kerberos 構成ファイル (krb5.conf) を編集します。

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


    kdc1 # cat /etc/krb5/krb5.conf
    [libdefaults]
            default_realm = EXAMPLE.COM
    
    [realms]
            EXAMPLE.COM = {
            kdc = kdc1.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
            }

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


    注 –

    暗号化タイプを制限する場合は、default_tkt_enctypes または default_tgs_enctypes の行を設定します。暗号化タイプの制限に関する詳細は、「Kerberos 暗号化タイプの使用」を参照してください。


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

    レルム名を変更する必要があります。このファイルの詳細は、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
                    sunw_dbprop_enable = true
                    sunw_dbprop_master_ulogsize = 1000
                    }

    この例では、realms セクションのレルム名定義を変更しました。また、realms セクションで、増分伝播できるようにする行とログ内に保持する KDC マスターの更新数を選択する行を追加しました。


    注 –

    暗号化タイプを制限する場合は、permitted_enctypessupported_enctypes、または master_key_type の行を設定します。暗号化タイプの制限に関する詳細は、「Kerberos 暗号化タイプの使用」を参照してください。


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

    作成された /etc/krb5/kadm5.acl ファイルには、KDC を管理できる主体名がすべて含まれている必要があります。


    kws/admin@EXAMPLE.COM   *

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

  12. kadmin.local コマンドを起動し、主体を追加します。

    次の手順では、Kerberos サービスで使用される主体を作成します。


    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:<Type the password>
      Re-enter password for principal kws/admin@EXAMPLE.COM: <Type it again>
      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 AES-256 CTS mode
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type Triple DES cbc
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type ArcFour
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal kadmin/kdc1.example.com with kvno 3, encryption type DES cbc mode
                with RSA-MD5 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 AES-256 CTS mode
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal changepw/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal changepw/kdc1.example.com with kvno 3, encryption type Triple DES cbc
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal changepw/kdc1.example.com with kvno 3, encryption type ArcFour
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal changepw/kdc1.example.com with kvno 3, encryption type DES cbc mode
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      kadmin.local: ktadd -k /etc/krb5/kadm5.keytab kadmin/changepw
      Entry for principal kadmin/changepw with kvno 3, encryption type AES-256 CTS mode
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal kadmin/changepw with kvno 3, encryption type AES-128 CTS mode
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal kadmin/changepw with kvno 3, encryption type Triple DES cbc
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal kadmin/changepw with kvno 3, encryption type ArcFour
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      Entry for principal kadmin/changepw with kvno 3, encryption type DES cbc mode
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/kadm5.keytab.
      kadmin.local:
    3. kadmin.local を終了します。

      以降の手順で必要になる主体をすべて追加しました。


      kadmin.local: quit
      
  13. (省略可能) Kerberos サービスの LDAP 依存性を構成します。

    LDAP および KDC サーバーが同一のホスト上で稼働しており、LDAP サービスが SMF FMRI を使って構成されている場合は、Kerberos デーモンの LDAP サービスに対する依存性を追加します。これにより、LDAP サービスが再起動すると KDC サービスも再起動するようになります。

    1. krb5kdc サービスへの依存性を追加します。


      # svccfg -s security/krb5kdc
      svc:/network/security/krb5kdc> addpg dsins1 dependency
      svc:/network/security/krb5kdc> setprop dsins1/entities = \
          fmri: "svc:/application/sun/ds:ds--var-opt-SUNWdsee-dsins1"
      svc:/network/security/krb5kdc> setprop dsins1/grouping = astring: "require_all"
      svc:/network/security/krb5kdc> setprop dsins1/restart_on = astring: "restart"
      svc:/network/security/krb5kdc> setprop dsins1/type = astring: "service"
      svc:/network/security/krb5kdc> exit
      
    2. kadmin サービスへの依存性を追加します。


      # svccfg -s security/kadmin
      svc:/network/security/kadmin> addpg dsins1 dependency
      svc:/network/security/kadmin> setprop dsins1/entities =\
          fmri: "svc:/application/sun/ds:ds--var-opt-SUNWdsee-dsins1"
      svc:/network/security/kadmin> setprop dsins1/grouping = astring: "require_all"
      svc:/network/security/kadmin> setprop dsins1/restart_on = astring: "restart"
      svc:/network/security/kadmin> setprop dsins1/type = astring: "service"
      svc:/network/security/kadmin> exit
      
  14. Kerberos デーモンを起動します。


    kdc1 # svcadm enable -r network/security/krb5kdc
    kdc1 # svcadm enable -r network/security/kadmin
    
  15. kadmin を起動して、主体をさらに追加します。

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


    kdc1 # /usr/sbin/kadmin -p kws/admin
    Enter password: <Type kws/admin password>
    kadmin: 
    1. マスター KDC の host 主体を作成します。

      ホスト主体は、klistkprop などの Kerberos アプリケーションで使用されます。Solaris 10 クライアントは、認証された NFS ファイルシステムをマウントするときに、この主体を使用します。主体のインスタンスがホスト名のときは、/etc/resolv.conf ファイル内のドメイン名が大文字であるか小文字であるかに関係なく、FQDN は小文字で指定する必要があります。


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

      この主体は、Kerberos クライアントのインストール中に kclient ユーティリティーで使用されます。このユーティリティーを使用しない場合は、主体に追加する必要はありません。kclient ユーティリティーのユーザーは、このパスワードを使用する必要があります。


      kadmin: addprinc clntconfig/admin
      Enter password for principal clntconfig/admin@EXAMPLE.COM:<Type the password>
      Re-enter password for principal clntconfig/admin@EXAMPLE.COM: <Type it again>
      Principal "clntconfig/admin@EXAMPLE.COM" created.
      kadmin: 
    3. マスター KDC のキータブファイルにマスター KDC の host 主体を追加します。

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


      kadmin: ktadd host/kdc1.example.com
      Entry for principal host/kdc1.example.com with kvno 3, encryption type AES-256 CTS mode
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/krb5.keytab.
      Entry for principal host/kdc1.example.com with kvno 3, encryption type AES-128 CTS mode
                with 96-bit SHA-1 HMAC added to keytab WRFILE:/etc/krb5/krb5.keytab.
      Entry for principal host/kdc1.example.com with kvno 3, encryption type Triple DES cbc
                mode with HMAC/sha1 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      Entry for principal host/kdc1.example.com with kvno 3, encryption type ArcFour
                with HMAC/md5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      Entry for principal host/kdc1.example.com with kvno 3, encryption type DES cbc mode
                with RSA-MD5 added to keytab WRFILE:/etc/krb5/krb5.keytab.
      kadmin: 
    4. kadmin を終了します。


      kadmin: quit
      
  16. (省略可能) NTP などのクロック同期メカニズムを使用して、マスター KDC のクロックを同期化します。

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

  17. スレーブ KDC の構成

    冗長性を確保するには、スレーブ KDC を必ず 1 つ以上インストールするようにしてください。 手順については、「スレーブ KDC を手動で構成する方法」を参照してください。