samba + LDAPでPDCを作ろう!(その2)
鬱陶しい梅雨の季節がようやく明けて、夏本番の湿気にさらに鬱陶しい日々を過ごしているtodaです。
こんにちわ。
さて、先月ぶちあげた新企画の第2段です。
今回から、本格的にsamba + LDAP PDCの環境を構築します。
前回の最後に示した手順をおさらいします。
1. PDC、メンバサーバに必要なパッケージをインストールする。
2. PDCのLDAPサーバを設定する。
3. PDC、メンバサーバのUNIXアカウントの解決するために、nss_ldapを設定する。
4. PDC、メンバサーバのsambaを設定する。
5. LDAPサーバににwindowsドメインの情報、アカウント情報を作成する。
6. メンバサーバをwindowsドメインに参加。
今回は前半の3.までの手順を紹介します。
1. PDC、メンバサーバに必要なパッケージをインストールする。
まず最初にやるべきことはパッケージのインストールです。(このシリーズではCentOS 5の場合をベースにしてます)
必要なパッケージは以下の通りです。
PDC | nss_ldap, samba, openldap, openldap-servers, smbldap-tools |
---|---|
メンバサーバ | nss_ldap, samba, openldap |
smbldap-tools以外のパッケージはCentOS 5標準で用意されていますので、何も考えずyumでinstall可能です。
# yum install nss_ldap samba openldap openldap-servers
PDCのアカウント情報をopenldapに格納するためのコマンドラインツールである、smbldap-toolsはCentOS 5標準では提供されていません。外部リポジトリであるDAG(http://dag.wieers.com/)からインストールします。
DAGのリポジトリ定義があるrpmをダウンロードして、インストールします。
# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpm
これでDAGのリポジトリ定義がインストールされますので、yumでsmbldap-toolsをインストールできるようになります。
# yum install smbldap-tools
(DAGに定義されているパッケージの量が多いので、依存関係の解決に多少時間がかかります)
2. PDCのLDAPサーバを設定する。
PDCのLDAPサーバにsamba PDC用の設定を行います。
openldapの設定ファイルは/etc/openldap/slapd.confですので、こちらをエディタで修正します。
1) samba用スキーマのinclude
samba PDCに必要な情報の形式(名称・型など)を定義しているスキーマファイルが/usr/share/doc/samba-3.0.x/LDAP/samba.schemaにありますので、これをincludeします。
include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/nis.schema include /usr/share/doc/samba-3.0.33/LDAP/samba.schema ← 追加
2) suffix, rootdn, rootpwの設定
suffixにはドメインを","で分割したものを設定します。
今回はTRCの社内内部ドメインである"zoo.tricorn.co.jp"を採用します。
LDAPのスーパーユーザに相当するrootdnとそのパスワードであるrootpwを設定します。
今回は、rootdnにはsuffixにcn=rootを追加したものを設定しました。
rootpwにはslappasswdコマンドの結果をコピーします。
database bdb suffix "dc=zoo,dc=tricorn,dc=co,dc=jp" rootdn "cn=root,dc=zoo,dc=tricorn,dc=co,dc=jp" rootpw {SSHA}QPp+EZkHQSrlhtBHDNk1vyHPX70+wQnD
$ slappasswd
New password: ← パスワード入力
Re-enter new password: ← パスワード入力 (もう一度)
{SSHA}GWu1EChE8y8eG+pFcKUUkvo2OeNhDjQY ← この結果をrootpwに記載する。
3) indexの設定
検索のパフォーマンスを保つためindexを追加します。
# Indices to maintain for this database index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub index sambaGroupType eq ← 追加 index sambaSID eq ← 追加 index sambaSIDList eq ← 追加 index uniqueMember eq ← 追加
4) ここで一度ldapサーバを起動します。
/var/lib/ldapにデータベースファイルが作成されますが、次回起動時に"slapd の設定ファイルをチェック中: bdb_db_open: Warning – No DB_CONFIG file found in directory /var/lib/ldap"と警告が出てしまうので、一度停止して、DB_CONFIGのサンプルファイルをコピーして、再起動します。
#/etc/init.d/ldap start
#/etc/init.d/ldap stop
# cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap:ldap /var/lib/ldap/DB_CONFIG
#/etc/init.d/ldap start
5) suffixで指定したDN: “dc=zoo, dc=tricorn, dc=co, dc=jp"のオブジェクトを登録します。
登録用のtop.ldifファイルを用意します。
dn: dc=zoo,dc=tricorn,dc=co,dc=jp objectClass: top objectClass: dcObject objectClass: organization dc: zoo o: zoo
ldapaddでインポートします。
$ ldapadd -h localhost -D "cn=root,dc=zoo,dc=tricorn,dc=co,dc=jp" -x -W < top.ldif
Enter LDAP Password:
adding new entry "dc=zoo,dc=tricorn,dc=co,dc=jp"
インポートできたかどうかをldapsearchで確認します。
$ ldapsearch -h localhost -s sub -b "dc=zoo,dc=tricorn,dc=co,dc=jp" -D "cn=root,dc=zoo,dc=tricorn,dc=co,dc=jp" -x -W
Enter LDAP Password:
# extended LDIF # # LDAPv3 # base with scope subtree # filter: (objectclass=*) # requesting: ALL # # zoo.tricorn.co.jp dn: dc=zoo,dc=tricorn,dc=co,dc=jp objectClass: top objectClass: dcObject objectClass: organization dc: zoo o: zoo # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
6) アクセス権の設定
LDAPサーバはアカウント情報の集まりですので、アクセス権による保護が必要です。
今回は、各メンバサーバはDN: cn=domainserversでログインすることにして、そのDNに対して参照権限を与えることにします。
まず、DN: cn=domainserversというDNを登録するために、登録用のdomainservers.ldifファイルを用意します。
単純にLDAPにログインするためだけのアカウントですので、objectClassは"simpleSecurityObject"として、DNとパスワードだけを登録します。
dn: cn=domainservers,dc=zoo,dc=tricorn,dc=co,dc=jp objectClass: top objectClass: organizationalRole objectClass: simpleSecurityObject cn: domainservers userPassword:{SSHA}BkJu7qTfY9QoCBQH7GWVfWcqSKgZdtLb
先ほどと同じく、domainservers.ldifをldapaddでインポートします。ldapsearchで確認してください。
$ ldapadd -h localhost -D "cn=root,dc=zoo,dc=tricorn,dc=co,dc=jp" -x -W < domainservers.ldif
DNの登録が済んだら、slapd.confにアクセス権の設定を追加します。
access指定を2つ追加します。
# Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # access to dn.base="" by * read # access to dn.base="cn=Subschema" by * read # access to * # by self write # by users read # by anonymous auth # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! access to attrs=userPassword by self write by anonymous auth access to * by dn="cn=domainservers,dc=zoo,dc=tricorn,dc=co,dc=jp" read
最後にldapサーバを再起動して、DAPサーバのセットアップは完了です。
3. PDC、メンバサーバのUNIXアカウントの解決するために、nss_ldapを設定する。
PDC自身およびメンバサーバで、UNIXアカウントの解決にLDAPを参照させるために必要なnss_ldapを設定します。
設定ファイルは/etc/ldap.confで、host, base, binddn, bindpw, bind_policyを設定します。
host localhost base dc=zoo,dc=tricorn,dc=co,dc=jp binddn cn=domainservers,dc=zoo,dc=tricorn,dc=co,dc=jp bindpw xxxxxx (cn=domainserversのパスワード: 平文で) bind_policy soft
bind_policyの設定はちょっとしたTipsです。
デフォルトのhardだと、ldapサーバからの応答が無い時にリトライを繰り返しますので、長い時間待たされてしまうことがあります。
softを指定することでリトライすることなくすぐに失敗扱いとなりますので、、処理を継続し
最後に/etc/nsswitch.confのpasswd,shadow,groupの各行に"ldap"を追加すればOKです。
# vim /etc/nsswitch.conf passwd: compat ldap shadow: compat ldap group: compat ldap
実際にldapサーバが参照されているかどうかは、getentコマンドをpasswd, shadow, groupそれぞれを引数にして実行して、エラーが無いこと、ldapサーバへのアクセスがあることを確認しましょう。(ldapサーバのログで確認)
# getent passwd
# getent shadow
# getent group
以上で、各メンバサーバがUNIXアカウントの情報を、PDC(LDAP)サーバに参照することができるようになります。
今回はここまで。
次回はいよいよ、sambaでWindowsドメインを構築して、メンバサーバをドメインに参加させるところまでいきます。乞うご期待!
ディスカッション
コメント一覧
ここを参考にしてsambaをドメインマスターにしました。大変参考になり助かりました。
近い内にホームページで設定方法をアップする予定ですが、その際、リンクさせていただきます。