3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(Linux)SambaでActiveDirectoryと連携する

CentOS5 上の Samba 3.0.33 ですが、Windows の ActiveDirectory と連携する方法です。

(SambaサーバをActiveDirecotryのメンバサーバとします)

なお、ドメインの情報は下記のとおりとします。

ドメイン名: hogedomain.jp

ドメインコントローラ1:hogedomaindc01.hogedomain.jp

ドメインコントローラ2:hogedomaindc02.hogedomain.jp

DNSサーバはドメインコントローラ上に構築。(ActiveDirectory統合)

まず /etc/krb5.conf を触ってActiveDirectory 認証のための Kerberos クライアントを設定します。

# vi /etc/krb5.conf

[libdefaults]

default_realm = HOGEDOMAIN.JP ←大文字にします。

[realms]

HOGEDOMAIN.JP ={ ←大文字にします。

kdc = hogedomaindc01.hogedomain.jp ←ドメインコントローラを指定します。

kdc = hogedomaindc02.hogedomain.jp ←ドメコンが複数台ある場合はこのように指定。

admin_server = hogedomaindc01.hogedomain.jp

default_domain = hogedomain.jp

}

[domain_realm]

.hogedomain.jp = HOGEDOMAIN.JP ←大文字にします。

hogedomain.jp = HOGEDOMAIN.JP ←大文字にします。

また、/etc/hosts ファイルに Samba サーバー自身のエントリを追加します。

# vi /etc/hosts

10.0.0.50 sambasv.hogedomain.jp sambasv

/etc/resolv.conf ファイルにDNSサーバと、ドメイン名を指定します。

#vi /etc/resolv.conf

nameserver 10.0.0.10

nameserver 10.0.0.11

search hogedomain.jp

また、下記のように smb.conf を設定します。

# vi /etc/samba/smb.conf

[global]

dos charset = CP932

display charset = UTF-8

workgroup = HOGEDOMAIN ←ドメインのNetBIOS名を大文字で指定

server string = Samba Server Version %v

passdb backend = tdbsam

load printers = No

disable spoolss = Yes

hosts allow =

cups options = raw

netbios name = SAMBASV ←sambaサーバ名

security = ads ←Active Directoryドメインで認証を行う

realm = HOGEDOMAIN.JP ←ActiveDirectoryのFQDNを大文字で指定

[homes]

comment = Home Directories

path = %H/samba

read only = No

browseable = No

vfs objects = recycle

recycle:repository = .recycle

recycle:keeptree = no

recycle:versions = yes

recycle:touch = no

recycle:maxsize = 0

recycle:exclude = *.tmp ~$*

次に kinit コマンドで、管理者としてActiveDirectoryにアクセスしKerberos認証を行います。

# kinit administrator@HOGEDOMAIN.JP ←大文字にします。

Password for administrator@HOGEDOMAIN.JP: ←Windowsドメインのパスワードを入力します。

認証に失敗すると、下記のように表示されりします。

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

その場合はLinuxの時刻がドメインコントローラとずれてないか確認しましょう。

ケルベロス認証は時刻をキーにしているので、ズレていると認証がうまくいきません。

下記ntpdateコマンドでドメインコントローラに同期すると便利です。

# ntpdate ドメインコントローラIP

19 Apr 17:00:20 ntpdate[14179]: step time server 10.10.0.11 offset -579.279315 sec

うまく認証できればプロンプトに戻ります。取得した Kerberos チケットは、下記のように klist コマンドで確認できます。

[root@sambasv ~]# klist

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: administrator@HOGEDOMAIN.JP

Valid starting Expires Service principal

09/16/10 13:50:44 09/16/10 23:50:48 krbtgt/HOGEDOMAIN.JP@HOGEDOMAIN.JP

renew until 09/17/10 13:50:44

09/16/10 13:51:20 09/16/10 23:50:48 hogedomaindc02$@HOGEDOMAIN.JP

renew until 09/17/10 13:50:44

Kerberos 4 ticket cache: /tmp/tkt0

klist: You have no tickets cached

そして、net ads join でActiveDirectoryドメインに参加します。

[root@sambasv ~]# net ads join -U Administrator ←ドメイン参加権限を持ったユーザを指定します

Administrator's password: ←上記のユーザのパスワードを指定します。

Using short domain name -- HOGEDOMAIN

Joined 'SAMBASV' to realm 'HOGEDOMAIN.JP'

これで、ドメインコントローラ上で「Active Directory ユーザーとコンピュータ」から確認すると、SAMBASV がコンピュータの所に追加されているはずです。

SMBサービスを再起動します。

# service smb restart

後は、sambaサーバ上にWindows側からアクセスを行うユーザーを登録します。

(※認証を行うのをADにしているだけなので、Unixユーザは必要となります。ただし、Winbindを使うとユーザ情報を直接ADから取得するのでこの作業は不要になります。windindを使ってユーザ情報もADから取得する方法については、(Linux)ActiveDirectory連携したSambaサーバでWinクライアントからSamba共有フォルダにシングルサインオンを参照。

)

# useradd -m hogeuser01

これでドメイン参加してるWindows端末で、上記で登録したユーザ名(hogeuser01)でログインし、SambaサーバにExplorerにアクセスする共有フォルダが見えるはずです。

(ドメインの別ユーザでログインすると認証ダイアログが出てきます。その時はユーザ名に、hogedmain\hogeuser01 と、ドメイン名を明示しないといけないのが注意点です。)

余談ですが、設定中にどうもsambaが落ちてるような感じでした。

restart させると失敗します。

[root@sambasv ~]# service smb restart

SMB サービスを停止中: [失敗]

NMB サービスを停止中: [ OK ]

SMB サービスを起動中: [ OK ]

NMB サービスを起動中: [ OK ]

sambaのログを見てみると、下記のようになっていました。

# /var/log/samba/smbd.log

[2010/09/16 15:44:13, 0] lib/util.c:log_stack_trace(1759)

BACKTRACE: 7 stack frames:

#0 smbd(log_stack_trace+0x2d) [0x4a9bbd]

#1 smbd(smb_panic+0x5d) [0x4a9ced]

#2 smbd [0x45ac10]

#3 smbd(initialize_password_db+0xe) [0x45ac5e]

#4 smbd(main+0x655) [0x587135]

#5 /lib/libc.so.6(__libc_start_main+0xdc) [0x887e9c]

#6 smbd [0x2ad871]

[2010/09/16 15:44:13, 0] lib/fault.c:dump_core(181)

dumping core in /var/log/samba/cores/smbd

原因は、/etc/samba/smb.conf の passdb backend の値が正しいもので無かったからのようです。

解明するのに結構時間かかりましたよ。。

結構設定に時間かかりました。

sambaはマイナーバージョンでも結構設定変わったりするらしいので大変です。

参考:

Samba で Active Directory を使った認証を実現するには

@IT:Samba 3.0の全貌 改訂版[後編]

Active DirectoryとLinuxの認証を統合しよう:第5回 SambaのWinbind機構による認証統合[1]|gihyo.jp

Windowsドメインのパスワードで Linuxにもログインできるようにする

SambaとActiveDirectory - あるシステム管理者の日常

[samba-jp:20065] Re: samba-3.0.28でwinbindが起動できない。

Turbolinux 11 Server: ユーザーガイド Active Directory への参加

smb.conf

Samba サーバのタイプと smb.conf ファイル