以前から、単一のサーバプロセスで複数のユーザの処理を担う場合に、プロセスやアクセス制御レベルで適切に各ユーザで権限分離するにはどういうモデルが考えられるのかを既存の手法を踏まえつつ思考実験していました。それらを今回は簡単にまとめてみようと思います。
まずは前提として、
- 単一のサーバプロセスで複数のユーザを権限分離する
- 任意アクセス制御(Discretionary Access Control:DAC)による権限分離を前提とする
- 不特定多数のクライアントからサーバへのアクセスがある
- クライアントはサーバに自身のユーザ権限で任意のプログラムを配置する事ができる
- 設置プログラムを介してシステムを変更されないようにする
- 他のクライアントのプログラムを変更できないようにする
であり、このような状況でプロセス(スレッド)やアクセス制御のレベルでいかに権限分離を行いセキュリティを担保できるかを考えてみました。この前提条件の意図は最後のまとめでも言及しますが、これを達成するためにはどういう権限分離のモデルが考えられるのでしょうか。ではいってみましょう。
この場合、性能を考慮した権限分離モデルとしては大きく以下の6つの方式に分けられるように思います。