実際我々は今日世界中の多数のホストにパスワードを使ってアクセスするようになっている。そして信頼できないホストに他のホストと同じパスワードを使いたくはないのである。そのためにホストごとに、また認証プロトコルごとに異なる多数のパスワードや鍵を使い分けなければならなくなっている。そしてそれはだんだん困難になっている…
こうした問題は Plan9 第4版で factotum とセットで導入された secstore によって解決が目指されている。しかし secstore の解説は別ページで行う事とし、ここでは secstore については触れない。単に factotum の使い方を解説するに留める。
4ed では入力されたパスワードは factotum が記憶しており、以後それが必要な場面ではパスワードの再入力は要求されない。さらに、secstore によってパスワードが一括して安全に管理され、筆者の場合には secstore のアクセスに必要なパスワードを一回入力すれば後は(unix など筆者が管理していない他のシステムへのアクセスを除けば*)パスワードを入力することは無い。
sources.cs.bell-labs.com
outside.plan9.bell-labs.com
Plan 9 4ed ではドメインごとに認証サーバを指定するためのタプルとして
authdom
authdom=aichi-u.ac.jp auth=hera authdom=outside.plan9.bell-labs.com auth=sources.cs.bell-labs.com
term% ndb/query authdom outside.plan9.bell-labs.com auth
sources.cs.bell-labs.com
term% ps arisawa 1 0:00 0:00 96K Await init arisawa 2 0:54 0:00 0K Wakeme genrandom arisawa 3 0:00 0:00 0K Wakeme alarm arisawa 5 0:00 0:00 0K Wakeme rxmitproc arisawa 6 0:00 0:00 276K Pread factotum arisawa 7 0:00 0:00 0K Wakeme loopbackread arisawa 9 0:00 0:00 2004K Rendez venti arisawa 10 0:00 0:00 2004K Open venti arisawa 11 0:00 0:00 0K Wakeme #I0tcpack arisawa 12 0:00 0:00 2004K Open venti arisawa 14 0:00 0:00 18024K Rendez fossil arisawa 15 0:00 0:00 18024K Rendez fossil arisawa 16 0:00 0:00 18024K Pread fossil ...のような出力を得る。factotum が非常に早い時期に起動されている事がわかる。
term% ls -l /boot --r-xr-xr-x / 0 arisawa arisawa 67585 Jun 28 22:30 /boot/boot --r-xr-xr-x / 0 arisawa arisawa 217593 Jun 28 22:30 /boot/factotum --r-xr-xr-x / 0 arisawa arisawa 250701 Jun 28 22:30 /boot/fossil --r-xr-xr-x / 0 arisawa arisawa 89445 Jun 28 22:30 /boot/ipconfig --r-xr-xr-x / 0 arisawa arisawa 176569 Jun 28 22:30 /boot/kfs --r-xr-xr-x / 0 arisawa arisawa 164369 Jun 28 22:30 /boot/venti term%となっている。これが Plan 9 システムの卵であり、これを基に現実の Plan 9 システムが生成されて行く。
ps による factotum の出力は特殊な事をしなければ1ケ所である*。
auth/factotum
term% 9fs sources.cs.bell-labs.com /n/sources post... !Adding key: dom=outside.plan9.bell-labs.com proto=p9sk1 user[arisawa]: password: xxxxxxx !
term% auth/factotum -g 'dom=aichi-u.ac.jp proto=p9sk1 user=arisawa !password=xxxxxxx'
!Adding key: dom=aichi-u.ac.jp proto=p9sk1 user=arisawa ! term%
read -m $home/private/factotum >/mnt/factotum/ctl
cat /mnt/factotum/proto
p9sk1 p9sk2 p9cr apop cram chap mschap sshrsa pass vnc
/mnt/factotum/ctl
term% cd /mnt/factotum term% cat ctl key dom=aichi-u.ac.jp proto=p9sk1 user=arisawa key dom=outside.plan9.bell-labs.com proto=p9sk1 user=arisawa
term% echo delkey 'dom=outside.plan9.bell-labs.com proto=p9sk1 user=arisawa'>ctl
http://plan9.aichi-u.ac.jp/netlib/cmd/delkey
term% echo key 'dom=outside.plan9.bell-labs.com proto=p9sk1 user=arisawa !password=xxxxx '>ctl
一般に多数のキーが登録される必要があるであろう。その場合には
key dom=aichi-u.ac.jp proto=p9sk1 user=arisawa !password=xxxxx key dom=outside.plan9.bell-labs.com proto=p9sk1 user=arisawa !password=xxxxx
secstore は認証サーバのこのファイルを(暗号化されたまま)読み取る(そのさいパスワードの入力が必要になる)。そしてこれを平文に直す。この秘密のデータは認証サーバ側では secstored によって管理されている。 そして認証に必要な秘密のデータがネットワークワイドに利用できるのである。secstored に与えるただ一つのパスワードによって。
aux/listen -d /rc/bin/service tcp aux/listen -d /rc/bin/service il
bash$ telnet pc Trying 192.168.1.2... Connected to pc. Escape character is '^]'. user: arisawa authentication failure:needkey dom? proto=p9sk1 user? Connection closed by foreign host.
bash$ telnet pc Trying 192.168.1.2... Connected to pc. Escape character is '^]'. user: arisawa authentication failure:auth server protocol botch Connection closed by foreign host.
bash$ telnet pc Trying 192.168.1.2... Connected to pc. Escape character is '^]'. user: arisawa challenge: 79346 response: 91dce0f0 cpu%
bash$ telnet pc Trying 192.168.1.2... Connected to pc. Escape character is '^]'. user: arisawa challenge: 18209 response: 6678b64e
例えば筆者のサーバのホストオーナー (bootes) は
key dom=aichi-u.ac.jp proto=p9sk1 user=bootes !password=xxxxx
hostid=bootes uid=!sys uid=!adm uid=*と対になっている。
特別の理由がない限り、サーバー側の factotum キーは(複数のユーザーを抱えていても)1つだけである。
key dom=outside.plan9.bell-labs.com proto=p9sk1 user=arisawa !password=xxxxx
sources.cs.bell-labs.com
管理ドメインが異なる認証サーバを指定する事は危険を伴う事を忘れてはならない。dom で指定されたドメインの管理者は任意のユーザ名でアクセスする事が原理的には可能である。特に、ユーザ bootes としてログインできる !
ファイルサーバのホストオーナーは Plan 9 のファイルを更新するために sources.cs.bell-labs.com にアクセスに行く。その際ホストオーナーの factotum には(筆者の場合には)
key dom=outside.plan9.bell-labs.com proto=p9sk1 user=arisawa !password=xxxxx
この問題に対しての一応の対処として factotum には role 属性を指定できる。
key dom=outside.plan9.bell-labs.com proto=p9sk1 role=client user=arisawa !password=xxxxx
明らかに筆者の対処法は便宜的である。問題はデフォルトの追加のされかたにあるのだ。
auth/factotum -n
問題の解決策は何人かによって提案されている。それらの中で山梨氏のものがシンプルであり、しかもセキュリティ的に満足できる。彼のものは
key dom=outside.plan9.bell-labs.com proto=p9sk1 grid user=arisawa !password=xxxxx
alice@sources.cs.bell-labs.com
factotum のデフォルトの振る舞いに関して相変わらず筆者は不満である。何をデフォルトにすべきかと言う原則に反しているのである。筆者は次のような評価基準を持っている。