Debian(login)の認証をActive Directoryで行うには

環境:
・Windows2000 Server
・Debian 4.0r2

ここは、Windows2000 ServerとLinux(Debian)が混在している環境で、ユーザー管理の統一を目指し 設定した記録です。最終的には、winbindを検討していますがとりあえずloginをKerberosで行うように設定します。

Windows2000(Active Directory)の認証には、Kerberos5が使用されており、互換性(相互接続性)があるそうです。 そこで、Windows2000 Serverを認証サーバーとしDebian側のloginの認証に使用します。

Windows2000のActiveDirectoryは、事前に構築しておきます。[参考:Active Directoryの構成[Windows2000 Server]]

Debian側の環境は、libpam-krb5,krb5-userをインストールしました。当初、libpam-krb5のみで構築を試みましたが 認証の確認がうまく行えなかったため krb5-user を追加しました。

libpam-krb5、krb5-userのインストール

libpam-krb5のインストールを行います。

# aptitude install libpam-krb5

インストール中に認証サーバーの設定を行います。次の画面でKDC(Kerberos の認証サーバ)Windows2000 Serverを指定します。

例:kdc.bnote.net

KDCの指定

KDC同様にWindows2000 Serverを指定します。

KDCの指定

インストール時にドメインを設定していないと、レルムの設定が「.JP」になってしまうので、後でkrb5.confを修正します。
正しく設定していれば、以降の作業も修正する必要はありません。

krb5-userをインストールします。このインストール目的は、kinitやklistを使うことにあります。

# aptitude install krb5-user

インストールが完了したら、krb5.confの修正を行います。

krb5.confの設定

/etc/krb5.conを修正します。

ログに関する追加を次のようにします。

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

次にdefault_realmを変更します。「.JP」をWindows2000で指定したドメインへ設定します。

realmは大文字で指定するというルールがあるようですので次のように修正します。

[libdefaults]
    default_realm = BNOTE.NET

realmsの修正をします。「.JP = { 」の部分を修正します。

[realms]
    BNOTE.NET = {
            kdc = kdc.bnote.net
            admin_server = kdc.bnote.net
            default_domain = bnote.net
    }

domain_realmにbnoteを追加します。

[domain_realm]
    .bnote.net = BNOTE.NET
    bnote.net = BNOTE.NET

設定例

[logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log

[libdefaults]
    default_realm = BNOTE.NET    <- Windows2000 Serverに指定したドメインを大文字
    dns_lookup_realm = false
    dns_lookup_kdc = false

[realms]
    BNOTE.NET = {                       <- Windows2000 Serverに指定したドメインを大文字で
      kdc = kdc.bnote.net               <- Windows2000 Serverを指定
      admin_server = kdc.bnote.net      <- 修正
      default_domain = turbolinux.com   <- 修正
    }

[domain_realm]
    .kdc.bnote.net = BNOTE.NET   <- 修正
    kdc.bnote.net = BNOTE.NET    <- 修正

Kerberos認証ができるか確認

設定した内容でKerberos認証が行えるか確認します。kinitコマンドを次のように実行します。

パスワードの入力を求められるので、Windows2000 Serverに登録済みのパスワードを入力します。

# kinit administrator@BNOTE.NET
Password for administrator@BNOTE.NET:

Kerberos認証の特性上、クライアントと認証サーバの時刻が一致している必要があります。(チケットの関係) 時刻が一致していない場合、次のようなエラーが表示されます。

kinit(v5): Clock skew to great while getting initial credentials

認証サーバーとの日時を合わせ kinit を実行します。認証が行えれば、何も表示されないでプロンプトに戻ります。

次にKerberosチケットの取得状態を確認します。

klistコマンドを実行し、チケットが取得できているかを確認します。

# klist
Ticket cache: FILE:tmp/krb5cc_0
Default principal: administrator@BNOTE.NET

Valid starting     Expires            Service principal
01/28/08 10:12:12  01/28/08 20:12:16  krbtgt/BNOTE.NET@BNOTE.NET
        renew until 01/29/08 10:12:12


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

認証できているようなので、pamの設定を行います。

PAMの設定

loginの認証にKerberosを使用するよう設定します。

/etc/pam.d/ディレクトリ内のcommon-***にKerberos認証を追加します。

/etc/pam.d/common-authに次のように追加します。

auth     sufficient  pam_krb5.so     <- 追加
auth     required    pam_unix.so

/etc/pam.d/common-sessionに次のように追加します。

session  optional    pam_krb5.so     <- 追加
session  required    pam_unix.so

以上でPAM(login)の設定は終了です。

検証

Windows2000 Server上に「test」ユーザーを作成します。

次にDebian上で次のコマンドを実行しユーザーを作成します。

# useradd test

Debian側のloginを「test」で行い、Windows上で設定したパスワードでログインできることを 確認します。

参考サイト

Turbolinux FUJI のログイン認証を Active Directory で行なう

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