我が家の OS X Server を Mavericks/OS X Server 3.0 にあげた時に
Dovecot が GSSAPI で認証しない
と書いたように、 Mountain Lion/OS X Server 2.0 ではできてた SSO が出来なくなってました。もうしょんぼり。
で、ずっとそのままで放置してたんですが、別件で調べてた VMware の KB に Installing OS X 10.9 Mavericks as a guest operating system in VMware Fusion 6.0 (2056603) なんてのが公開されていることに気づきまして、 VMware Fusion に Mavericks/OS X Server 3.0 入れればいろいろ実験出来るんじゃね、とか思いついて試したのです。
と、その前に現状確認の必要があるので、動いてない本番サーバーで sso_util(8)
sudo /usr/sbin/sso_util info -l Password: afpserver cifs host vnc
そりゃあ Dovecot で SSO 出来ないよねって感じの出力ですが、これが VMWare Fusion 使ってクリーンインストールした OS X Server 3.0 だとどうなるかというと…
sudo /usr/sbin/sso_util info -l Password: afp afpserver cifs DNS fcsvr ftp host HTTP http imap ipp ldap nfs pop smb smtp ssh vnc vpn xmpp
結果に差がありすぎ。
で、 Server.app 実行前にスナップショットを取ってたので、そこに戻して sso_util(8) を動かしてみると
sudo /usr/sbin/sso_util info -l Password: afpserver cifs host vnc
ということで、 SSO 出来ないと悩んでた本番サーバーは Mavericks 同等の設定というか OS X Server を入れた甲斐のない状態となっていたようです。そりゃあ動かなくても仕方ないね。
sso_util(8) がどうやって Kerberized なサービスを認識してるかわからないのでいろいろとググってみたのですが有効な情報は皆無。
でも Server.app 実行前後で明確な差があるので、そこを探ればなんか出るはず、と信じて再度 Server.app 実行前のスナップショットに戻して、Server.app を実行してからおもむろにターミナルから 5 分以内に変更があったファイルを find してみました。原始的。
sudo find / -mmin -5 -type f > find.log
ここでリストアップされたファイルを眺めてそれっぽいのを確認する、という…。いや、もっといい方法ないの?
それはそうと、欲しいファイル群は抽出できたので、そこから臭い名前をピックアップして中身を確認するだけです。目を付けたのはここら辺
/private/var/db/dslocal/nodes/Default/computers/localhost.plist /private/var/db/dslocal/nodes/Default/config/dhcp.plist /private/var/db/dslocal/nodes/Default/config/shadowhash.plist /private/var/db/dslocal/nodes/Default/groups/_appserveradm.plist /private/var/db/dslocal/nodes/Default/groups/_appserverusr.plist /private/var/db/dslocal/nodes/Default/groups/_developer.plist /private/var/db/dslocal/nodes/Default/groups/_teamsserver.plist /private/var/db/dslocal/nodes/Default/groups/_xcstest.plist /private/var/db/dslocal/nodes/Default/sqlindex-wal /private/var/db/dslocal/nodes/Default/users/_krbtgt.plist /private/var/db/dslocal/nodes/Default/users/_xcstest.plist /private/var/db/dslocal/nodes/Default/users/com.apple.calendarserver.plist
って名前的にローカルのディレクトリサービス(?)の実体っぽいですね。いかにもそれっぽい名前がついてる config が臭いと思ったのですが、どちらもハズレ。 users や groups は明らかに違うだろうしなぁ、と消去法で computers/localhost.plist を覗いてみます、がバイナリファイル…。
こんな時には plutil(1) の出番! おかしくなったらスナップショットに戻せばいいや的お気楽さで実ファイルを変換します(笑
sudo -s cd /private/var/db/dslocal/nodes/Default/computers/ plutil -convert xml1 localhost.plist more localhost.plist
とすると
(略) <key>kerberosServices</key> <array> <string>host</string> <string>afpserver</string> <string>cifs</string> <string>vnc</string> <string>afp</string> <string>DNS</string> (略)
これじゃね!? と試しに DNS を削除して再度 sso_util を動かしてみると
sudo /usr/sbin/sso_util info -l Password: afp afpserver cifs fcsvr ftp host HTTP http imap ipp ldap nfs pop smb smtp ssh vnc vpn xmpp
出力変わった!!(ついでに xml 化した localhost.plist が再びバイナリ化!)
しかしいちいちテキスト化して編集するのは面倒だなぁ、とか思いついたところで dscl(1) の存在を思い出した…。
dscl . -read /Computers/localhost dsAttrTypeNative:KerberosFlags: 110 dsAttrTypeNative:KerberosKeys: 307ea103 020103a0 77307530 2da12b30 29a00302 0112a122 0420fcc4 27b52feb 85b9cbbe 1ae3b7b7 c9a73371 3c39096b 3f2fdadc 57bc01d9 c7fe301d a11b3019 a0030201 11a11204 10086c11 776036c4 f34f463e 0d96ae4b 1e3025a1 233021a0 03020110 a11a0418 9d0bbc8c 54164f7c 6ba1a485 2a1fc7a7 5bc2157f 925b7646 AppleMetaNodeLocation: /Local/Default IPAddress: 127.0.0.1 IPv6Address: ::1 fe80::1%lo0 KerberosServices: host afpserver cifs vnc afp DNS fcsvr ftp HTTP http imap ipp ldap nfs pop smtp ssh smb xmpp vpn RecordName: localhost RecordType: dsRecTypeStandard:Computers
…今までの苦労はいったい、という気がしないでもないけど、 dscl(1) で KerberosServices を弄るのがアップル的な手順のような気がします。本番サーバーでこんな感じにしてみました。
sudo dscl . -append /Computers/localhost KerberosServices afp DNS fcsvr ftp HTTP http imap ipp ldap nfs pop smb smtp ssh vpn xmpp
ここまでくればあとは正規の手順、というか sso_util(8) の本来の使い方でなんとかなりそうです(壊れたらどうしよう…。
sudo /usr/sbin/sso_util configure -r REALM -a admin_name -p admin_password all
特にエラーもなく終わったので Server.app からメールを再起動(入→切→入)して Mail.app から Kerberos でアクセスしてみたところ、 Mail.app からは正常にアクセス出来た風味。本番サーバー側の /Library/Logs/Mail/mail-info.log にも
Jan 15 21:43:15 imap-login: Info: ID sent: name=Mac OS X Mail, version=7.1 (1827), os=Mac OS X, os-version=10.9.1 (13B42), vendor=Apple Inc.: user=<>, rip=192.168.0.23, lip=192.168.0.3, TLS
Jan 15 21:43:15 imap-login: Info: Login: user=<goro>, method=GSSAPI, rip=192.168.0.23, lip=192.168.0.3, mpid=69124, TLS
Jan 15 21:43:15 imap(pid 69124 user goro): Info: Disconnected: Logged out in=28 out=546
と GSSAPI でアクセスしたログが残ったので、どうやら SSO が復活したようです。やったー。
ちなみに sso_util configure した後に ktutil list すると、 /private/etc/krb5.keytab にいろいろ書かれたような雰囲気を感じる結果が出力されてきたので、 sso_util に頼らずタダの Heimdal として設定したほうが早かったような気がしてきました…(笑)。
こうやってトラブった時にドキュメントの少なさが響いてくるよなぁ…。
「OS X Server 3.0 の KerberosServices」への1件の返信
@zess_ektah ここすごく参考になったす。> https://t.co/CYzEXGgYpd @goro1080