FreeBSD Daily Topics

2011年8月26日Capsicumを知る - 「ケーパビリティ」いう保護機構を知ろう

9月末または10月のリリースが予定されているFreeBSD 9.0-RELEASEには新しいセキュリティ機能Capsicumが登場します。これでFreeBSDにおける主なファイル保護機構は3種類ということになります。Capsicumはケーパビリティの実装系のひとつと分類できるもので、既存の実装と相性がよく、少量のコードでアプリケーションやツールでケーパビリティを実現できるという特徴があります。

保護ドメインやアクセス制御リストなどの保護機構に慣れていると、この「ケーパビリティ」は理解しにくいところがあります。FDTではしばらく、Capsicumを理解するための概念的な説明や、実際の実装例などを紹介して「Capsicum」の機能を紹介していきます。

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の基本的なファイルパーミッションやアクセス制御リストとはだいぶ違った保護機構であること、などを把握しておいてください。

おすすめ記事

記事・ニュース一覧