Logo address

ユーザ 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.
...

-rob
eve 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 以下のポートの全てがシステム管理者の責任で運用されていると判断してはならない。