MacOS XはBSD系のUNIXをベースとしているわけですが、かなりの改造が施されています。例えばファイルシステムの配置なんかもUNIXの標準からは随分と変わっていて、通常は/home配下に配置されるユーザのホームディレクトリは/Users配下にありますし、アプリケーションの設定ファイルも/etcではなく/Library等にあります。
さて、通常のUNIXでは/etc/passwdというテキストファイルでローカルシステムのユーザを管理していますが、基本的にMacOS Xではこのファイルを使っていません。通常のユーザ管理はシステム環境設定の「アカウント」で行いますが、ここに表示されないアカウントが実はいっぱいあります。それがどこにあるかを手探りで探してだいぶ苦労しました。
結論から言うと、アカウント情報は/var/db/dslocal/nodes/Default配下にあります。
このフォルダの下にあるusersというサブフォルダに、<ユーザ名>.plistという名前で幾つものXMLファイルが置かれています。
今回は、MacOS向けにポーティングされたPostgreSQL 8.3をうまくアンインストール出来ず、postgresユーザの設定が残ってしまっていたのですが、ここに設定されていたpostgresユーザのホームディレクトリがアンインストールによって削除されてしまった為、rootユーザからpostgresユーザにsuするとエラーが出る様になってしまっていたのです。
通常だと、/etc/passwdのホームディレクトリの設定を書き換えるだけで済むのですが、MacOS Xでは/var/db/dslocal/nodes/Default/users/postgres.plistを修正する必要があります。
ただ、このファイルを編集しただけではシステムの設定に即時反映されるわけではないらしく、恐らくシステムを再起動すれば良いのでしょうけれど、今回はシステム環境設定の「アカウント」でダミーのユーザを作成し削除する、という作業でファイルの修正内容を反映させました。ここはもっとうまいやり方を知りたいところです。
ともあれ、postgresユーザのホームディレクトリを/opt/local/lib/postgresql83に変更し、無事rootからpostgresにsu出来る様になりました。
0 件のコメント:
コメントを投稿