Linux の認証を Active Directory で行なう方法

対象プラットフォーム

前提条件

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 との認証の統合が可能となる。

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

設定内容

参考情報などに記載された手順に基づき、 PAM を利用して UNIX ホストにアクセスする際の認証を Active Directory 側で行うことが可能であることを確認した。 以下手順を示す。

1. Windows 2000 Server 側の構成

Windows 2000 側は、通常どおり Active Directory のドメインコントローラとして構成を行っておく。 テスト用のユーザ (今回は test1 という名前にした) を作成し、このユーザで正常にログオンなどができることを確認しておく。 Kerberos 認証を行うために、 NTP などを利用して時刻を同期しておくことも必要である。 DNS は名前解決を行うためにあると望ましいが必須ではなく、 IP アドレスを直接指定することも可能である。

なお、今回はドメイン名 krb5.com 、ドメインコントローラ (DC) 名は dcmed.krb5.com(172.21.168.29) という環境を構築して確認を行っている。 dcmed は、ルートドメインの DC であり、 DNS サーバでもある。

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

まずは以下のパッケージのインストールを確認する

更に Red Hat Linux 7.1J の設定によっては、セキュリティ対策のため外部からのアクセスが禁止されている場合があるため、 ipchains コマンドなどを用いて予め設定を確認しておく。 今回の環境では lokkit コマンドを利用して、 LAN 側の NIC を trust した。 trust した NIC 経由の通信についてはパケットフィルタは無効となるため、すべて許可される。

以下、 3, 4, 5 の設定を順不同で行う。

3. Linux 上の /etc/krb5.conf を修正する

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

Active Directory の場合、Kerberos のレルム(Realm)名として、ドメイン名が用いられるため、レルムに Active Directory 側のドメイン名を指定している。 また、 DC が kdc として機能するため、 kdc として、 dcmed を指定している。 なお、暗号形式としては des-cbc-md5 を指定する必要がある。

[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 = dcmed.krb5.com:88
#  admin_server = kerberos.example.com:749
  default_domain = krb5.com
 }

[domain_realm]
 .example.com = EXAMPLE.COM
 example.com = EXAMPLE.COM

[kdc]
 profile = /var/kerberos/krb5kdc/kdc.conf

[pam]
 debug = false
 ticket_lifetime = 36000
 renew_lifetime = 36000
 forwardable = true
krb4_convert = false

4. Linux 上の /etc/pam.d/system-auth を修正する

下線部が追加を行った部分になる。

これにより、 PAM による認証を行う際に Kerberos 認証が利用されるようになる。 ただし、以下の設定では sufficient や optional の指定を行なっているため、 Kerberos 認証が利用できなかった場合は、その他の方式を用いる設定としている。
なお、 PAM の設定によっては、特定のサービスについてのみ Kerberos 認証を有効とするなど、詳細な設定も可能である。文法の詳細などについては、 pam.conf(8) などを参照してほしい。

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        sufficient    /lib/security/pam_krb5.so
auth        required      /lib/security/pam_env.so
auth        sufficient    /lib/security/pam_unix.so likeauth nullok
auth        required      /lib/security/pam_deny.so

account     required      /lib/security/pam_unix.so

password    required      /lib/security/pam_cracklib.so retry=3
password    sufficient    /lib/security/pam_unix.so nullok use_authtok md5 shadow
password    required      /lib/security/pam_deny.so

session     required      /lib/security/pam_limits.so
session     required      /lib/security/pam_unix.so
session     optional      /lib/security/pam_krb5.so

5. Linux側でアカウントを作成する

アカウント名は、 Windows 側と同じ (この例ではtest1) とする。 パスワードを設定する必要はなく、単に以下のようにして作成するだけでよい (もちろん GUI などで作成しても構わない)。

#useradd test1

6. 動作の確認

以上で、 Linux 側にテスト用のアカウント (ここでは test1) で telnet や ssh などを用いてログインを行い、パスワードとして Windows 側の Active Directory で設定したものを入力することで、 Linux ホストへのログインが可能となっているはずである。

なお、 Linux 側のインストール方式によっては、 telnet や ssh が起動していない、もしくは起動しているが IP アドレスレベルでアクセスを拒否されている場合などがあるため、事前に Linux 上に存在するアカウントでログインができることを確認しておくとよい。

参考情報

注記・補足

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


Copyright (C) 1998-2009 TAKAHASHI, Motonobu
Last update: 2003-06-21 12:00:11 JST
webmaster@monyo.com