9月末または10月のリリースが予定されているFreeBSD 9.
- How to use cap_
new(2)? では、
実際にcap_ new(2)で与えた権限以外の処理をさせてみます。次のように 「read-cap3. c」 ファイルを用意します。ケーパビリティを作成する段階で読み込みだけを許可しておき、 ケーパビリティモードに入ってから書き込みをしてみます。 read-cap3. cファイル #include
h> #include h> #include h> #include h> #include h> #include h> #include h> #include capability. h> 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っぽい使い方を取り上げます。