

ユーザ none
目次
2004/11/07
ユーザ none とは
ユーザ none は UNIX の nobody に相当する。UNIX と同様にネットワークサービスの窓口に立つプロセスのユーザ ID である。UNIX との決定的な違いは none はパスワードによる認証によって他の任意のユーザに変身できるできる事にある。UNIX の場合はユーザの変身は root のプロセス(あるいは潜在的に root の特権を抱えているプロセス)によってしか実現できない。そのためにユーザの変身が要求されるサービス(telnet や ftp など)では root のプロセスがサービスの窓口に立つ事になる。この事が UNIX システムのセキュリティを脅かしている。
認証ルーチンのバグによって、不正アクセス者に管理者特権を与えてしまうことがあるシステム(UNIX)と、正当なアクセス者に none としての権利しか与えられないこともあるシステム(Plan 9)との差である。
ユーザ none の位置づけの変遷
2000 年 7 月まで
この時期は Plan 9 第2版および第3版の途中までである。この時期までは Plan 9 はユーザ none に対して比較的寛大であった。どのシステムユーザも none に変身できる。もちろんパスワードなしで。しかしこれはシステムユーザが信頼できる事を前提にしている。特に問題になるのは none のプロセスへの干渉である。none に対するこの考え方は Plan 9 第3版の途中(2000年7月)から変更された。以下はそのいきさつである。
From: Kenji Arisawa <arisawa@aichi-u.ac.jp> Subject: [9fans] user none Hello, I have a question. In Plan9, we have a rule: "everyone can become none." However user none plays important role for Internet service. What's wrong if we replace the rule by the following ? "Only host owner can become none." Thanks,これに対する Presotto (開発者の一人)の返答
From: presotto@plan9.bell-labs.com Date: Sun, 9 Jul 2000 10:55:49 -0400 To: arisawa@ar.aichi-u.ac.jp, 9fans@cse.psu.edu Subject: Re: [9fans] user none Off hand, I can't thing of anything that would break. In security, less priviledge is always better. I'll change it on our syystems and see if it does break anything.同月に Rob Pike が改訂のアナウンス
Subject: [9fans] Update From: "rob pike" <rob@plan9.bell-labs.com> Date: Sat, 29 Jul 2000 14:43:31 -0400 To: 9fans@cse.psu.edu I've just installed a new update for Plan 9 on http://plan9.bell-labs.com/plan9. You can install the full download, or do an incremental update from the June 17 distribution. There are many changes, including: A. The kernel: .... 12) Only 'eve' processes can become none. This is perhaps he most dangerous change. We are running with it but we don't know if this will affect others. ... -robeve process とはこの改訂によって生まれた新しい用語で、host owner のプロセスの事。
Plan9 第4版
最近 su [注1]を作って気がついた事であるが、none は再び第2版と同様にどのユーザも none に変身できるものと位置づけられた。その代わり、none 同士のプロセスの干渉はプロセスの名前空間の制限によって解決された[注2]。注1: su の詳細は "cap プログラミング"を見よ。また su のソースコードは http://plan9.aichi-u.ac.jp/netlib/cmd から手に入る。
注2: この事を確認するために読者はユーザ none になって ps を実行してみるがよい。筆者の su を使えば容易にユーザ none に変身できる。
さらに、none はファイルのアクセス制限に関して特別な扱いを受けている。none に対しては others の許可ビットで処理されているのである[注3]。例えば
--rw-rw---- none none .... /usr/none/tmpであるが none は /usr/none/tmp には書き込めない。
--rw-rw-rw- none none .... /usr/none/tmpとすれば書き込めるようになるが、この変更(chmod)は none 自身は行えない。
注3: この制限がいつから課されるようになったかは筆者の記憶では定かではない。第2版では課されていなかったように思われるが...
none と listen1
なぜ再びどのユーザも none になれるようになったのか...Plan 9 第4版では新たにユーザコマンド listen1 が導入された。これはエンドユーザも cpu サーバ上でネットワークのサービスプログラムを実行したいとの要求に応えたコマンドである。例えば cpu サーバ ar で次のように実行する
ar% aux/listen1 'tcp!*!2000' /bin/tr '[a-z]' '[A-Z]' listen startedすると Plan 9 端末から[注4]は
term% telnet -r tcp!ar!2000 connected to tcp!ar!2000 on /net/tcp/29 alice ALICE bob BOB term%のように ar のポート 2000 にアクセスし、サービスを受ける事ができる。
注4: UNIX からは
telnet ar 2000とする。
listen1 をオプションなしで実行するとユーザ none としてサービスを実行する。-t オプシヨンを付加すると listen1 を実行したユーザ名でサービスが実行される。
UNIX でも同様なプログラムを作成する事が可能であり、そのお陰で筆者が管理権を持たない UNIX システムに対して Plan 9 とのインターフェースを確立する上で筆者も恩恵を預かって来た。しかし UNIX ではエンドユーザは nobody としてサービスプログラムを実行する事はできない。つまり大きなリスクを伴うことになる。
なお Plan 9 ではシステムポートの概念を持っていない。空いていればどのユーザもそのポートでサービスを実行できる。その事が管理者側から見て困るようであれば、問題のポートを塞いでおく必要がある。また逆の立場、つまりPlan 9 の外の OS ユーザの立場から見て 1024 以下のポートの全てがシステム管理者の責任で運用されていると判断してはならない。