9月末または10月のリリースが予定されているFreeBSD 9.
保護ドメインやアクセス制御リストなどの保護機構に慣れていると、
- What's Capability?
OSにおいてファイルを保護する機構はいくつかあります。このあたりの話はAndrew S. Tanenbaum氏の書籍
「モダンオペレーティングシステム 原著第2版」 の第9章6節 「保護機構」 によくまとまっています。興味がある方はぜひ一度読むことをお薦めします。 「モダンオペレーティングシステム」 ではファイルの保護機構として 「保護ドメイン」 「アクセス制御リスト」 「ケーパビリティ (資格)」の3つの機構を紹介しています。 「保護ドメイン」 は 「リソースとそのリソースに対して許可される操作」 のある集合をドメインとして定義する保護機構です。ここではドメインはユーザとして考えるとわかりやすくなります。ファイルとファイルのパーミッション (読み、 書き、 実行) をあるユーザに結びつけているということです。いわゆるFreeBSDの基本的なファイルパーミッションは、 この 「保護ドメイン」 のひとつの実装系、 ということになります。 「アクセス制御リスト」 は、 リソースに対して 「あるドメインとそのリソースに対して許可される操作の集合」 を関連付けるというものです。ファイルに対して 「ユーザAには読み込みを許可、 ユーザBには読み書きを許可、 ユーザCにはなにも許可しない」 といったデータを関連付ける方法です。FreeBSDではsetfacl(1)およびgetfacl(1)などでアクセス制御リストの設定や設定内容の閲覧が可能です。 「保護ドメイン」 や 「アクセス制御リスト」 は、 いわばファイルが操作の許可情報を持っています。ファイルにアクセスする度に許可をチェックし、 そこで操作の是非を判断する方法です。一方、 「ケーパビリティ」 では、 ファイルには操作許可といった情報を与えません。かわりに、 プロセスそのものがリソースに対する操作許可情報を保持します。 ここでは
「Capsicum」 の実装の側面から 「ケーパビリティ」 を見ていくと、 実感として理解しやすくなります。UNIX系OSではファイルディスクリプタを利用することで 「ケーパビリティ」 を実現する方法がよく使われます。 「Capsicum」 もそうです。UNIX系OSではファイルなどのリソースへのアクセスにはファイルディスクリプタが使われます。このファイルディスクリプタそのものに操作許可情報を設定するというのが、 UNIX系OSでよく採用されるケーパビリティの実装方法です。 なぜこのような方法が採用されるのか不思議に思うかもしれませんが、
「保護ドメイン」 や 「アクセス制御リスト」 では実現しにくい部分で、 この 「ケーパビリティ」 は力を発揮します。まず、 アクセスするごとにリソースに権限をチェックしにいく必要がありません。また、 分散システムと相性がよいという特徴があります。 かといって
「ケーパビリティ」 は 「保護ドメイン」 や 「アクセス制御リスト」 を置き換えるようなものではありません。それぞれの保護機構には得手不得手があります。置き換えるというよりも、 ケースに応じて補完し合う保護機構といえます。ここでは 「Capsicum」 は 「ケーパビリティ」 と呼ばれるファイル保護機構のひとつを実現するための、 ひとつの実装系であること、 FreeBSDの基本的なファイルパーミッションやアクセス制御リストとはだいぶ違った保護機構であること、 などを把握しておいてください。