2011年1月8日土曜日

AppArmor on Ubuntu

AppArmorは、プログラム毎にファイルやソケットに対する強制的な(rootでも回避できない)アクセス制御を適用する機構であり、Ubuntu Serverにはデフォルトで入っている。

以前、AppArmorの存在を知らなかったために、トラブルの解決に時間がかかった経験があるため少し毛嫌いしていたが、セキュアなサーバを立てるために役立つ仕組みだし、無用なトラブルを避けるためにも簡単に調べてみた。

AppArmorと同様のセキュリティ機構としてはSELinuxが有名だが、それと比較して利用しやすいことが特徴らしい。

基本的な考え方

プログラム毎にプロファイルを用意し、その中にそのプログラムがアクセスできるファイル(read-only、read-writeといった設定可)、ディレクトリ、ソケット等を記述する。

AppArmor には、enforce/complain という二つのモードがある。
enforceとはアクセス制御が適用されている状態。complainはアクセス制御が適用されていないが、プログラムがどのようなアクセスをしているか記録している状態(学習状態と解釈してよい)。
すでにプロファイルが用意されている場合はenforceするだけでよいが、プロファイルが用意されていない、既存のプロファイルでは不十分といった場合には、complainモードで動作させて、apparmorのログをベースに、自分でプロファイルを作成(修正)する。


インストール

apparmor自体はデフォルトで入っているが、プロファイル集、プロファイル操作ツール類は別途インストールする。
sudo aptitude install apparmor-profiles apparmor-utils

プロファイル

ファイル名
パス名から頭の/を取って、他の / を . に置き換える。(例: /bin/ping なら bin.ping)

格納場所
/etc/apparmor.d 以下

テンプレート(?)
プロファイルから、他のプロファイルを読み込むことが可能で、/etc/apparmor.d/abstractions以下に、共通化されたプロファイルが用意されている。(例: /etc/apparmor.d/abstractions/nameservice 等)
また、

基本操作

状態の確認
sudo apparmor_status

enforce/complain modeになっているプログラム・プロセス、unconfined(プロファイルはあるがenforce/complainのどちらでもない状態)のプログラム・プロセスが表示される。

ログ
/var/log/messages に apparmor= を含むログが出力される。デフォルトでは、apparmorがブロックした操作(apparmor="DENIED")等が見られる。

enforce or complainモードへの移行
sudo aa-enforce <プログラム名>
sudo aa-complain <プログラム名>

complainモードを利用したプロファイルの作成
ubulog: ubuntuで AppArmor を使ってセキュアな環境を構築する にわかりやすく書かれている。

プロファイルの再読込
sudo service apparmor restart

プロファイルの削除
/etc/apparmor.d/disableに、プロファイルへのリンクを作成し、カーネルからプロファイルを削除する。
例)

sudo ln -s /etc/apparmor.d/bin.ping /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/bin.ping

参考
ubulog: ubuntuで AppArmor を使ってセキュアな環境を構築する
AppArmor - Community Ubuntu Documentation
[ThinkIT] AppArmor vs SELinuxの明日はどっちだ (1/3)

0 コメント: