9月末または10月のリリースが予定されているFreeBSD 9.0-RELEASEには新しいセキュリティ機能「Capsicum」が登場します。FDTではしばらく概念的な説明や、実際の実装例などを紹介して「Capsicum」の機能を紹介していきます。
- How to setup Capsicum?
Capsicumはデフォルトのカーネルでは有効になっていません。9.0-RELEASEではかわるかもしれませんが、少なくとも9-CURRENTでは無効になっています。Capsicumを利用するには最新の9-CURRENTで次のカーネルオプションを指定してカーネルを再構築する必要があります。
Capsicumが有効になると、sysctl(8)コマンドで次のように機能を確認できます。
まず最初に、テキストファイルを開くだけの簡単なプログラムを作成してCapsicumの動作を理解していきます。まず、カレントディレクトリに/COPYRIGHTファイルをコピーしてきて読み書きできるようにパーミッションを変更します。
次のようなソースコードを作成します。これを「open.c」として保存します。先ほど用意したテキストファイルをオープンして、ファイルディスクリプタを表示するだけのプログラムです。
次のようにコンパイルして実行します。期待通りの動きをしていることを確認できます。
次に、「open.c」でファイルをオープンする前に「cap_enter();」を実行するプログラムを「open-cap.c」として作成します。新しくファイルを開く前にケーパビリティモードに入るわけです。
このプログラムをコンパイルして実行すると、次のようにエラーが表示されます。ケーパビリティモードに入った以上、新しいファイルディスクリプタを作成することは、もはやできなくなったわけです。
これがCapsicumの提供するケーパビリティの基本的な使い方です。この場合、1行追加するだけでこの機能を利用できます。あとは、ケーパビリティモードに入るまえに、利用することになるすべてのファイルディスクリプタを権限を指定して用意するようにすれば、Capsicumを使ったセキュリティ強化の実装が完了するという仕組みです。
プログラミングはFreeBSDのユーザランドのコマンドなどを参考にしながら、オンラインマニュアルを読んでいけば大抵事足りますので、いろいろ試してみてください。以降何回か、Capsicumを使ったプログラミング例を紹介していきます。