Ubuntu / Debian / openSUSE 系で採用される Mandatory Access Control(強制アクセス制御) システム。Linux カーネルの LSM(Linux Security Module) フレームワーク上に実装され、プログラムごとに「どのファイルを読み書きできるか」「どの能力(capability)を使えるか」「どのネットワーク操作が可能か」「user namespace を作れるか」などを プロファイルで宣言的に制限する。
SELinux との違い
| 観点 | AppArmor(Ubuntu / SUSE) | SELinux(RHEL / Fedora) |
|---|---|---|
| 識別方式 | パスベース | ラベルベース |
| 学習コスト | 低 | 高 |
| 表現力 | やや限定的 | 細粒度 |
| デフォルト採用 | Ubuntu / openSUSE | RHEL / Fedora |
Ubuntu ではデフォルト有効で、firefox evince lxc などにあらかじめプロファイルが用意されている。
プロファイルの基本構造
/etc/apparmor.d/<profile-name>
abi <abi/4.0>,
include <tunables/global>
profile myapp /usr/bin/myapp flags=(unconfined) {
userns,
/home/*/Documents/** rw,
network inet,
include if exists <local/myapp>
}
| 要素 | 意味 |
|---|---|
flags=(unconfined) | プロファイル自体は制限しない(user namespace 許可など個別ルールだけを足す) |
userns, | 非特権 user namespace の作成許可 |
/path/** rw, | 指定パス以下を読み書き可能に |
network inet, | TCP/IP 通信を許可 |
include if exists <local/...> | ローカルカスタマイズ用 |
反映と確認
# プロファイル再読み込み
sudo apparmor_parser -r /etc/apparmor.d/<profile-name>
# 全プロファイルの状態確認
sudo aa-status
Ubuntu 23.10 以降の userns 制限
23.10 から kernel.apparmor_restrict_unprivileged_userns=1 がデフォルト有効化され、Electron 系アプリ(Obsidian / Cursor / Insomnia / Postman など)の SUID sandbox がエラーで起動しなくなる。各アプリ用の AppArmor プロファイルで userns, を許可すれば、サンドボックスを保ったまま起動できる。
--no-sandbox 起動との比較
| 方法 | セキュリティ | 影響範囲 |
|---|---|---|
AppArmor プロファイル + userns, 許可 | ◎ Electron 内部 sandbox を維持 | 該当アプリのみ |
--no-sandbox 起動 | ✗ Electron sandbox 無効化 | 該当アプリのみ |
sysctl で全体緩和 | △ システム全体緩和 | OS 全体 |
関連記事
- Ubuntu データ層 — rclone Drive + QNAP NAS + Obsidian Vault — シリーズ第 5 回(Obsidian / Cursor / Insomnia 等への横展開)