「AppArmor」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(同期)
(同期)
3行目: 3行目:
 
[[en:AppArmor]]
 
[[en:AppArmor]]
 
{{Related articles start}}
 
{{Related articles start}}
  +
{{Related|セキュリティ}}
 
{{Related|TOMOYO Linux}}
 
{{Related|TOMOYO Linux}}
 
{{Related|SELinux}}
 
{{Related|SELinux}}
 
{{Related articles end}}
 
{{Related articles end}}
 
[[Wikipedia:AppArmor|AppArmor]] は[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (MAC) のシステムです。[[Wikipedia:ja:Linux_Security_Modules|Linux Security Modules]] (LSM) 上に実装されています。
 
[[Wikipedia:AppArmor|AppArmor]] は[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (MAC) のシステムです。[[Wikipedia:ja:Linux_Security_Modules|Linux Security Modules]] (LSM) 上に実装されています。
  +
  +
他の LSM と同じように、AppArmor はデフォルトの任意アクセス制御 (DAC) を置き換えるというよりも補完するものです。そのため、プロセスに最初から持っている権限よりも高い権限を与えることはできません。
  +
  +
Ubuntu や SUSE などのディストリビューションはデフォルトで AppArmor を使用しています。RHEL (とその派生) は正しく機能させるのにユーザー空間における設定が必要になる SELinux を使っています。SELinux は全てのファイル・プロセス・オブジェクトにラベルを貼るため非常に柔軟性があります。しかしながら SELinux の設定は非常に複雑で、ファイルシステムが SELinux に対応していなければなりません。それに比べて AppArmor はファイルパスを使用するため簡単に設定することができます。
  +
  +
AppArmor は外部・内部からの脅威に対してオペレーティングシステムやアプリケーションを防護します。アプリケーションごとにルールセットを決めることでゼロデイ攻撃からも身を守ることができます。セキュリティポリシーによって個々のアプリケーションがアクセスできるシステムリソースは厳格に定められます。何もプロファイルが設定されていない場合、デフォルトでアクセスは拒否されます。AppArmor に付属しているデフォルトポリシーは少ない数しかありません。高度な静的解析・学習ツールを使用することで、非常に複雑なアプリケーションでも問題なく動作するような AppArmor ポリシーを数時間で作成できます。
  +
  +
ポリシー違反が発生するとシステムログにメッセージが残ります。また、AppArmor ではデスクトップにポップアップを表示することで、リアルタイムにユーザーに通知するように設定することもできます。
   
 
== インストール ==
 
== インストール ==
 
=== カーネル ===
 
=== カーネル ===
   
  +
{{Note|論争になっているユーザー名前空間 ({{ic|1=CONFIG_USER_NS=Y}}) は[[カーネル]]コンフィグでは設定できませんが、AppArmor に機能を追加することができます。ユーザー名前空間については {{bug|36969}} を参照してください。}}
カーネルをコンパイルするときに、以下のオプションを使用する必要があります:
 
  +
  +
カーネルをコンパイルするとき、以下のオプションを設定する必要があります:
  +
 
CONFIG_SECURITY_APPARMOR=y
 
CONFIG_SECURITY_APPARMOR=y
 
CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
 
CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
17行目: 29行目:
 
CONFIG_AUDIT=y
 
CONFIG_AUDIT=y
   
  +
上記の変数が上書きされないように、コンフィグファイルの一番下に変数を記述するようにしてください。
{{ic|CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE}} と {{ic|CONFIG_DEFAULT_SECURITY_APPARMOR}} を使うかわりに、[[カーネルパラメータ|カーネルブートパラメータ]]を設定することもできます: {{ic|apparmor=1 security=apparmor}}。
 
   
  +
{{ic|CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE}} や {{ic|CONFIG_DEFAULT_SECURITY_APPARMOR}} を設定する代わりに、次の[[カーネルパラメータ|カーネルブートパラメータ]]を設定しても効果があります: {{ic|1=apparmor=1 security=apparmor}}。
AUR には AppArmor が有効になっているカーネルが存在します: {{AUR|linux-apparmor}}{{Broken package link|{{aur-mirror|linux-apparmor}}}}。ただし、2015年5月現在、このカーネルはやや古くなっています。
 
   
 
=== ユーザースペースツール ===
 
=== ユーザースペースツール ===
  +
  +
{{Note|AppArmor はカーネルモジュールをビルド・インストールするため、カーネルがアップデートされるたびに再ビルドする必要があります。}}
   
 
AppArmor を制御するためのユーザースペースツールとライブラリは [[AUR]] の {{AUR|apparmor}} パッケージに入っています。
 
AppArmor を制御するためのユーザースペースツールとライブラリは [[AUR]] の {{AUR|apparmor}} パッケージに入っています。
34行目: 48行目:
 
* apparmor-vim
 
* apparmor-vim
   
起動時に AppArmor プロファイルをロードするための systemd ユニットが {{AUR|apparmor}} パッケージに含まれています:
+
起動時に AppArmor プロファイルをロードするには {{ic|apparmor.service}} を[[有効化]]しくださ
# systemctl enable apparmor
 
   
 
=== テスト ===
 
=== テスト ===
   
 
再起動後、次のコマンドを root で使うことで AppArmor が本当に有効になってるかテストできます:
 
再起動後、次のコマンドを root で使うことで AppArmor が本当に有効になってるかテストできます:
# cat /sys/module/apparmor/parameters/enabled
+
{{hc|# cat /sys/module/apparmor/parameters/enabled|Y}}
Y
 
 
(Y=有効, N=無効, no such file = カーネルに該当モジュールなし)
 
(Y=有効, N=無効, no such file = カーネルに該当モジュールなし)
 
{{Note|AppArmor はカーネルモジュールをビルド・インストールするので、カーネルをアップデートするたびに再ビルドする必要があります。}}
 
   
 
== 無効化 ==
 
== 無効化 ==
  +
現在のセッションにおいてのみ AppArmor を無効化するには、{{ic|apparmor.service}} を[[systemd#ユニットを使う|停止]]してください。[[systemd#ユニットを使う|無効化]]すると次の起動時に実行されなくなります。
一時的に AppArmor を無効化するには、[[カーネルパラメータ|カーネルブートパラメータ]]に {{ic|apparmor=0 security=""}} を追加します。
 
   
  +
また、[[カーネルパラメータ|カーネルブートパラメータ]]に {{ic|1=apparmor=0 security=""}} を追加することで AppArmor が必要とするカーネルモジュールを無効化することもできます。
もしくは次のコマンドを実行することで現在のセッションにおいてのみ無効化できます:
 
# systemctl stop apparmor.service
 
   
  +
== 設定 ==
== 新しいプロファイルの作成 ==
 
  +
{{ic|aa-genprof}} を使って新規プロファイルを作成するには、{{Pkg|audit}} パッケージの {{ic|auditd.service}} を動作させる必要があります。作成した後は無駄なのでサービスを停止 (そして {{ic|auditd.service}} を消去) してください。
 
  +
=== 監査とプロファイルの作成 ===
  +
{{ic|aa-genprof}} を使って新規プロファイルを作成するには、{{Pkg|audit}} パッケージの {{ic|auditd.service}} を動作させる必要があります。Arch Linux は systemd を使用しておりデフォルトではファイルにカーネルログを出力しないためです。Apparmor はユーザー空間の auditd デーモンからカーネルの監査ログを取得してプロファイルを作成することができます。カーネルの監査ログを取得するには、ルールを作成して動作させたいアプリケーションを監視する必要があります。大抵のルールは {{man|8|auditctl|url=http://linux.die.net/man/8/auditctl}} で設定することができます:
  +
  +
# auditctl -a exit,always -F arch=b64 -S all -F path=/usr/bin/chromium -F key=MonitorChromium
  +
  +
詳しくは [[Audit フレームワーク#ルールの追加]]を読んでください。
  +
  +
{{Note|プロファイルを作成した後は無駄なのでサービスを停止 (そして {{ic|/var/log/audit/audit.log}}) を消去) してください。}}
  +
  +
=== プロファイルの構文 ===
  +
  +
プロファイルは人間が読める形式のテキストファイルとなっており {{ic|/etc/apparmor.d/}} に保存されます。バイナリを実行時にどう扱うかを記述します。基本的なプロファイルは以下のようになります:
  +
  +
{{hc|/etc/apparmor.d/usr.bin.test|
  +
#include <tunables/global>
  +
  +
profile test /usr/lib/test/test_binary {
  +
#include <abstractions/base>
  +
  +
# Main libraries and plugins
  +
/usr/share/TEST/** r,
  +
/usr/lib/TEST/** rm,
  +
  +
# Configuration files and logs
  +
@{HOME}/.config/ r,
  +
@{HOME}/.config/TEST/** rw,
  +
}
  +
}}
  +
  +
{{ic|@}} 記号が前に付くテキストは abstraction ({{ic|/etc/apparmor.d/abstractions/}}) や tunable ({{ic|/etc/apparmor.d/tunables/}}) あるいはプロファイルによって定義される変数を表します。{{ic|#include}} は他のプロファイルふを直接読み込みます。後ろに文字がいくつか付いているパスは [http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#File_access_rules アクセス権限] です。[http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#AppArmor_globbing_syntax AppArmor の globbing 構文] を使用したパターンマッチングが行われます。
  +
  +
ほとんどのユースケースは以下のステートメントで表すことができます:
  +
  +
* {{ic|r}} — read: データの読み込み。
  +
* {{ic|w}} — write: ファイルの作成・削除・編集と拡張。
  +
* {{ic|m}} — memory map executable: ファイルを実行可能とメモリマップ。
  +
* {{ic|x}} — execute: ファイルを実行。[http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#Execute_rules 修飾子] を付ける必要があります。
  +
  +
上記の権限は任意アクセス制御 (DAC) によって与えられる権限を上回ることはできません。
  +
  +
詳しいガイドは [http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference ドキュメント] を見てください。
  +
  +
=== プロファイルの解析 ===
  +
  +
プロファイルをロード・アンロード・リロード・確認するには {{ic|apparmor_parser}} を使います。デフォルトでは新しいプロファイルをロードするようになっており ({{ic|-a}})、既存のプロファイルを上書きするには {{ic|-r}} オプションを、プロファイルを削除するには {{ic|-R}} を使います。各操作では複数のプロファイルを指定できます。詳しくは {{man|8|apparmor_parser|url=http://man.cx/apparmor_parser(8)}} の man ページを参照してください。
   
 
== セキュリティについての考察 ==
 
== セキュリティについての考察 ==
 
=== リンクによるパスベースの MAC の迂回 ===
 
=== リンクによるパスベースの MAC の迂回 ===
   
標準の POSIX セキュリティモデルでは、ハードリンクを使うことで AppArmor は迂回できるようになっています。ただし、現在カーネルにはの脆弱性をぐ機能が備わっており、Ubuntu など他のディストリビューションのようにカーネルにパッチを適用する必要はなくなっています
+
標準の POSIX セキュリティモデルでは、ハードリンクを使うことで AppArmor は迂回できるようになっています。ただし、カーネルには以下設定で脆弱性をぐ機能が備わっています [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=800179c9b8a1e796e441674776d11cd4c05d61d7]:
   
  +
{{hc|/usr/lib/sysctl.d/50-default.conf|2=
詳しくは[[セキュリティ#リンクの TOCTOU 攻撃を防止する]]を見て下さい。
 
  +
...
  +
fs.protected_hardlinks = 1
  +
fs.protected_symlinks = 1}}
  +
  +
Ubuntu などのようにカーネルにパッチをあてる方法は必ずしも必要とされません。
   
 
== Tips and tricks ==
 
== Tips and tricks ==
 
=== DENIED アクション時にデスクトップ通知を表示 ===
 
=== DENIED アクション時にデスクトップ通知を表示 ===
AppArmor が "DENIED" ログエントリを残したときにデスクトップ通知を表示したい場合、以下のようにして通知デーモンを起動してください:
+
通知デーモンは AppArmor によってプログラムのアクセスが拒否されたときにデスクトップ通知を表示します。ブートされるパラメータを指定してスクリプトを起動する必要があります:
# aa-notify -p --display $DISPLAY
 
上記のデーモンはマシンを起動するたびに実行する必要があります。
 
   
  +
# aa-notify -p -f /var/log/audit/audit.log --display $DISPLAY
== その他 ==
 
AppArmor は他の LSM と同じように、デフォルトの任意アクセス制御を置き換えるというよりは補足するものです。そのため、任意アクセス制御の段階よりも強力な権限をプロセスに与えることは出来ません。
 
   
  +
デーモンは監査イベントに依存しており、{{ic|-f}} を使うことでログ出力されるテキストファイルを指定できます。[[systemd]] がファイルにログ出力しないように {{ic|auditd.service}} を[[有効化]]してログファイルを {{ic|aa-notify}} に渡してください。動作させるのに特殊な監査イベントは必要ありません。したがってオーバーヘッドは[[#監査とプロファイルの作成|プロファイルを作成]]することに比べれば少なくなっています。
Ubuntu や SUSE など多数のディストリビューションは AppArmor をデフォルトで使用しています。RHEL (やその亜種) は SELinux を使っています。SELinux は正しく動作させるためにユーザースペースでの工夫が必要となります。また、SELinux は適切に設定するのが大変難しいというのも周知です。
 
   
  +
=== プロファイルのキャッシュ ===
例を上げると、新しい Flash の脆弱性が考えられます: 悪意のあるウェブサイトにアクセスしたとき、AppArmor は脆弱性があるプラグインから個人情報にアクセスされることを防ぐことができます。ほとんどのブラウザで、プラグインのプロセスは簡単に分離することができます。
 
   
AppArmor プロファイルは (大抵) {{ic|/etc/apparmor.d}} 簡単に読めテキストファイルして保存されます。
+
AppArmor は設定されたプロファイルをバイナリ形式翻訳す必要があるため、プロファイルのロードにはばらく時間がかかります。煩わしいことに起動時間がかなり伸びしまいます。
   
  +
そのような問題を解決するため AppArmor では {{ic|/etc/apparmor.d/cache/}} にプロファイルをキャッシュすることができます。ただしキャッシュはデフォルトで無効になっているため {{ic|apparmor_parser}} で手動でキャッシュする必要があります。キャッシュに書き込むには {{ic|-W}} を使用し ({{ic|-T}} で既存のプロファイルを上書き)、{{ic|-r}} でプロファイルをリロードします。他の引数については[[#プロファイルの解析|プロファイルの解析]]を見てください。
ポリシーが侵害された場合システムログにメッセージが残り、多くのディストリビューションでは DBUS と連携してデスクトップ上に警告メッセージとしてリアルタイムで表示します。
 
   
 
== 参照 ==
 
== 参照 ==
* 公式ページ
 
** カーネル: https://apparmor.wiki.kernel.org/ http://wiki.apparmor.net/
 
** ユーザースペース: https://launchpad.net/apparmor
 
 
* http://www.kernel.org/pub/linux/security/apparmor/AppArmor-2.6/
 
* http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference
 
   
  +
* [http://wiki.apparmor.net/ AppArmor wiki]
* http://ubuntuforums.org/showthread.php?t=1008906 (チュートリアル)
 
  +
* [http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference AppArmor Core Policy Reference] — プロファイルで利用できるオプションの詳しい解説
* https://help.ubuntu.com/community/AppArmor
 
  +
* [http://ubuntuforums.org/showthread.php?t=1008906 Ubuntu Tutorial] — 利用可能なユーティリティとプロファイルの作成に関する概要
*{{Bug|21406}}
 
  +
* [https://help.ubuntu.com/community/AppArmor Ubuntu Wiki] — 基本的なコマンドの一覧
* http://stuff.mit.edu/afs/sipb/contrib/linux/Documentation/apparmor.txt
 
* http://wiki.apparmor.net/index.php/Kernel_interfaces
+
* [http://wiki.apparmor.net/index.php/AppArmor_versions AppArmor Verions] — Version overview and links to the respective release notes
  +
* {{man|5|apparmor.d|url=http://manpages.ubuntu.com/manpages/oneiric/man5/apparmor.d.5.html}} — AppArmor の設定ディレクトリの構造
* http://wiki.apparmor.net/index.php/AppArmor_versions
 
* http://manpages.ubuntu.com/manpages/oneiric/man5/apparmor.d.5.html
+
* {{man|8|apparmor_parse|url=http://manpages.ubuntu.com/manpages/oneiric/man8/apparmor_parser.8.html}} — The most fundamental AppArmor utility to load, unload, cache and stat profiles
  +
* [http://wiki.apparmor.net/index.php/Kernel_interfaces Kernel Interfaces] — AppArmor カーネルモジュールの低レベルインターフェイス
* http://manpages.ubuntu.com/manpages/oneiric/man8/apparmor_parser.8.html
 
  +
* [https://wiki.ubuntu.com/ApparmorProfileMigration Apparmor Profile Migration] — Emergence of profiles
* http://wiki.apparmor.net/index.php/Distro_CentOS
 
  +
* [[wikipedia:Linux Security Modules]] — AppArmor が使用している Linux カーネルモジュール
* http://bodhizazen.net/aa-profiles/
 
  +
* [https://launchpad.net/apparmor Launchpad プロジェクトページ]
* https://wiki.ubuntu.com/ApparmorProfileMigration
 
  +
* {{Bug|21406}} — AppArmor の導入に関する議論
* [[wikipedia:ja:Linux_Security_Modules]]
 
* http://wiki.apparmor.net/index.php/Gittutorial
 

2016年11月7日 (月) 21:34時点における版

関連記事

AppArmor強制アクセス制御 (MAC) のシステムです。Linux Security Modules (LSM) 上に実装されています。

他の LSM と同じように、AppArmor はデフォルトの任意アクセス制御 (DAC) を置き換えるというよりも補完するものです。そのため、プロセスに最初から持っている権限よりも高い権限を与えることはできません。

Ubuntu や SUSE などのディストリビューションはデフォルトで AppArmor を使用しています。RHEL (とその派生) は正しく機能させるのにユーザー空間における設定が必要になる SELinux を使っています。SELinux は全てのファイル・プロセス・オブジェクトにラベルを貼るため非常に柔軟性があります。しかしながら SELinux の設定は非常に複雑で、ファイルシステムが SELinux に対応していなければなりません。それに比べて AppArmor はファイルパスを使用するため簡単に設定することができます。

AppArmor は外部・内部からの脅威に対してオペレーティングシステムやアプリケーションを防護します。アプリケーションごとにルールセットを決めることでゼロデイ攻撃からも身を守ることができます。セキュリティポリシーによって個々のアプリケーションがアクセスできるシステムリソースは厳格に定められます。何もプロファイルが設定されていない場合、デフォルトでアクセスは拒否されます。AppArmor に付属しているデフォルトポリシーは少ない数しかありません。高度な静的解析・学習ツールを使用することで、非常に複雑なアプリケーションでも問題なく動作するような AppArmor ポリシーを数時間で作成できます。

ポリシー違反が発生するとシステムログにメッセージが残ります。また、AppArmor ではデスクトップにポップアップを表示することで、リアルタイムにユーザーに通知するように設定することもできます。

インストール

カーネル

ノート: 論争になっているユーザー名前空間 (CONFIG_USER_NS=Y) はカーネルコンフィグでは設定できませんが、AppArmor に機能を追加することができます。ユーザー名前空間については FS#36969 を参照してください。

カーネルをコンパイルするとき、以下のオプションを設定する必要があります:

CONFIG_SECURITY_APPARMOR=y
CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
CONFIG_DEFAULT_SECURITY_APPARMOR=y
CONFIG_AUDIT=y

上記の変数が上書きされないように、コンフィグファイルの一番下に変数を記述するようにしてください。

CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUECONFIG_DEFAULT_SECURITY_APPARMOR を設定する代わりに、次のカーネルブートパラメータを設定しても効果があります: apparmor=1 security=apparmor

ユーザースペースツール

ノート: AppArmor はカーネルモジュールをビルド・インストールするため、カーネルがアップデートされるたびに再ビルドする必要があります。

AppArmor を制御するためのユーザースペースツールとライブラリは AURapparmorAUR パッケージに入っています。

このパッケージは以下のサブパッケージに分かれています:

  • apparmor (メタパッケージ)
  • apparmor-libapparmor
  • apparmor-utils
  • apparmor-parser
  • apparmor-profiles
  • apparmor-pam
  • apparmor-vim

起動時に AppArmor プロファイルをロードするには apparmor.service有効化してください。

テスト

再起動後、次のコマンドを root で使うことで AppArmor が本当に有効になってるかテストできます:

# cat /sys/module/apparmor/parameters/enabled
Y

(Y=有効, N=無効, no such file = カーネルに該当モジュールなし)

無効化

現在のセッションにおいてのみ AppArmor を無効化するには、apparmor.service停止してください。無効化すると次の起動時に実行されなくなります。

また、カーネルブートパラメータapparmor=0 security="" を追加することで AppArmor が必要とするカーネルモジュールを無効化することもできます。

設定

監査とプロファイルの作成

aa-genprof を使って新規プロファイルを作成するには、audit パッケージの auditd.service を動作させる必要があります。Arch Linux は systemd を使用しておりデフォルトではファイルにカーネルログを出力しないためです。Apparmor はユーザー空間の auditd デーモンからカーネルの監査ログを取得してプロファイルを作成することができます。カーネルの監査ログを取得するには、ルールを作成して動作させたいアプリケーションを監視する必要があります。大抵のルールは auditctl(8) で設定することができます:

# auditctl -a exit,always -F arch=b64 -S all -F path=/usr/bin/chromium -F key=MonitorChromium

詳しくは Audit フレームワーク#ルールの追加を読んでください。

ノート: プロファイルを作成した後は無駄なのでサービスを停止 (そして /var/log/audit/audit.log) を消去) してください。

プロファイルの構文

プロファイルは人間が読める形式のテキストファイルとなっており /etc/apparmor.d/ に保存されます。バイナリを実行時にどう扱うかを記述します。基本的なプロファイルは以下のようになります:

/etc/apparmor.d/usr.bin.test
#include <tunables/global>

profile test /usr/lib/test/test_binary {
    #include <abstractions/base>

    # Main libraries and plugins
    /usr/share/TEST/** r,
    /usr/lib/TEST/** rm,

    # Configuration files and logs
    @{HOME}/.config/ r,
    @{HOME}/.config/TEST/** rw,
}

@ 記号が前に付くテキストは abstraction (/etc/apparmor.d/abstractions/) や tunable (/etc/apparmor.d/tunables/) あるいはプロファイルによって定義される変数を表します。#include は他のプロファイルふを直接読み込みます。後ろに文字がいくつか付いているパスは アクセス権限 です。AppArmor の globbing 構文 を使用したパターンマッチングが行われます。

ほとんどのユースケースは以下のステートメントで表すことができます:

  • r — read: データの読み込み。
  • w — write: ファイルの作成・削除・編集と拡張。
  • m — memory map executable: ファイルを実行可能とメモリマップ。
  • x — execute: ファイルを実行。修飾子 を付ける必要があります。

上記の権限は任意アクセス制御 (DAC) によって与えられる権限を上回ることはできません。

詳しいガイドは ドキュメント を見てください。

プロファイルの解析

プロファイルをロード・アンロード・リロード・確認するには apparmor_parser を使います。デフォルトでは新しいプロファイルをロードするようになっており (-a)、既存のプロファイルを上書きするには -r オプションを、プロファイルを削除するには -R を使います。各操作では複数のプロファイルを指定できます。詳しくは apparmor_parser(8) の man ページを参照してください。

セキュリティについての考察

リンクによるパスベースの MAC の迂回

標準の POSIX セキュリティモデルでは、ハードリンクを使うことで AppArmor は迂回できるようになっています。ただし、カーネルには以下の設定で脆弱性を防ぐ機能が備わっています [1]:

/usr/lib/sysctl.d/50-default.conf
...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1

Ubuntu などのようにカーネルにパッチをあてる方法は必ずしも必要とされません。

Tips and tricks

DENIED アクション時にデスクトップ通知を表示

通知デーモンは AppArmor によってプログラムのアクセスが拒否されたときにデスクトップ通知を表示します。ブートされるたびにパラメータを指定してスクリプトを起動する必要があります:

# aa-notify -p -f /var/log/audit/audit.log --display $DISPLAY

デーモンは監査イベントに依存しており、-f を使うことでログ出力されるテキストファイルを指定できます。systemd がファイルにログ出力しないように auditd.service有効化してログファイルを aa-notify に渡してください。動作させるのに特殊な監査イベントは必要ありません。したがってオーバーヘッドはプロファイルを作成することに比べれば少なくなっています。

プロファイルのキャッシュ

AppArmor は設定されたプロファイルをバイナリ形式に翻訳する必要があるため、プロファイルのロードにはしばらく時間がかかります。煩わしいことに起動時間がかなり伸びてしまいます。

そのような問題を解決するため AppArmor では /etc/apparmor.d/cache/ にプロファイルをキャッシュすることができます。ただしキャッシュはデフォルトで無効になっているため apparmor_parser で手動でキャッシュする必要があります。キャッシュに書き込むには -W を使用し (-T で既存のプロファイルを上書き)、-r でプロファイルをリロードします。他の引数についてはプロファイルの解析を見てください。

参照