【新連載】samba + LDAPでPDCを作ろう!

todaLDAP, nss_ldap, PDC, samba, TDB, windows, ドメイン, ファイルサーバ, 自宅ネットワーク

6月も下旬になって、ようやく、雨の季節になりましたね。
いや、嬉しいわけでもなんでもなく、鬱陶しいだけですが。
こんにちわ。todaです。

今回のネタは自宅ネットワークにwindowsドメインを立ち上げたので、その記録を紹介します。
といっても、ただのPDCではつまらないので、ユーザデータベースを内部形式であるTDBではなく、LDAPにしました。


一応、念のため。おさらいしましょう。
windowsのファイル共有でおなじみのファイルサーバ(メンバサーバ)は、アカウント情報を一元管理するPDC(プライマリドメインコントローラ)と呼ばれる管理サーバに所属することで、個々のメンバサーバにアカウントを登録することなく、PDC上のアカウントを利用することができます。
このPDCによって構成されるサーバのグループを(windows)ドメインと呼びます。ちなみにPDCが存在しない場合はワークグループと呼ばれます。

windowsファイル共有をUNIX上でエミュレートするソフトとしてのド定番ソフトsambaは、ファイルサーバはおろか、PDCとして動作することも可能です。今回はsambaだけでwindowsドメインを構築します。

さて、sambaによるwindowsドメインの構築を行うとき、運用上の最大の問題はアカウント管理です。
windows共有で使うwindowsアカウントは当然として、sambaがUNIX上で動作している以上、ファイルシステムへのアクセス字にはUNIX上のアカウントによるパーミッションチェックが必要になるため、UNIXアカウントも登録しなければなりません。

この管理がゴチャゴチャになっていると、windows共有の認証は通っているはずなのに、ファイルにアクセスできない(単にUNIXアカウントが無かったり、ファイルのパーミッションチェックに失敗している)ということになります。

アカウント管理の方法としては、sambaの内部形式であるTDBが一般的ですが、これは単純なローカルファイルであり、また、UNIXアカウントも/etc/passwdというこれも単純なローカルファイルであるため、各メンバサーバごとにwindowsアカウントと、UNIXアカウントを登録しなければらなず、また、変更があった場合も各サーバごとに変更を反映させる必要があります。

この問題を解決するための手段として、ユーザデータベースをLDAPサーバに格納して、windowsアカウントも、UNIXアカウントもそこに格納するうという方法があります。

この構成の場合、クライアントがメンバサーバのwindows共有にアクセスを行うと、メンバサーバはPDCへwindowsアカウントの解決を依頼します。
この依頼を受けたPDCはユーザデータベースの格納先であるLDAPを参照して、アカウントの存在確認・認証を行います。

この後、sambaサーバはローカルのファイルにアクセスするわけですが、ここではUNIXアカウントによるファイルアクセスチェックが必要です。
このUNIXアカウントもnss_ldapを経由することで、LDAPサーバを参照することが可能です。

もちろん、sambaサーバ以外のプロセスについても、UNIXアカウントが必要な時はnss_ldapを経由して、LDAPサーバを参照することができます。

LDAPを使うことのメリットは沢山あります。

  • オープンな仕様であり、汎用性がある。
    • ユーザマネージャ、グループマネージャが不要。ユーザ登録などをスクリプト化ができる。
    • samba以外の情報も格納できる。
    • (OpenLDAPであれば)レプリケーションによる二重化が簡単。
  • データベースをテキストで処理できる。(LDIF形式)
    • バックアップが簡単。テキストにエクスポートすればOK。
    • 一括登録などや、一括更新も可能。
  • UNIXからも、nss_ldapでユーザ名/グループ名を解決できる。
    • UNIX上のUID/GIDをメンバサーバ間で統一できる。
    • わざわざ、各メンバサーバでユーザ/グループを登録しなくてもよい。

特に最後が重要です。
せっかくPDCを構築しても、ユーザデータベースをTDBにしては、各メンバサーバ上でUNIXアカウントを登録しなければなりません。そうしないと、ファイルシステムにアクセスできなくなります。これではアカウントの一元管理というPDCの重要なメリットが失われます。

LDAPにユーザデータベースを格納すれば、windowsアカウントはPDC経由で、UNIXアカウントはnss_ldap経由でLDAPを参照することができますので、これらの問題を解決することができます。

というわけで、いってみましょう。
基本的な考えは以下の通りです。

  • sambaでPDCと、メンバサーバを作成する。
    • ドメインは新規に作成する。
    • メンバサーバはドメインに参加して、PDCに認証を委譲する。
  • ユーザ情報はすべてPDC上のLDAPに格納。
    • Linuxファイルシステムにおけるユーザ参照はnss_ldapで解決する。
  • ユーザ情報はperlベースのsmbldap-toolsで管理。
    • サーバマネージャ、ユーザマネージャは使わない。

インストールの手順は以下の通りになります。

1. PDC、メンバサーバに必要なパッケージをインストールする。
2. PDCのLDAPサーバを設定する。
3. PDC、メンバサーバのUNIXアカウントの解決するために、nss_ldapを設定する。
4. PDC、メンバサーバのsambaを設定する。
5. LDAPサーバににwindowsドメインの情報、アカウント情報を作成する。
6. メンバサーバをwindowsドメインに参加。

次回以降、上記の手順を記してきます。
乞うご期待!