daily memorandum 2.3.0

CBUG | FreeBSD | Hiki | Knoppix | Mac | Ruby | W-ZERO3 | Windows | ad | amd64 | ks | linux | momonga | net | print | security | tdiary | unix | www | 会社 | 鯖缶 | 全学ゼミ |


2005-12-15 (Thu)

_ [Mac] Panther -> Tiger の upgrade でハマる (2)

月曜に書こうとした話。

ようやく iBook を Panther から Tiger に upgrade したのですが、 そしたら login できなくなりますた。。。(゜Д゜;) loginwindow でユーザー名とパスワードを入れると、 ふつーに認証は通るのだけど、 その後画面が真っ青のままで、Finder が出てきてくれない。。。

結論から言うと、FileVault を有効にした後に passwd(1)コマンドで login パスワードを変更したために、 暗号化 disk image のパスワードと一致しなくなったせいですた。 loginwindow はこの両者が一致していないときのことを想定してないようで・・・

しかし、原因が分かったところで、全ユーザーで FileVault 有効にしているので 誰も login できない・・・。ということで、少し格闘してみたので、その記録。

single user mode で boot する

このマシンは sshd を立ち上げてなかったので、 loginwindow が固まってしまうとどうしようもなく、 仕方ないのでまずはスイッチをブチ。 で、立ち上がるときに Command + S を押しっぱなしにして single user mode に。まぁ、UN*X の常套手段ってことで。

single user mode で hdiutil(1) を動かすと・・・

で、 hdiutil(1) を使って disk image を mount しようとしてみると、

   # hdiutil attach /Users/koma2/koma2.sparseimage
   load_hdi: IOHDIXControllerArrivalCallback: timed out waiting for IOKit to finish matching.
   hdiutil: attach failed - 認証エラー

残念!

そういえば boot したときに「sh /etc/rc 実行しとけ」と出てた気がするので、 こいつを実行して、いろいろ daemon を上げてから試してみる。

   # sh /etc/rc
   ...(わらわらとメッセージが出力される)...

   # hdiutil attach /Users/koma2/koma2.sparseimage
   hdiutil: attach canceled

ってことで、やっぱだめぽ。 GUI がある状態で実行した時には、認証のダイアログボックスが出るので、 それが出せないせいかな? GUI じゃなければ stdin から読もうとするとか、 そういうカコイイ作りにはなってないらしい。 UN*X 屋から見ると、こういうところの作りはイマイチだねぇ。 トラブルが起こった時のこと考えて、 最低限の環境でも動くようにしといて欲しいものだ。

sshd を起動させる

ってことで、single user mode での復旧をあきらめ、 loginwindow を上げることにする。 その前に、万が一端末が使えなくなった時に備えて sshd を起動しておく。 そのためには、/System/Library/LaunchDaemons/ssh.plist の

   <key>Disabled</key>
   <true/>

とあるところを消し、

   # launchctl load /System/Library/LaunchDaemons/ssh.plist

とする。

   # launchctl list

で com.openssh.sshd が出てくることを確認すること。

手動でユーザーを作る

それから、loginwindow で入れるように、新しいユーザーを作っておく。

まず、

   # nidump  passwd . | sort -k3 -t: -n
   # nidump  group . | sort -k3 -t: -n

で現在の passwd, group ファイルを出力しておき、 その出力結果を見て、空いてる uid, gid に ユーザー、グループを割り当てる。

具体的なやり方はこんな感じ。まずは group ファイルを作り、 それを NetInfo DB にツッコむ。

   # cat > group.new
   rescue:*:507:
   ^D

   # niload group . < group.new

同様に passwd ファイルも NetInfo DB にツッコむ。

   # cat > passwd.new
   rescue:********:507:507::0:0:rescue:/Users/rescue:/bin/bash
   ^D

   # niload passwd . < passwd.new

続いて passwd(1) コマンドでパスワードを設定する。

   # passwd rescue
   Changing password for adm.
   New password:
   Retype new password:

こうして出来たユーザー rescue で disk image のパスワードを変更するので、 rescue が sudo できるように admin グループに加えておくといいだろう *1。 まずは admin グループの行をファイルに落とし、

   # nidump group . | grep admin
   admin:*:80:root,koma2
   # nidump group . | grep admin > group.admin

続いてこの行の最後に rescue を加えて

   admin:*:80:root,koma2,rescue

とした後、 niload(8) で NetInfo DB に読み込む。

   # niload group . < group.admin

暗号化 disk image のパスワードを変更する

これで新しいユーザー rescue で login できるはずなので、 Ctrl-D を押して single user mode を抜け、 loginwindow が上がって来たら login してターミナル(Terminal.app とか) を立ち上げ、 hdiutil(1) を使って disk image のパスワードを変更する。

   $ sudo hdiutil chpass /Users/koma2/koma2.sparseimage

このとき、login パスワードと disk image のパスワードが一致するように すること。

disk image のパスワードを変更したら、rescue ユーザーを logout して koma2 で login してみる。 この時、もし再び loginwindow が凍り付くようなことになったら、 ssh で login して loginwindow を kill すればよい。 launchd が勝手に loginwindow を立ち上げ直してくれる。

*1 もちろん sudoers を編集してもよい。

本日のツッコミ(全1件) [ツッコミを入れる]
_ kyn (2005-12-15 (Thu) 17:41)

私の手元のマシンでも試してみましたが、確かにpasswdコマンドだと同期されませんね。<br>ただ私のマシン(Panther)の場合、ホームの復号化に失敗したら新たにホームディレクトリを作って(といっても、sparseimageもちゃんと残ってますが)、そのままログインそのものには成功していますね。<br>PantherとTigerの違いでしょうか?

[]

recent items