SELinux drivenなソフトウェア開発についての雑感

(以下、どっかに書いたメモ、もしくは読んだこと?の再録です)
いまだに「インストールする場合にはSELinuxはオフにして」というソフトウェアがあるみたいだけど、SELinuxへの対応は、ソフトウェア開発者にとって余計な手間と考えるべきじゃないんだと思う。
まず、要件定義の段階で、ソフトウェアの5W1Hのうち、外部とのインターフェースに関することが明確になるのが本来当たり前、というか、そこが決まらないということは、普通あんまりない。
そして、これに基づいてソフトウェアの動作とアクセス対象についてコンテキストを設定することになる。
次に、テスト工程では、
・インストール
・初期設定
・実行
・設定変更(ユーザ追加、データ追加とか)
・アンインストール
とか、それぞれの局面(usecase)について、コンテキストの変化や、ファイルの生成とラベル付けが、これまたすぐにに決まるわけで、セキュリティコンテクストが正しいかどうか=想定したとおりにファイルにアクセスしているかどうかが、stubコードに機能を追加しながら、すぐに、そして常に、確認できる。
たとえば、アンインストールの際も、作成、変更されるファイルのコンテキストがすべからくドキュメント化され、policyに反映されていれば、仕様どおりかどうか常にテストされていることになるわけで、それに基づいてお掃除すれば、まず基本的なことは簡単に押さえられるだろう。
どちらかというと、インストール、アンインストールの局面でこそ、SELinuxに取り組むことはメリットだと思う。

現在は、クリーンな仮想環境をベースにして、セットアップのテストをかなり自由・頻繁にできるようになったのだから、SELinux対応、というかコンテクストの把握の常時監視というのは、開発プロセスに組み込んで損の無いものだと思うのだがな。
問題は、仕様をコンテキストに落とし込むためのツール、リテラシー、テンプレート等の普及かな。教育のインパクトを高めるために「成功事例」ってのも大切だし、「想定したことだけができる」っていうことに対するハッカー(=能力の高いプログラマ)の拒絶反応も緩和する必要があるだろう。