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が問題。コメントアウトで対応。