Mac OS Xにはじめて触ったUNIX使いが戸惑う要素として、先進的なアカウント管理機構OpenDirectoryがある。前回に引き続き、その仕組みについて解き明かしていく。
OpenDirectoryの構成要素は図1にあるとおりだ。OpenDirectory対応のアプリケーションは、Directory Serviceフレームワークを通じてDirectoryServiceデーモンへアクセスし、DirectoryServiceデーモンは指定のプラグインを経由してサービスの検索やアカウント情報の取得を行う。
どのプラグインをどんな順番で使うかは、「アプリケーション」フォルダ下の「ユーティリティ」にある「ディレクトリアクセス」によって設定される。プラグインとしては、NetInfo、LDAP v3、ActiveDirectoryといった主にユーザーアカウントを管理するディレクトリサービス向けのものと、SLP*、SMB/CIFS、AppleTalk*、Bonjour*といった主に名前解決やファイル共有などのサービス取得のためのものがある。また、/etc/passwdのようなテキストファイルやNISへのアクセスを行う「BSDフラットファイルおよびNIS」プラグインも用意されている(図2)。
これらを有効にすることでサービスへの検索が行われ、逆に無効にすることでサービスへの情報取得が行われなくなる。アカウント情報については、さらに「認証」のタブでどのディレクトリサービスから検索するかという順番を指定できる。NetInfoではサーバ側で階層構造が決まっていたが、OpenDirectoryではクライアント側でも指定できるという点が大きな違いであるといえる。
なお、この「ディレクトリアクセス」で設定を間違えるとMac OS Xに2度とログインできなくなるといった致命的な障害も起きかねないので、操作する場合はくれぐれも注意されたい。
実際のところ、アプリケーションの開発者がDirectoryServiceフレームワークを直接操作する必要はほとんどなく、より上位のCocoaやCarbonといったフレームワークを通じて適宜操作が行われる。
少々複雑なのが、UNIXのC言語から見た処理だ。SolarisやLinuxといったほかのUNIX系のOSでは、gethostbyname(3)のようなnetdb.hに属する関数、getpwent(3)やgetgrent(3)といったユーザーアカウント情報にアクセス関数を呼び出すと、/etc/nsswith.confの設定に従いnss_から始まるプラグインをロード、/etc/passwdやLDAPサーバ、DNSといった情報源へアクセスする。しかし、Mac OS XのNeXTSTEP由来のLibcでは、そうしたリクエストはすべてSunRPCでlookupdへ転送される*のだ(図3)。
lookupdもまた所定の設定に従い各種情報源へアクセスするが、nsswitchの場合と異なり*独立したプロセスとして動作しているため、そうした問い合わせの結果は積極的にlookupdの中にキャッシュされ、同じ問い合わせがきたときも効率良く返答できるようになっている。先に述べたように、NeXTSTEPでは、このlookupdがNetInfoサーバへ順に問い合わせることで階層的なディレクトリサービスが実現されていたが、Mac OS XではローカルのNetInfoサーバのみに問い合わせるようになっている。そして、DSAgentプラグインというサービスを通じてDirectoryServiceへ問い合わせを送り、情報を取得しているのだ。この部分はNetInfoとOpenDirectoryの統合がうまくいっていないところ、Appleの迷走の名残と言える。
Service Location Protocol。マルチキャストを利用し、LAN内にあるサービスの検索、告知、登録を行うためのプロトコル。AppleShareIPやMac OS X Serverでサポートされている。
OpenDirectoryプラグインのAppleTalkは、正確にはNBP(AppleTalk Name Binding Protocol)というプロトコルを使用して、AppleTalkネットワーク上のホストの探索を行うものだ。AppleTalkそのものを使うかどうかは、「システム環境設定」の「ネットワーク」の項目にある「AppleTalk」タブの「AppleTalk使用」チェックで決まる。AppleTalkはもはや過去のプロトコルであるため、Mac OS 8以前のどうしようもなく古いMacとどうしても通信しなければならないという限定された状況以外ではオフにしておくべきだ。
旧名Rendezvous。Multicast DNSとDNS-SDというDNSをベースとしたプロトコルを用い、LANや一時的なネットワークにおける名前解決、サービスの告知、一覧を行うための仕組み。
起動途中やシングルユーザーモードでまだlookupdが起動していないという極めてまれな状態に限り、/etc以下のファイルを見るという動作をする。
nsswitchを使う場合も、nscdというデーモンプロセスを実行することでlookupdとほぼ同様の効果が得られる。
Copyright © ITmedia, Inc. All Rights Reserved.