AppArmor(Application Armor)とは、Linux Security Modulesの一種であり、各プログラムにセキュリティプロファイルを結びつけ、プログラムのできることに制限をかけるプログラムである。プロファイルは、ネットワークアクセス、Raw socket アクセス、ファイルへの読み書き実行などの機能を制限することができる。
AppArmor - Wikipedia
profile
profileとはあるプログラムのできること(例えば、xxxというファイルにアクセスするなど)を記述したものになっている。
profile mode
- enforce: 対象のプログラムがプロファイルに違反するとその処理を止める。
- complain: 対象のプログラムがプロファイルに違反するとその処理をログに残す。
- unconfined: 対象のプログラムがプロファイルに違反しても何もしない。
コマンド
aa-status, apparmor_status
全てのプロファイルを表示する。
aa-genprof
対話形式でプロファイルを生成してくれる。
このコマンドを実行すると、途中で対象のプログラムを実行するように求められる。
プログラムを実行すると、その実行ログに基づいて、プロファイルを生成してくれる。
作成されたプロファイルは自動でcomplainモードにセットされる。
aa-enforce
指定したプログラムのプロファイルをenforceモードに指定する。
aa-complain
指定したプログラムのプロファイルをcomplainモードに指定する。
aa-logprof
対象のプログラムのsyslogを元にプロファイルを更新してくれる。
どのプロファイルを対象とするか、どの挙動をプロファイルに含めるか等は対話形式で選択するようになっている。
aa-unconfined
TCP portやUDP portを開けるにも関わらず、AppArmorプロファイルがロードされていないプログラムの一覧を表示する。
apparmor_parse
profileの追加
apparmor_parser -a プロファイルのファイルパス
profileの削除
apparmor_parser -R プロファイルのファイルパス
profileのreplace
apparmor_parser -r プロファイルのファイルパス
DockerコンテナでAppArmorを使う場合
まず、host側でprofileを登録する。 dockerのコンテナ起動時に以下のようにする。
docker run --security-opt apparmor=プロファイル名