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