SELinuxのアクセス制御をアプリに

とあるアプリケーションに対して、SELinuxを使ったアクセス制御を適用できないかと思っており、調べている。
お、まさに↓の人と同じ悩みだ。参考になる。
http://sourceforge.jp/projects/jsosug/lists/archive/users/2008-October/000034.html
↓あたりを読めばなんとなく分かるのだろうか。。

  • How to Write a Userspace Object Manager

http://www.engardelinux.org/modules/index/list_archives.cgi?list=selinux&page=0321.html&month=2008-11
http://www.secureos.jp/index.php?Documents%2FUserspaceObjectManager

  • Userspace AVC

http://manpages.ubuntu.com/manpages/dapper/man3/avc_init.3.html

以上からなんとなく分かったこと

セキュリティポリシファイル内で、アプリ独自のパーミッションを定義、
アプリ側で、オブジェクトにセキュリティコンテキストを付与するように拡張、
そして、アプリ側で
↓のlibselinuxの関数を呼べば、パーミッションチェックができる
int security_compute_av(security_context_t scon,
security_context_t tcon,
security_class_t tclass,
access_vector_t requested, struct av_decision *avd)

security_compute_av(サブジェクトのセキュリティコンテキスト、アプリ内のオブジェクトのセキュリティコンテキスト、アプリ独自のオブジェクトクラス、アプリ独自のパーミッション、結果)
のように呼ぶ。
これで十分じゃんと思ったのだが、
security_compute_avは、直接セキュリティポリシをクエリすると思うので低速なはず

そこで出てくるのがuserspace avc?
カーネル内のSELinuxパーミッションチェックするときは、カーネルがAVCというキャッシュにアクセス制御結果をキャッシュしているため、カーネル内のSELinuxパーミッションチェックは高速。
このAVCをアプリ側で持とうというのがuserspace avcのようだ
avc_initとかいうlibselinux関数を使いuserspace avcを初期化、
avc_has_perms関数でパーミッションチェック。
avc_has_permsのパーミッションチェックではuserspace avcを見に行くので高速。