先日の「root騒動」以来、macOSのユーザ管理/コンフィグレーションに関連した機能を見直している。よほどのことがないかぎりディレクトリサービスの存在を意識する必要がなく、NetInfoマネージャはもちろんのこと「ディレクトリユーティリティ」すら見たことがないMacユーザが大半という時代だ。rootでパスワードなしにログインできてしまうことの衝撃がどれほどのものか、どうすればマルチユーザの概念を伝えられるのか……いろいろ探るうち、ある機能に目を付けた。

それは「Fast User Switching」。ユーザアカウントを切り替えるときに利用する、デスクトップが回転するような表示エフェクトを持つあの機能だ。これなら"ユーザごとの作業"を強調できるし、視覚的でわかりやすい。使ってみたくなることに意義があるのだ。

  • Mac OS X Panther(v10.3)のとき実装された「Fast User Switching」

事前準備は、システム環境設定「ユーザとグループ」パネルで「ログインオプション」を開き、「ファストユーザスイッチ」にチェックを入れておくだけ。あとはメニューエクストラ上のアイコン/ユーザ名をクリックし、切り替えたいユーザを選べばOK。パスワードを入力すると、回転エフェクトののちにデスクトップが現れる。

  • システム環境設定「ユーザとグループ」パネル

これでこの話題は終了……となりそうなところだが、このFast User Switchingには裏ワザがある。コマンドラインから実行することもできるのだ。メニューエクストラ書類(User.menu)に内包されているバイナリ(CGSession)がそれで、「-switchToUserID」オプションに続けてUIDを指定すると、GUIで操作したときと同じ結果を得られる。たとえば、UIDが「502」のユーザに切り替える場合、以下の要領でコマンドラインを実行する。

$ /System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -switchToUserID 502

UIDをどうやって調べるのか、ということに気付いた方はご名答。「システム環境設定」の「ユーザとグループ」パネルを素直に使っていてはUIDがわからないため、macOSのもう一段階"深い"ユーザ管理ツールに手を出さざるをえず、結果的にUNIX流ユーザ管理術の知識が(断片的とはいえ)身に付くというわけだ。

その方法のひとつは、「ユーザとグループ」パネルを使うというもの。UIDを知りたいユーザの上で右クリック(control+クリック)して「詳細オプション...」ボタンをクリック、現れた画面を確認すればわかる。なるほど、ユーザアカウントはこのような数値で管理されているのだな(現在のmacOSにはUUIDやGUIDという概念もあるが)、という気付きが得られるだけでもこの際じゅうぶんだろう。

  • ユーザ名の上で右クリックすると、「詳細オプション...」ボタンが現れる

  • 詳細画面を見ると、そのユーザのUIDがわかる

そのとき、「root」など他のユーザアカウントも知りたいと考えたなら、まさにこちらの思惑どおり。「ユーザとグループ」パネルではrootなど"見えない"ユーザの情報を知る術がなく、ほかの方法を考えるしかないからだ。macOSでは、ユーザアカウントはディレクトリサービス(LDAP)で管理しているため、「ディレクトリユーティリティ」に行き着くという寸法だ。

ただし、このツールは所在場所がわかりにくい。「ユーザとグループ」パネルから起動する場合は、ログインオプションでネットワークアカウントサーバの右横にある「接続...」ボタンをクリック、現れたシートで「ディレクトリユーティリティを開く...」をクリックする。Finderで「システム」→「ライブラリ」→「CoreServices」→「Applications」フォルダ(/System/Library/CoreServices/Applications)を開いても起動できるが、どちらの方法でも手順の多さは大差ない。

ディレクトリユーティリティでUIDを調べるには、「ディレクトリエディタ」ボタンをクリックし、目的のユーザアカウントを選択すればOK。画面右側にたくさんの情報が表示されるから、その中にある「UniqueID」を見ればUIDがわかる。なお、ディレクトリユーティリティではrootは「System Administrator」と表記されているので、念のため。

  • LDAPに直接アクセスできる「ディレクトリユーティリティ」を利用すると、全ユーザの詳細な情報がわかる

ここまできたら、CUIでディレクトリサービスにアクセスする方法も試してほしいもの。利用するコマンドは「dscl」、以下の要領で実行すると全ユーザアカウントの名前とUIDを表示してくれる。なお、「.」は作業中のMac(ローカルホスト)、「-list」は結果をリスト表示、「/Users」はユーザ領域の最上位のパス、「UniqueID」はUIDを意味する。このdsclコマンドを使うとユーザの新規登録や削除も可能だが、それはまた別の機会に。

$ dscl . -list /Users UniqueID
  • dsclコマンドを利用してもLDAPに直接アクセスすることが可能だ