もう一方のAppleMetaNodeLocation属性には、自身のノードを格納しているディレクトリサービスへのパスが記載されている。今回のdsLocalに格納されているユーザの場合は、「/Local/Default」が記録されている。通常は、ディレクトリを指定して情報を確保するのだから、どのノードをアクセスしているかは自明であろう。

このAppleMetaNodeLocationが威力を発揮するのは、Searchノードを使った検索を行うときだ。

先ほど、dsclでトップディレクトリをlsしたときに、LocalやBSDに並んでSearchというノードがあったのを思い出していただきたい。このSearchの下には、UsersやGroupなど、dsLocalの下と同じようなサブディレクトリが並んでいる。Usersの下を見てみると、先ほどのdsLocalのUsersに存在したユーザに加え、/BSD/local/Usersに存在するユーザも、/etc/passwordにあるユーザアカウントも並んで表示されているのに気が付くだろう。そう、/Searchノードの各サブディレクトリでは、現在アクセスできる認証用のディレクトリサービスの各ディレクトリの情報が「重ね合わされて」表示されているのだ。

このSearchノードがあるため、例えば「me」というユーザの情報が必要な場合、いちいち全てのノードのUsersディレクトリを見て回らなくても単にSearchノードの下を見れば即座にユーザを確認できるのだ。このとき、全てのノードが重ね合わさっているため、一見どのノードがどのディレクトリサービスから提供されているか分からない。そこで先の「AppleMetaNodeLocation」を利用する。meのAppleMetaNodeLocationは「/Local/Default」のため、今度はこちらのツリーを見ていくことで、正しいディレクトリサービスから情報を取得できる。

なお、どのディレクトリサービスを認証用に利用するかは、「アプリケーション」フォルダ配下の「ユーティリティ」フォルダにある「ディレクトリユーティリティ.app」で設定を行う(図3図4)。この設定は/Library/Preferences/DirectoryServices以下の各plistに保存され、バックグラウンドサービスのDirectoryServiceがこれを読み取り、適切なディレクトリツリーの管理を行う。

図3図4: どのディレクトリサービスを認証用に利用するかは、「アプリケーション」フォルダ配下の「ユーティリティ」フォルダにある「ディレクトリユーティリティ.app」で設定する

以上が、Open Directoryに格納された情報の概要だ。これらの情報は実際には各種アプリケーションから自動的に参照され、編集される。例えば「システム環境設定」の「アカウント」を用いてユーザを作成すると、自動的にdsLocalのデータベースの中にアカウントが作成され、パスワードがShadowHashの形で記録され、同時にKeberosにも登録される。Mac OS X Serverならば、ワークグループマネージャなどのサーバ管理ツールからアカウントを作成すれば、自動的にdsLocal、LDAPv3などのバックエンドに自動的にアカウントに関連する情報が作成され、ApplePasswordServerにパスワードが記録され、さらにKerberosにも登録が行われる。また、ディレクトリユーティリティによってActive DirectoryやサードパーティのLDAPサーバを参照するように設定することで、Open Directoryを通じてこれらのディレクトリサービスへアカウントやグループ、ホスト情報の参照を行うようになる。

Open Directoryの利点は、そうした各種ディレクトリサービスへのアクセスが単一のDirectoryServiceのAPIを通じて統一的に行え、Searchノードを利用することで一気に検索できるという点だ。

さて、ではこうした情報は実際にはどう格納されているだろうか? 実際にdsLocalのツリー、それからShadowHashのデータを見てみよう。