Profile(SELinux用語でポリシ)の作り方

ちょっとAppArmorのprofileを作ってみた。

genprofコマンド

Profileを作る場合は、genprofというコマンドを使うと便利。
genprofは、audit2allowとか、藤原さんのsegatexみたいなもの。
例えば、apacheのprofileを作る場合。
1) genprof起動
# genprof /usr/sbin/httpd2 (httpd2->httpd2-preforkというシンボリックリンク
とする。
すると、usr.sbin.httpd2-prefork
というファイルが/etc/apparmor.dに作成される。
2) Apacheをテストラン
Apacheがcomplainモード(SELinuxでいうpermissiveモード)
(AppArmorはcomplainモードをプログラム単位で設定できる)
にて起動する

3) 提示された設定を追加
すると、
# genprof /usr/sbin/httpd2
したターミナル
に次々に設定が提示される。
いいと思ったら「S」を押す。
ただ、うまくやらないとProfileの数が膨大になるかもしれない。
アクセスしたファイルの数だけ設定が提示されるので。

4) enforceモードで動作
で、十分テストランしたら
Apacheをenforceモードで動作させる
enforce /usr/sbin/httpd2
とする。

なお、unconfinedコマンドでenforcingモードの確認ができる。

で、提示されたprofileを手書きで最適化してもよい。
(ファイル単位の許可になっているのをディレクトリごと許可するなどして)

なぜSELinuxより簡単に思えるのか

ポリシ追加はSELinuxよりはるかに簡単。
audit2allowコマンドをちょっと頑張ってgenprofみたいにしても、
駄目だろう。原因を考えてみた。

 これは大きい。SELinuxパーミッションが多すぎるため、audit2allowで提示された設定が膨大になり、何がなんだか分からなくなる。可読性を高めようと思うと、もはや職人芸。

  • 2)AppArmorにはラベルが無い

 SELinuxのタイプを見ても、「オブジェクトは何か?」は、常人には想像しがたい。

SELinuxでは、neverallowが設定されたallow文を追加できないので、一般人は途方に暮れる。

  • 4)SELinuxのタイプ分けの手間

タイプ分けの見極めも,難しい。

  • 5) 設定反映の手間

AppArmorでは、設定を反映する手間が少ない。complainコマンド一発(またはrcapparmor restart)で反映される。SELinuxだと、ラベル付けのしなおしなどが面倒。

  • 6)SELinuxのファイルタイプ遷移

動的に生成、消去を繰り返すファイルにラベルを付与するファイルタイプ遷移の設定も、一般人には理解しづらい。

うーむこう見てみると、seeditで解決しようとした問題と重なるな。
#ちなみに,seeditは、6)の問題以外は軽減できそうな気がする。

ただ、以上のSELinuxの欠点(1,2,3,4)は、裏返すとセキュリティが高い理由にもなっている。
これらの欠点があるからこそ、
「到達可能なセキュリティレベル:SELinux>>越えられない壁>>AppArmor」となる。
しかし、
「ポリシカスタマイズの簡単さ:AppArmor >>越えられない壁>> SELinux」。
なっているわけだ。どちらを選ぶかは、ユーザー次第。