login,samba等の認証,ユーザー管理をActive Directoryで行う

Debian(login)の認証をActive Directoryで行うには」でKerberosの仕組みがなんとなくわかりました。

Active Directory + PAM + Kerberosでは、Linux側にユーザーを追加しておく必要がありましたが winbindを使用することでユーザー管理をWindowsのみで行うことができます。

ただし、私が構築した環境ではWindows側からSambaを使用する際、IPアドレスでしか使用できていません。

環境および注意点

環境

  • Windows2000 Server
  • Debian 4.0r2 [パッケージ:krb5-user , samba , winbind]

注意点

  • 各サーバーの日時を合わせておく。(Kerberos認証を行うため)

Windows2000のActiveDirectory構築

認証サーバーとなるWindows2000 ServerのActiveDirectoryを構築します。
[参考:Active Directoryの構成[Windows2000 Server]]

Debianの準備 krb5-user

krb5-userをインストールします。

# aptitude install krb5-user

インストールが完了したら、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にドメインが設定されています。 設定されていない場合、Windows2000で指定したドメインへ設定します。

realmは大文字で指定するというルールがあるようですので次のようになっているのを確認します。

[libdefaults]
    default_realm = BNOTE.NET

realmsにdefault_domain = bnote.netを追加します。

[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    <- 修正

Debianの準備 samba,winbind

sambaおよびWinbindをインストールします。

# aptitude install samba

// WORKGROUP名の設定が行われる

# aptitude install winbind

Winbindを使用して認証が行えるようにsmb.confを修正します。(/etc/samba/smb.conf)

smb.confのグローバルセクションを次のように修正します。

workgroup = BNOTE
realm = BNOTE.NET
security = ads
#netbios name = DEP         <- あるとエラーになる
idmap uid = 10000-50000
idmap gid = 10000-50000
winbind cache time = 3
winbind separator = @
winbind use default domain = yes
template homedir = /home/%U
template shell = /bin/bash
password server = kdc.bnote.net
encrypt passwords = true
obey pam restrictions = yes 

nsswitchを修正しユーザーの問い合わせをWinbindになるよう修正します。(/etc/nsswitch.conf)

passwd: compat winbind
shadow: compat winbind
group: compat winbind 

WinbindとSambaを再起動します。

# /etc/init.d/samba restart
# /etc/init.d/winbind restart

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

以上で認証の確認は終了です。

Winbindの

Active Directory ドメインに参加

次のように net コマンドを実行し、Linuxマシンを Active Directory ドメインに参加させます。

# net ads join
Using short domain name -- BNOTE
Joined 'DEP' to realm 'BNOTE.NET'

次のコマンドでドメインへ参加できているか確認します。

# net ads testjoin
Join is OK

Windows2000 ServerのActive Directory ユーザーとコンピュータでも確認することができます。
[Active Directory ユーザーとコンピュータ] -> Computers(ツリー)

参加したドメインの情報を確認

次のコマンドを実行することで、参加したドメインの情報を取得できます。

# net ads info
LDAP server: 192.168.123.105
LDAP server name: kdc.bnote.net
Realm: BNOTE.NET
Bind Path: dc=BNOTE,dc=NET
LDAP port: 389
Server time: The, 29 Jan 2008 18:27:06 JST
KDC server: 192.168.123.105
Server time offset: 7-22

次のコマンドを実行することで、参加したドメインのユーザーを取得できるか確認します。

# wbinfo -u
administrator
guest
krbtgt
bnote

次のコマンドを実行することで、参加したドメインのグループを取得できるか確認します。

# wbinfo -g
BUILTIN@administrator
BUILTIN@users
domain admins
domain users

次のコマンドを実行することで、RPCによる動作確認をします。

# wbinfo -t
checking the trust secret via RPC calls succeeded

次のコマンドを実行することで、Windows上に作成したユーザーの認証が行えるか確認します。 (ユーザーは、あらかじめ作成しておきます。ここでは、ユーザー名をbnoteとしています。)

# wbinfo -a bnote%パスワード
plaintext password authentication succeeded
challenge/response password authentication succeeded

ユーザーID、所属グループを確認します。

# id bnote
uid=10000(0001) gid=10002(domain users) groups=10002(domain users)

PAMの設定

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

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

/etc/pam.d/common-authに次のように追加します。use_first_passを 指定することで、最初に入力されたパスワードを使用するように指定しています。

auth    sufficient      pam_winbind.so    <- 失敗した場合、次のpam_unixで認証を行う
auth    required        pam_unix.so nullok_secure use_first_pass

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

account    sufficient      pam_winbind.so
account    required        pam_unix.so

/etc/pam.d/common-sessionに次のように追加します。これは、Winbindを利用することで ユーザー情報は作成されるのですが、ホームディレクトリは作成されません。PMAを経由するアプリケーションは 以下の設定で、ログイン時にホームディレクトリが作成されるようになります。

session  required    pam_unix.so
session  required    pam_mkhomedir.so skel=/etc/skel umask=0022

また、smb.confに「obey pam restrictions = yes」を設定することでsambaへアクセスした際にも ホームディレクトリを作成されるようになります。

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

参考サイト

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

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

構築中に発生した問題

Active Directoryへの参加に失敗する場合、smb.confのnetbios nameとhostsの記述を確認する。

# net ads join
Using short domain name -- BNOTE
Failed to set servicePrincipalNames. Please ensure that
the DNS domain of this server matches the AD domain,
Or rejoin with using Domain Admin credentials.
Disabled account for 'BNOTE' in realm 'BNOTE.NET'

wbinfo -t でエラーが発生する場合、smb.confのnetbios nameが問題。コメントアウトで対応。