たびたび、どうもです。Sambaお留守番担当のdtonokiです。
SambaサーバはActiveDirectoryのメンバーサーバーとなる機能があるのですが、Windows環境やらなにやらで、正常にメンバーとなれない問題が発生する場合があります。
設定の詳細は他の良いサイトにあるので、簡単に書きますと以下です。
設定ファイルは以下の2種類で、それぞれ追加します。
/etc/samba/smb.conf
----------------------------------------
workgroup = SUPPORTADS3
security = ADS
realm = SUPPORTADS3.MIRACLELINUX.COM
password server = 10.1.202.2
----------------------------------------
/etc/krb5.conf
-------------------------------------
[realms]
SUPPORTADS3.MIRACLELINUX.COM = {
kdc = 10.1.202.2:88
}
-------------------------------------
コマンドとしては以下を実行するってーと、うまくいくはずなんですが。。。
# net ads join -U Administrator
どうも、途中でとまってしまいます。
あと、現状で判明していることは、以下の通り。
・マシンアカウントの追加はできている。
・kinitでKerberosのticket取得は出来ている。
で、どこで止まっているか見るためにデバッグオプションをつけて実行してみます。
# net ads join -d 10 -U Administrator
で、でてきたログが以下の通り
-----------------------------------------
<略>
[2006/11/21 16:09:01, 3] libsmb/clikrb5.c:ads_cleanup_expired_creds(323)
Ticket in ccache[MEMORY:net_ads] expiration Wed, 22 Nov 2006 02:09:17 GMT
[2006/11/21 16:09:01, 10] libsmb/clikrb5.c:ads_krb5_mk_req(413)
ads_krb5_mk_req: Ticket (win2k3ee1$@SUPPORTADS3.MIRACLELINUX.COM) in ccache (MEMORY:net_ads) is valid until: (Wed, 22 Nov 2006 02:09:17 GMT - 1164128957)
[2006/11/21 16:09:01, 10] libsmb/clikrb5.c:get_krb5_smb_session_key(514)
Got KRB5 session key of length 16
[2006/11/21 16:09:11, 10] lib/util.c:name_to_fqdn(2696)
name_to_fqdn: lookup for ml40sp1smb failed.
[2006/11/21 16:09:11, 0] libads/ldap.c:ads_add_machine_acct(1507)
Warning: ads_set_machine_sd: Unexpected information received
[2006/11/21 16:09:11, 5] libads/ldap_utils.c:ads_do_search_retry(56)
Search for (objectclass=*) gave 1 replies
-----------------------------------------
正常な場合は以下と続きます。
-----------------------------------------
[2006/11/21 16:09:12, 3] libads/ldap.c:ads_workgroup_name(2657)
Found alternate name 'SUPPORTADS3' for realm 'SUPPORTADS3.MIRACLELINUX.COM'
-----------------------------------------
で、ads_do_search_retry()とads_workgroup_name()の間で止まっていると考えるとソースを見てみるしかありませんので、ソースツリーを用意します。
今回はML40用のsamba-3.0.20b-1AXなのでSRPMを入手して以下のコマンドを実行します。
# rpm -ivh samba-3.0.20b-1AX.src.rpm
# rpmbuild -bp /usr/src/rpm/SPECS/samba.spec
これで、/usr/src/rpm/BUILD/samba-3.0.20b/source以下にソースツリーができます。
tagジャンプしないと見づらいのでタグを作成します。
# cd /usr/src/rpm/BUILD/samba-3.0.20b/source
# find -type f | xargs ctags -a
で、ソースを見る環境はできましたので、実際にnet_ads.cを見ていきます。
まず見る場所はutils/net_ads.cのnet_ads_join()関数です。
この中のだいたいの処理の流れと先ほどのデバッグ情報を確認してみると、以下のような状態だと思われます。
------------------------------------------------
net_ads_join()
ads_join_realm()
ads_find_machine_acct()
ads_add_machine_acct()
ads_init_mods()
ads_mod_str()
ads_gen_add()/ads_gen_mod
ads_set_machine_sd()<---OK
ads_domain_sid()
ads_do_search_retry()<--OK
ads_set_machine_password()<--?
ads_krb5_set_password()<--?
ads_workgroup_name()<--成功している時の次の処理
------------------------------------------------
OKとしているのはソースとDEBUGにて出力された処理が一致している場所で、ここまでは処理が到達していると考えることができます。
で、問題は成功している時に到達している地点との間にある、ads_set_machine_password()からの一連の処理です。
ここら辺りから核心なのでは、と推測し次ぎへ続くのでした。
うー今日は徹夜か!?
最近のコメント