カテゴリー
Mac

OS X Server 3.0 の KerberosServices

我が家の 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件の返信

コメントを残す