Windows 2000 マシンの認証を Linux 上の Kerberos サーバで行なう方法

対象プラットフォーム

前提条件

Active Directory は認証に Kerberos 5 を利用しているため、技術的には UNIX などで構築した汎用の Kerberos レルム (Realm) との相互接続性がある。 これにより、以下のようなことが可能になると考えられる。

  1. 既存の Kerberos レルムに Windows 2000 を参加させる
    UNIXとの認証の統合が可能になる。
  2. Windows 2000 の Active Directory を Kerberos 認証サーバ(KDC) として利用する
    Active Directory で UNIX ホストへアクセスする際の認証を行ったり、既存の Kerberos アプリケーションの認証を行ったりすることが可能となる。 特に Linux では、 PAM 経由で Kerberos 認証を利用することが可能であるため、この機能を用いることで簡易に Active Directory との認証の統合が可能となる。

以下当方で確認を行った際の具体的な設定手順について解説する。 なお今回は、以下のような環境にて検証を行った。

設定内容

参考情報などに記載された手順に基づき、Windows 2000 Professional のログオン時の認証を Linux で構築した Kerberos サーバ (KDC) で行なえることを確認した。以下手順を示す。なお、環境は以下のとおりである。

また Kerberos 認証を行うために、マシン間で NTP などを利用して時刻を同期しておくことも必要である。

1. Linux 側の環境を確認する

Linuxホスト上で以下のパッケージがインストールされていることを確認する。

インストールされていることを確認したら設定を開始する。 なお Kerberos 関連のパッケージは /usr/kerberos 以下にインストールされるため、デフォルトのパスには含まれていないことに注意すること。
更に 設定によっては、セキュリティ対策のため外部からのアクセスが禁止されている場合があるため、 ipchains コマンドなどを用いて予め設定を確認しておく。 今回の環境では lokkit コマンドを利用して、 LAN 側の NIC を trust した。 trust した NIC 経由の通信についてはパケットフィルタは無効となるため、すべて許可される。

2. Linuxホスト上で、Kerberosサーバの構成を行う

ここでは、Windows 2000 との相互接続性を検証するのが目的のため、 Kerberos サーバの構成は、必要最低限の設定のみ行っている。

Kerberosレルム名としては、 KRB5.COM という名称を設定している。

  1. Kerberosデータベースを作成する
    #/usr/kerberos/sbin/kdb5_util create -r KRB5.COM -s
    Initializing database '/var/kerberos/krb5kdc/principal' for realm 'KRB5.COM', master key name 'K/M@KRB5.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:←もう一度入力
    
  2. 管理用プリンシパルを作成する
    # /usr/kerberos/sbin/kadmin.local
    Authenticating as principal root/admin@KRB5.COM with password.
    kadmin.local:  ank root/admin
    WARNING: no policy specified for root/admin@KRB5.COM; defaulting to no policy
    Enter password for principal "root/admin@KRB5.COM": ←設定するパスワードを入力
    Re-enter password for principal "root/admin@KRB5.COM":←もう一度入力
    Principal "root/admin@KRB5.COM" created.
    kadmin.local:  quit
    
  3. /var/kerberos/krb5kdc/kadm5.acl に以下の行を追加する
    これは先ほど作成したプリンシパルにデータベースを操作する全ての権限を与える設定である。
    root/admin@KRB5.COM     *
    
  4. /etc/krb5.conf を構成する

    デフォルトのファイルに対して修正を行なった。
    以下下線部が最低限修正の必要な部分である。

    [logging]
      default = FILE:/var/log/krb5libs.log
      kdc = FILE:/var/log/krb5kdc.log
      admin_server = FILE:/var/log/kadmind.log
    
    [libdefaults]
      ticket_lifetime = 24000
      default_realm = KRB5.COM
      default_tkt_enctypes = des-cbc-md5
      default_tgs_enctypes = des-cbc-md5
      dns_lookup_realm = false
      dns_lookup_kdc = false
    
    [realms]
      KRB5.COM = {
      kdc = linux.krb5.com:88
      admin_server = linux.krb5.com:749
      default_domain = krb5.com
     }
    
    [domain_realm]
     .krb5.com = KRB5.COM
     krb5.com = KRB5.COM
    
    [kdc]
     profile = /var/kerberos/krb5kdc/kdc.conf
    
    [pam]
     debug = false
     ticket_lifetime = 36000
     renew_lifetime = 36000
     forwardable = true
     krb4_convert = false
    

設定が完了したら、以下のようにして、Kerberos サーバを起動する。

#/etc/init.d/krb5kdc start
#/etc/init.d/kadmin start

3. DNS サーバの設定を行なう

BIND の場合、以下のようなゾーンファイルを作成する。その他の DNS サーバでも、これに準じた設定を行なうこと。ログオンを行なうためには、以下に記載したSRVレコードが必須である。

$TTL	86400
$ORIGIN krb5.com

@       IN      SOA     linux.krb5.com. root.linux.krb5.com.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS      linux.krb5.com.

linux       	IN A    192.168.1.1
may		IN A	192.168.1.10

_kpasswd._tcp	IN SRV 0 100 464	linux
_kpasswd._udp	IN SRV 0 100 464	linux
_kerberos-adm._tcp	IN SRV 0 100 749	linux
_kerberos-adm._udp	IN SRV 0 100 749	linux

設定が完了したら、以下のようにして、 DNS サーバを起動する。

#/etc/init.d/named start

Windows 2000ホスト用のプリンシパルを追加する

プリンシパルの追加には kadmin.local コマンドを利用する。 ここでは、ユーザ名 test2 、ホスト名の FQDN が may.krb5.com の場合の例を示す。 なおパスワードは、両方とも pass に設定している。

# /usr/kerberos/sbin//kadmin.local -q "ank -pw pass test2"
Authenticating as principal root/admin@KRB5.COM with password.
WARNING: no policy specified for test2@KRB5.COM; defaulting to no policy
Principal "test2@KRB5.COM" created.
# /usr/kerberos/sbin//kadmin.local -q "ank -pw pass host/may.krb5.com"
Authenticating as principal root/admin@KRB5.COM with password.
WARNING: no policy specified for host/may.krb5.com@KRB5.COM; defaulting to no policy
Principal "host/may.krb5.com@KRB5.COM" created.

注意: ホスト名は、必ず FQDN で指定すること。例えば上記の例で may.krb5.com の代わりに may としてはいけない。また大文字と小文字は区別されるため、注意すること。

Windows 2000 側で各種設定を行う

Windows 2000 側の Kerberos の設定では、 ksetup というコマンドを利用する。 このコマンドは Support Tools に含まれているため、事前に Windows 2000 の CD-ROM に同梱されている Support Tools をインストールしておく必要がある。

 
C:\>ksetup /setdomain KRB5.COM
Setting Dns Domain

C:\>ksetup /addkdc KRB5.COM 192.168.1.1

C:\>ksetup /setmachpassword pass
Setting computer password

C:\>ksetup /mapuser * *
  1. 最初の ksetup /setdomain コマンドでは、参加する Kerberos レルムを設定する。
    この値は、このホストのDNSの設定におけるプライマリサフィックスとしても設定される。なおこの設定は、図1のように、システムのプロパティより確認できる。

  2. 図1: Kerberosレルム名の確認
  3. 次の ksetup /addkdc コマンドでは、 Kerberos レルムの KDC を設定する。
    これは Active Directory における DC に相当する。
    ここでは linux.krb5.com (192.168.1.1) を KRB5.COM レルムの KDC に設定している。 なお、ここは IP アドレスの代わりに名前で指定することも可能である。
  4. 更に、 ksetup /setmachpassword コマンドにより、 Windows 2000 マシンを Kerberos のレルムに参加させる際のパスワードを設定する。 ここで pass は、先ほどホストのプリンシパルを追加した際に用いたパスワードを指定する。
  5. 最後の ksetup /mapuser コマンドでは、 Windows 側のユーザと Kerberos 側のユーザとの対応付けを行っている。
  6. 次に、ローカルアカウントとして、Kerberos レルムにログオンするためのアカウントを作成しておく。
    ここでは Kerberos レルム上に test2 というプリンシパルがあり、 /mapuser コマンドで Windows 側の同名のローカルアカウントにマッピングを行なっているため、 test2 というローカルアカウントを作成する。パスワードは何でも良いが、ここでは実験のため、 Kerberos レルムの test2 プリンシパルとは別のパスワードにしておくとよいであろう。
  7. 最後に、 DNS サーバの設定を、先ほどの linux.krb5.com の IP アドレスに変更する。
  8. ここまで設定を行なったら、 Windows 2000 マシンを再起動する。
    以下の図2のように、ログオン先としてKerberosのレルムが選択可能になっているはずであるため、ログオン先として Kerberos レルムを選択し、アカウント名、パスワードに Kerberos レルム上に存在するプリンシパルで、対応するローカルアカウントが Windows 2000 側に作成されているプリンシパルもの (ここでは test2/pass) を入力してログオンを行なう。


図2: ログオン画面

Kerberos レルム側のパスワードでログオンができる筈である。また以下の画面からパスワードの変更も可能である。


図3: パスワード変更画面

参考情報

注記・補足

  1. 2003/07/06 HTML 文法の整形
  2. 2003/06/18 参考情報 URL の変更に追従、画像の整形
  3. 本文書は、筆者が独自に検証した結果を筆者の方で HTML 化して掲載しているものです。


Copyright (C) 1998-2009 TAKAHASHI, Motonobu
Last update: 2003-07-06 13:21:17 JST
webmaster@monyo.com