言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Linux & Mac & Bashコマンド辞典

  1. トップページ
  2. Linux & Mac & Bashコマンド辞典
  3. AppArmor

AppArmor

『AppArmor』は Ubuntu・Debian 系 Linux に標準搭載されている強制アクセス制御(MAC)フレームワークです。各アプリケーションに「プロファイル」を割り当てることで、プロセスがアクセスできるファイル・ネットワーク・システムコールを細かく制限します。aa-status で現在の状態を確認し、aa-enforce / aa-complain でプロファイルのモードを切り替えます。aa-genprof を使うとアプリケーションの動作を観察しながらプロファイルを自動生成できます。

構文

現在ロードされているプロファイルの一覧と enforce / complain モードの内訳を表示します。

sudo aa-status

『aa-enforce』で enforce モードに切り替えます。ルール違反のアクセスを実際にブロックします。引数にはプロファイルパスまたはバイナリパスを指定します。

sudo aa-enforce {プロファイルパスまたはバイナリパス}

『aa-complain』で complain モード(学習モード)に切り替えます。ルール違反のアクセスを許可しつつ syslog / audit に記録します。新しいプロファイルのテストや調整に使用します。

sudo aa-complain {プロファイルパスまたはバイナリパス}

『aa-disable』でプロファイルを完全に無効化します。AppArmor による制限が一切かかりません。

sudo aa-disable {プロファイルパスまたはバイナリパス}

プロファイルファイルを編集した後、『apparmor_parser -r』でカーネルへ再読み込みします(-r: reload)。『-R』でカーネルからアンロードします(-R: remove)。『--replace --write-cache』で再読み込みしてキャッシュも更新します。

sudo apparmor_parser -r {プロファイルパス}
sudo apparmor_parser -R {プロファイルパス}
sudo apparmor_parser --replace --write-cache {プロファイルパス}

『aa-genprof』でアプリケーションを動かしながら対話形式でプロファイルを作成します。AppArmor の学習モードで動作ログを収集します。

sudo aa-genprof {バイナリパス}

『aa-logprof』で /var/log/syslog または /var/log/audit/audit.log の AppArmor 拒否・complain ログをもとにプロファイルを更新します。aa-genprof の途中や complain 運用後の調整に使用します。

sudo aa-logprof

プロファイルは『/etc/apparmor.d/』に格納されます。ファイル名はパスの『/』を『.』に置換した形式が慣習です(例: /usr/sbin/nginx → usr.sbin.nginx)。『aa-disable』したプロファイルのシンボリックリンクは『/etc/apparmor.d/disable/』に作られます。

構文一覧

コマンド説明
aa-statusロード済みプロファイルの一覧と enforce / complain モード件数を表示します。現在の AppArmor の状態を把握する際に最初に実行します。
aa-enforce {プロファイル}指定したプロファイルを enforce モードに切り替えます。ルール違反のアクセスを実際にブロックします。
aa-complain {プロファイル}指定したプロファイルを complain モード(学習モード)に切り替えます。違反を許可しつつログに記録します。
aa-disable {プロファイル}プロファイルを完全に無効化します。AppArmor による制限がかかりません。
apparmor_parser -r {プロファイル}プロファイルファイルを編集した後にカーネルへ再読み込みします。-r は replace(置き換え)を意味します。
apparmor_parser -R {プロファイル}プロファイルをカーネルからアンロードします。
aa-genprof {バイナリ}アプリケーションを実際に動かしながら対話形式でプロファイルを生成します。新規プロファイル作成の出発点として使用します。
aa-logprofsyslog / audit ログの AppArmor エントリをもとにプロファイルを対話的に更新します。complain モード運用後の調整に使用します。
/etc/apparmor.d/プロファイルファイルの格納ディレクトリです。ファイル名はバイナリパスの /. に置換した形式が慣習です。
/etc/apparmor.d/disable/aa-disable したプロファイルのシンボリックリンクが配置されるディレクトリです。
systemctl reload apparmorAppArmor サービスを reload してすべてのプロファイルをカーネルへ再適用します。
systemctl status apparmorAppArmor サービス自体の起動状態を確認します。

使用例

プロファイルの確認と有効化

AppArmor が動作しているか、どのプロファイルが enforce / complain モードかを確認します。

$ sudo aa-status
apparmor module is loaded.
63 profiles are loaded.
61 profiles are in enforce mode.
   /usr/bin/evince
   /usr/sbin/nginx
   ...
2 profiles are in complain mode.
   /usr/local/bin/akane
   /usr/local/bin/ginoza
3 processes have profiles defined.
3 processes are in enforce mode.
   /usr/sbin/nginx (1842)
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

complain モードで動作確認してから enforce に切り替えます。complain モードはルール違反があっても処理をブロックせずにログへ記録します。アプリケーションを操作してログを収集してから『aa-logprof』で調整します。

$ sudo aa-complain /usr/local/bin/akane
$ sudo aa-logprof
$ sudo aa-enforce /usr/local/bin/akane
$ sudo aa-status | grep akane
   /usr/local/bin/akane
カスタムプロファイルの作成

aa-genprof を実行すると AppArmor が complain モードで監視を開始します。別ターミナルでアプリケーションを実際に動かしてアクセスするファイル・ネットワークを網羅的に使用し、元のターミナルで [S]can → [A]llow/[D]eny → [F]inish の流れでプロファイルを作成します。

$ sudo aa-genprof /usr/local/bin/ginoza
$ cat /etc/apparmor.d/usr.local.bin.ginoza
# Last Modified: Wed Mar 25 10:00:00 2026
#include <tunables/global>

/usr/local/bin/ginoza {
  #include <abstractions/base>
  #include <abstractions/nameservice>

  /usr/local/bin/ginoza mr,
  /var/log/psychopass/ r,
  /var/log/psychopass/** rw,
  /etc/psychopass/config.json r,
  network inet stream,
}

プロファイルを編集して再読み込みします。編集後はカーネルへ再読み込みします(サービス再起動は不要です)。enforce モードに切り替えて本番運用を開始します。

$ sudo nano /etc/apparmor.d/usr.local.bin.ginoza
$ sudo apparmor_parser -r /etc/apparmor.d/usr.local.bin.ginoza
$ sudo aa-enforce /usr/local/bin/ginoza
$ sudo aa-status | grep ginoza
   /usr/local/bin/ginoza

概要

『AppArmor』は Linux カーネルの LSM(Linux Security Module)フレームワーク上に実装された強制アクセス制御システムで、Ubuntu 7.10 以降すべての Ubuntu 系ディストリビューションに標準搭載されています。各プロセスに「プロファイル」を関連付けることで、そのプロセスがアクセスできるファイル・ディレクトリ・ネットワーク・ケーパビリティを最小権限の原則に従って制限します。ウェブサーバーや DNS サーバーなどの常駐プロセスが侵害された際の被害範囲をシステム全体に広げないためのコンテインメント層として機能します。

同じ MAC フレームワークである SELinux と比較すると、AppArmor はファイルパスベースでポリシーを記述するため設定が比較的わかりやすく、Ubuntu 系環境での導入障壁が低いという特徴があります。一方 SELinux はラベルベース(inode に紐付く)であるため、ファイルの移動・コピー後もポリシーが追跡できる堅牢性を持ちます。RHEL・AlmaLinux 系では SELinux が標準採用されており、詳細は SELinux のページを参照してください。AppArmor の拒否ログは auditd および /var/log/syslog に記録されます。ルール違反の調査には aa-logprof がログを自動的に読み取ってプロファイルの修正案を対話的に提示するため、complain モードを活用しながら段階的に enforce モードへ移行するワークフローが推奨されます。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。