AppArmor - Ubuntu

  • 作成日:
  • 最終更新日:2025/08/10

AppArmor とは?

Ubuntuでは、SELinuxの代替として主に AppArmor が使われます。AppArmor も同じくMAC方式のアクセス制御ですが、設定方法やポリシー記述がSELinuxより簡易で、UbuntuやDebian系ディストリビューションでは標準で有効になっていることが多いです

Ubuntuのほとんどの公式ISOには、apparmor パッケージと apparmor-utils が最初から含まれており、有効化されています。

apparmor-utilsがインストールされていない場合は、以下のコマンドを実行しインストールします。

sudo apt install apparmor-utils

コマンド

サービスの状態確認を確認するには、以下のコマンドを実行します。

systemctl status apparmor

プロファイルの状態確認するには、以下のコマンドを実行します。

sudo aa-status

apparmor-utils

AppArmor のモードは以下の表のようになります。

モード 内容
enforce ポリシー違反があればアクセスを拒否し、ログも残す
complain アクセスを拒否せず、違反内容をログに記録する

complain モードでは、違反は/var/log/syslogまたは journalctl に記録されます。以下の方法で確認できます。

sudo journalctl -k | grep DENIED

sudo grep DENIED /var/log/syslog

Nginx用AppArmorプロファイル

以下のコマンドを実行し、ファイルを作成します。

sudo vi /etc/apparmor.d/usr.sbin.nginx

ファイルを以下のようにします。

#include 

/usr/sbin/nginx {
  # Nginxが使う基本的なケーパビリティ
  capability net_bind_service,
  capability setuid,
  capability setgid,

  # 実行ファイル
  /usr/sbin/nginx mr,

  # 設定ファイルの読み取り
  /etc/nginx/** r,

  # PIDファイル
  /run/nginx.pid rw,

  # ログへの書き込み
  /var/log/nginx/** rw,

  # 静的ファイル(例:DocumentRoot)
  /var/www/** r,

  # SSL証明書の読み取り
  /etc/ssl/** r,

  # Node.jsと連携するUnixソケット
  /run/node-app.sock rw,

  # ライブラリや共有オブジェクト
  /usr/lib/** rm,
  /lib/** rm,
}

プロファイルを適用するには、以下のコマンドを実行します。

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

プロファイルを適用した後は、complain モードで様子を見ログを確認します。問題がなければ強制モードで利用します。

# complain モード
sudo aa-complain /usr/sbin/nginx

# 動作ログの確認
sudo journalctl -k | grep DENIED

# 強制モード
sudo aa-enforce /usr/sbin/nginx