CentOS 5 で Samba を PDC にする

まえがき

ありがちなネタですが Samba 3 + OpenLDAPLinux Box を PDC にしてみました。目新しいことは書いてません。

特に以下の2サイトを参考に設定しました。

前者はミラクル・リナックスの小田切さんのお書きになった記事で,このとおりに Step by step で進んでいくと,Samba による PDC を立ち上げることができます。今回はほぼ前者の記事の手順を踏襲しましたが,時代が進んで変わった部分,CentOS の場合にどうしたか,という差分についてのみ触れます。

環境は,CentOS 5 の VMware Server 環境上に NAT ネットワークを構築し,ゲスト OS として CentOS 5(PDC),Windows 2000, Windows XP をインストールしてテストしました。

OpenLDAP まわり

Samba のスキーマとしては /usr/share/doc/samba-3.0.xxx/LDAP/samba.schema を /etc/openldap/schema にコピーして使いました。直接指定してもいいんでしょうけど。

記事中には特に言及されていませんが,OpenLDAP サーバがバックエンドとして用いる BDB の設定ファイルをおいておかないと slapd の起動時に文句をいわれてしまいます。/etc/openldap/DB_CONFIG.example を「/var/lib/ldap/DB_CONFIG」にコピーします(参考→【http://www.ie.u-ryukyu.ac.jp:16080/howto/index.php?Software%2FOpenLDAP#de286edd】)。

smbldap-tools まわり

smbldap-tools を配布していた idealx のサイトはもうありません。対応するページといえば,【IDX-smbldap-tools download | SourceForge.net】かな。ちなみに sourceforge には smbldap-tools の追加スクリプトプロジェクト【SMBLDAP-TOOLS Addons】があります。

私の場合は,samba パッケージに付属の smbldap-tools を使いました。といってもデフォルトではサーチパスにインストールされていないので,/usr/share/doc/samba-3.0.xxx/LDAP/smbldap-tools-0.9.2/ 以下に移動し,Makefile を適宜書き換えて(デフォルトがすごい内容になってるんですもの)make install しました。

prefix=/usr
sysconfdir=/etc

に書き換えると RedHat ぽいインストール先になります。以上の手順に沿うと,記事中で smbldap-HOGEHOGE.pl となっているところの末尾の「.pl」は指定する必要がありません。

あと必要な Perl モジュールをインストールします。Net::LDAP, Crypt::SmbHash, Unicode::MapUTF8 あたりです(/usr/bin/smbldap_tools.pm の先頭をみるとわかります)。Unicode::MapUTF8 は utf8 か Encode モジュールを使えば必要なくできそうですが,やっていません。

[ThinkIT] 第3回:NT4.0→Samba3.0への移行(2) (4/4)】の「smbldap-tools の設定」で書かれている設定ファイルの場所,指定の仕方が変更になっています。設定ファイルは /etc/smbldap-tools/smbldap.conf と /etc/smbldap-tools/smbldap_bind.conf に分散しており,設定子の先頭に「$」をつける必要はありません。

samba の設定

Windows95/98/Meはドメイン・ログオンするのにSamba PDC上で何も設定が必要ないが、SambaとWindowsNT/2000/XP/2003をドメイン・メンバに加える場合は、PDCマシンの上でドメイン・メンバ・マシンのマシンアカウントを作成する必要がある。

[ThinkIT] 第5回:Sambaドメインに参加 (1/3)

とありますが,smb.conf に「add machine script」が適切に設定されていれば,手作業でマシンアカウントを登録する必要はありません。Windows マシンからのドメインへの参加時に自動的にマシンアカウントが生成されます。

はまりどころ

OpenLDAP の管理者 DN(識別子)が記事中ちょっとブレたりしてるんですが*1,ActiveDirectory に習い,

uid=Administrator,ou=Users,dc=hoge,dc=example,dc=com

で統一しました。

ユーザマネージャ,サーバマネージャは Windows 2000 SP4 から展開して取得する方法もあるんですが,面倒だったのでWindows NT 4.0 用のものを取得しました。英語版になっちゃいますけど。

最終的にドメインユーザを登録して Domain Controller として利用する場合,前回,前々回の日記で書いたように pam_mkhomedir を /etc/pam.d/system-auth に設定するほうがよいでしょう(設定しなくても NETLOGON 共有と profiles 共有が生きていれば,一応のログインはできます)。

鼻唄まじりに記事どおりにやっていたらうまく smb が立ち上がらなかったりしましたが,その場合なにかの手順や設定がちゃんとできていないのでしょう。私の場合,nsswitch.conf に ldap を追加するのを忘れていたのがハマった原因でした。

RedHat 系の LDAP サーバ起動順の不具合

nsswitch.conf で ldap を指定している場合,messagebus (dbus-daemon) も ldap 経由で情報を得ようとします。ここで問題になるのが,/etc/rc.d で ldap より先に messagebus が指定されているため,システム起動時に messagebus の段階でほぼ halt 状態になってしまうことです(参考→【ブート時に udev が LDAP (or NIS) を見に行って帰ってこない - ドレッシングのような】)。対策として 2 通りあります。

私はシステムへの影響が少なそうな後者を選びました。/etc/ldap.conf*2 に,

bind_policy soft 

という設定を付け加えました。これで無事すんなりシステム起動するようになりました。

おわりに

*1:具体的には【[ThinkIT] 第3回:NT4.0→Samba3.0への移行(2) (3/4)】の「ldap admin dn」のところが cn=Manager, ... になってるんですが,後述されている smb.conf の例からいって記述ミスと思います

*2:/etc/openldap/ldap.conf とは別物です。まぎらわしい。