FreeBSD Daily Topics
2011年9月8日 Capsicumを知る - ケーパビリティを取得するcap_new(2) その2
9月末または10月のリリースが予定されているFreeBSD 9.0-RELEASEには新しいセキュリティ機能「Capsicum」が登場します。FDTではしばらく概念的な説明や,実際の実装例などを紹介して「Capsicum」の機能を紹介していきます。
- How to use cap_new(2)?
では,実際にcap_new(2)で与えた権限以外の処理をさせてみます。次のように「read-cap3.c」ファイルを用意します。ケーパビリティを作成する段階で読み込みだけを許可しておき,ケーパビリティモードに入ってから書き込みをしてみます。
read-cap3.cファイル
#include
#include #include #include #include #include #include #include int main(void) { int fd, cap, len; char bf[BUFSIZ], bf2[] = "a"; fd = open("COPYRIGHT", O_RDWR); if (-1 == fd) err(EX_NOPERM, "open error: %d", errno); // 読み込みだけを許可したケーパビリティを作成 cap = cap_new(dup(fd), CAP_READ | CAP_SEEK); if (-1 == cap) err(EX_NOPERM, "cap_new error: %d", errno); close(fd); cap_enter(); // 書きこんでみる len = write(cap, bf2, 1); if (-1 == len) err(EX_NOPERM, "write error: %d", errno); return 0; } 次のように,書き込みは許可されていないので処理できません。
% clang read-cap3.c % ./a.out a.out: write error: 93: Capabilities insufficient %
この使い方だと既存のopen(2)時にリードオンリーの指定をするのとあまりかわりませんが,基本的な使い方ということで紹介しておきました。次はもうちょっとCapsicumっぽい使い方を取り上げます。
FreeBSD Daily Topics
- 2011年9月8日 Capsicumを知る - ケーパビリティを取得するcap_new(2) その2
- 2011年9月7日 Capsicumを知る - ケーパビリティを取得するcap_new(2)
- 2011年9月6日 Capsicumを知る - カーネルの再構築と最初のプログラミング
- 2011年9月1日 Capsicumを知る - Chromeなど優れた事例,本格活用はこれから