いまも利用されている「ディレクトリサービス」

この連載がスタートした当初、OS Xには「NEXTSTEP/OPENSTEPそのまま」という部分が少なくなかった。描画システムがDPS(Display PostScript)からQuartzに、メインのファイルシステムがUFSからHFS+に、アプリケーション層APIがCocoa/Carbonに……などと新時代の技術に置き換えられた部分も多数あったが、後回しにできるものは後回しにする風潮はあったと記憶している。開発研究費が潤沢とは言えない時期のこと、それも当然だろう。

いまにして思えば、「NetInfo」もそうだった。NetInfoとは、NEXTSTEPのときから利用されていたディレクトリサービスの一種で、ユーザ情報など重要なシステム情報をデータベース化して統括管理し、システム常駐のサーバ(netinfod)が問い合わせに応えるというもの。当時のUNIX系OSは、/etcディレクトリあたりに設定ファイル(実体はプレインテキスト)を置く管理スタイルが一般的だったから、*BSDやLinux経験者には「ユーザ情報を変更するとき/etc/passwdを編集してもダメ、niclコマンドを使いNetInfoデータベースに書き込んで」などと説明したものだ。

そしてOS X Tigerのときに「LDAP」が導入される。それまでのOS Xは、統一されたAPIとプラグイン機構を備える「Open Directory」のバックエンドとしてNetInfoを利用していたのだが、独自プロトコルのため外部サービスとの連携が難しく、OS X LeopardのときLDAPに取って代わられ、OS X El Capitanの現在に至る。

そのGUIツールが「ディレクトリユーティリティ」だ。Leopardの頃は「ユーティリティ」フォルダに置かれていたが、やがてシステム領域の「CoreServices」に移され、El Capitanではそのサブフォルダの「Applications」に変更された。フルパスは「/System/Library/CoreServices/Applications/Directory Utility.app」という長々しいものだが、ユーザデータベースを直接編集できる唯一のGUIツールであるだけに、その存在は把握しておくべきだろう。

Mac OS X Public Betaのときの「NetInfo Manager」。この画面では/etc/hostsに相当する情報を編集している

OS X El Capitanの「ディレクトリユーティリティ」。システムフォルダの奥深くに存在する

知ってトクする「dscl」コマンドの使いかた

バックエンドはLDAPに変更されたものの、ユーザアカウント情報をディレクトリサービスで保管するという方式に変わりはなく、暗号化が施されることを除けば管理スタイルもOS X登場当初と大きく変わらない。GUIフロントエンドは「NetInfoマネージャ」から「ディレクトリユーティリティ」に、CUIフロントエンドは接頭語「ni」のコマンド群から「dscl」に変わったが、基本さえ押さえれば迷うことはない。

たとえば、システムに登録済のユーザアカウントを一覧するには、dsclコマンドを以下のとおり実行する。最初の引数(ピリオド)はデータソースがローカルホストであることを、2番目と3番目の引数(list /Users)は内部コマンド「list」を用いて「/Users」以下の内容を表示することを意味している。「_appleevents」や「_sshd」など、システム環境設定では閲覧できない特殊なユーザアカウントの情報を参照するには、この方法が近道だ。

$ dscl . list /Users

dsclコマンドを実行したところ。システム環境設定では確認できない特殊なユーザを一覧できる

もっとも、ユーザアカウントの詳細情報が必要になる機会は少ない。NetInfoデータベースでファイルサーバの設定を行っていた時代はいざ知らず(NEXTSTEPはそうだった)、先端を行くコンシューマOSに変貌した現在のOS Xにおいて、ディレクトリサービスを直接イジる場面はほとんどないだろう。

しかし、ディレクトリサービスをより広い意味で解釈すれば、現在のOS Xでも存在を意識する場面はある。「DNSキャッシュ」をクリアするときだ。意外に感じられるかもしれないが、/etc/hostsや/etc/resolv.confはNetInfoの管轄範囲だったことを思えば、納得いただけるだろうか。

DNSキャッシュは、外部のDNSサーバに問い合わせた結果をクライアント(Mac)に蓄積した一種のデータベース。DNSキャッシュを利用することで外部サーバへの問い合わせ回数を減らし、応答時間短縮などのメリットを得ることができる。しかし、IPアドレスの変更などネットワーク設定を見直すと、IPアドレスとホスト名/ドメイン名の関連付けに齟齬が生じることがあるため、これをクリアして問題解決を図らなければならない。

そのとき利用されるコマンドが「dscacheutil」。以下のとおりオプションに「-flushcache」を与え、管理者権限で実行すると、DNSキャッシュがクリアされるのだ。さらにmDNSResponder(Bonjourで使用される名前解決のためのサービス)を再起動すればOKだ。

$ sudo dscacheutil -flushcache
$ sudo killall -HUP mDNSResponder

DNSキャッシュをクリアするときには、ディレクトリサービスの存在を意識することになる