Macといえば、パーソナル(な)コンピュータ。特にMacBookなどのノート型機は1人1台が当然のこととされ、家族といえど1台を複数人で共有している話はあまり耳にしない。一方、macOSの基礎はUNIXであり、その出発点には「タイムシェアリング」の概念がある。複数のユーザが1台のMacを同時に使うのも可能なのだ。シリーズ3回目の今回は、そのマルチユーザに関する部分を知るべく「dscl」コマンドを紹介しよう。

まずはログイン/ログアウトしてみよう

macOSはマルチユーザ対応のOSではあるものの、液晶パネルを開閉するなど直観的な操作でスリープを実行/解除できるしくみがあるためか、大半のMacユーザはログイン/ログアウトを実行しない。登録済アカウントは最初に登録した(管理者権限を持つ)自分だけでシステムを再起動することすらまれ、というユーザも多いはずだ。

しかし、ときどきはログイン/ログアウトしたほうがいい。すべてのアプリケーション/プロセスが完璧に設計されているわけではなく、メモリリークなど気付きにくい問題を抱えているかもしれず、それをログアウト(に伴うプロセスの終了)でリセットできる。それに、ログインパネルを目にすれば、システムが起動完了するや否やデスクトップが現れる「自動ログイン」は強引でイレギュラーなものということに気付くはずだ。

  • macOSのログインパネル。複数のユーザで1台のMacを共有できる仕組みが用意されている

そのログインパネルだが、最初に登録したユーザ(自分)以外にユーザ登録をしていなければ、選択できるのは自分と「ゲスト」だけになる。ゲストは特別なユーザで、パスワードなしでのログインが許可されている半面利用できる機能が制限されており、ログアウト時にはホームフォルダ上のファイルがすべて削除されてしまう。

macOSに最初から用意されているユーザは、自分とゲストだけではない。ユーザの登録作業に利用するシステム環境設定の「ユーザとグループ」パネルにこそ表示されないものの、macOSにはいろいろなユーザが存在し、それぞれの役割を果たしているのだ。

全ユーザの情報を確認する手段のひとつが「dscl」コマンド。Terminalで以下のとおりコマンドラインを実行すれば、聞いたことがないどころかユーザ情報なのか定かでない文字列が大量に表示されるはず(量が多いのでcolumnコマンドにパイプし3列表示している)。そしてこの情報がどのように保存されているか、どのように参照されているか知ることが、macOSというシステムにおけるユーザ管理に欠かせないのだ。

$ dscl . list /Users | column
  • システム環境設定「ユーザとグループ」パネルに表示されているユーザだけがmacOSの"ユーザ"ではない

  • 「dscl . list /Users | column」を実行したところ。「ユーザとグループ」パネルにないユーザの存在がわかる

ユーザの詳細情報を調べる

このdsclコマンドは、macOSのユーザ情報データベースを参照/編集するためのフロントエンドツールだ。伝統的にUNIX系OSでは、ユーザ名やホームディレクトリなどのユーザ情報をテキストデータでファイル(/etc/passwd)に記録するが、macOSでは前身のNEXTSTEPに由来する「NetInfo」というディレクトリサービスが集中管理していた。現在ではOpenDirectoryという機構に取って代わられたが、ユーザやグループなどの管理情報をデータベースで管理するというスタイルは一貫している。

dsclコマンドの出力結果を見ると、ユーザ数の多さに驚くかもしれないが、そのこと自体は(UNIXの考え方では)不自然ではない。UNIXでは、ファイルにせよプログラム(実行単位は「プロセス」)にせよオーナーが存在し、管理の都合で目的に応じたユーザを用意する。たとえば、mdworker(Spotlightのインデックスを生成するプロセス)のオーナーは「_spotlight」というユーザで、locationd(位置情報を管理するサーバプロセス)のオーナーは「_locationd」といった具合だ。

その詳細情報を表示するには、dsclコマンドを以下の要領で実行する。コマンド名の直後にある「.」はローカル(手もとのMac)のデータベースを、「-read」はデータベースを読み込むための内部コマンドを、「/Users/_spotlight」はユーザに割り当てられたデータソース/ホームディレクトリを意味する。この「_spotlight」部分を他のユーザ名に変えれば、その詳細情報が表示されるというわけだ。

$ dscl . -read /Users/_spotlight
  • 「_spotlight」など特殊なユーザの詳細情報を表示したところ。一般ユーザと内容/情報量の違いを確認してみよう

なお、dsclコマンドを使うと、データベースの内部構造をブラウズすることができる。dsclコマンドを対話モードで起動し(コマンド名だけを実行)、「list」(lsも可)や「read」(catも可)など内部コマンドを実行してみよう。Local/Default以下には、ユーザ情報が格納される「Users」以外にもさまざまなディレクトリを確認できるはずだ。すべてが活用されているわけではないものの、macOSでどのようにシステム情報が管理されているか、その構造を理解できることだろう。

  • ユーザ情報以外のさまざまな情報が格納されていることがわかる