「AppArmor」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
(同期)
1行目: 1行目:
[[Category:セキュリティ]]
+
[[Category:アクス制御]]
 
[[Category:カーネル]]
 
[[Category:カーネル]]
 
[[en:AppArmor]]
 
[[en:AppArmor]]
18行目: 18行目:
   
 
== インストール ==
 
== インストール ==
=== カーネル ===
 
   
  +
AppArmor は[[カーネル#公式パッケージ|公式でサポートしているカーネル]]に含まれています。
{{Note|論争になっているユーザー名前空間 ({{ic|1=CONFIG_USER_NS=Y}}) は[[カーネル]]コンフィグでは設定できませんが、AppArmor に機能を追加することができます。ユーザー名前空間については {{bug|36969}} を参照してください。}}
 
  +
  +
起動時にデフォルトのセキュリティモデルとして AppArmor を有効にするには、以下の[[カーネルパラメータ]]を設定:
  +
  +
apparmor=1 security=apparmor
  +
  +
AppArmor を制御するためのユーザースペースツールやライブラリは {{Pkg|apparmor}} パッケージで[[インストール]]できます。起動時に全ての AppArmor プロファイルをロードするには、{{ic|apparmor.service}} を[[有効化]]してください。
  +
  +
=== カスタムカーネル ===
   
 
[[カーネル#コンパイル|カーネルをコンパイル]]するとき、以下のオプションを設定する必要があります:
 
[[カーネル#コンパイル|カーネルをコンパイル]]するとき、以下のオプションを設定する必要があります:
33行目: 40行目:
 
{{ic|CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE}} や {{ic|CONFIG_DEFAULT_SECURITY_APPARMOR}} を設定する代わりに、次の[[カーネルパラメータ|カーネルブートパラメータ]]を設定しても効果があります: {{ic|1=apparmor=1 security=apparmor}}。
 
{{ic|CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE}} や {{ic|CONFIG_DEFAULT_SECURITY_APPARMOR}} を設定する代わりに、次の[[カーネルパラメータ|カーネルブートパラメータ]]を設定しても効果があります: {{ic|1=apparmor=1 security=apparmor}}。
   
  +
== 使用方法 ==
=== ユーザースペースツール ===
 
   
  +
=== 現在の状態を表示 ===
{{Note|AppArmor はカーネルモジュールをビルド・インストールするため、カーネルがアップデートされるたびに再ビルドする必要があります。}}
 
   
  +
AppArmor が有効になっているか確認するには:
AppArmor を制御するためのユーザースペースツールとライブラリは [[AUR]] の {{Pkg|apparmor}} パッケージに入っています。
 
   
  +
{{hc|$ aa-enabled|
このパッケージは以下のサブパッケージに分かれています:
 
  +
Yes
* apparmor (メタパッケージ)
 
  +
}}
* apparmor-libapparmor
 
* apparmor-utils
 
* apparmor-parser
 
* apparmor-profiles
 
* apparmor-pam
 
* apparmor-vim
 
   
起動時に AppArmor プロファイルをロードするには {{ic|apparmor.service}} を[[有効化]]してください。
+
ロードされている状態を表示するには {{ic|apparmor_status}} を使用:
   
  +
{{hc|# apparmor_status|
=== テスト ===
 
  +
apparmor module is loaded.
  +
44 profiles are loaded.
  +
44 profiles are in enforce mode.
  +
...
  +
0 profiles are in complain mode.
  +
0 processes have profiles defined.
  +
0 processes are in enforce mode.
  +
0 processes are in complain mode.
  +
0 processes are unconfined but have a profile defined.
  +
}}
   
  +
=== プロファイルの解析 ===
再起動後、次のコマンドを root で使うことで AppArmor が本当に有効になってるかテストできます:
 
  +
{{hc|# cat /sys/module/apparmor/parameters/enabled|Y}}
 
  +
プロファイルをロード・アンロード・リロード・確認するには {{ic|apparmor_parser}} を使います。デフォルトでは enforce モードで新しいプロファイルをロードするようになっており ({{ic|-a}})、{{ic|-C}} スイッチを使うことで complain モードでロードできます。既存のプロファイルを上書きするには {{ic|-r}} オプションを、プロファイルを削除するには {{ic|-R}} を使います。各操作では複数のプロファイルを指定できます。詳しくは {{man|8|apparmor_parser}} の man ページを参照してください。
(Y=有効, N=無効, no such file = カーネルに該当モジュールなし)
 
  +
  +
=== ロードの無効化 ===
  +
  +
全てのプロファイルをアンロードすることで現在のセッションで AppArmor が無効化されます:
   
  +
# aa-teardown
== 無効化 ==
 
現在のセッションにおいてのみ AppArmor を無効化するには、{{ic|apparmor.service}} を[[systemd#ユニットを使う|停止]]してください。[[systemd#ユニットを使う|無効化]]すると次の起動時に実行されなくなります。
 
   
[[カーネルパラメタ|カーネルブートパラメータ]] {{ic|1=apparmor=0 security=""}} を追加することで AppArmor が必要とするカーネルモジュールを無効化することもできます。
+
次の起動時に AppArmor プロファイルがロードされないようにしい場合は {{ic|apparmor.service}} を[[無効化]]してください。カーネルが AppArmor をロドしないようにするには、[[カーネルパラメータ]]から {{ic|1=apparmor=1 security=apparmor}} を削除します。
   
 
== 設定 ==
 
== 設定 ==
   
 
=== 監査とプロファイルの作成 ===
 
=== 監査とプロファイルの作成 ===
{{ic|aa-genprof}} を使って新規プロファイルを作成するには、{{Pkg|audit}} パッケジの {{ic|auditd.service}} を動作させる必要があります。Arch Linux は systemd を使用しておりデフォルトではファイルにカーネルログを出力しないためです。Apparmor はユーザー空間の auditd デーモンからカーネルの監査ログを取得してプロファイルを作成することができます。カーネルの監査ログを取得するには、ルールを作成して動作させたいアプリケーションを監視する必要があります。大抵のルールは {{man|8|auditctl|url=https://linux.die.net/man/8/auditctl}} で設定することができます:
+
{{ic|aa-genprof}} を使って新規プロファイルを作成するには、[[Audit フレムワーク]]を動作させる必要があります。Arch Linux は systemd を使用しておりデフォルトではファイルにカーネルログを出力しないためです。AppArmor はユーザー空間の auditd デーモンからカーネルの監査ログを取得してプロファイルを作成することができます。
   
  +
{{pkg|apparmor}} パッケージに含まれている {{man|8|aa-genprof}} と {{man|8|aa-logprof}} ツールを使うことで新しい AppArmor プロファイルを作成できます。ツールの詳しい使い方は [https://gitlab.com/apparmor/apparmor/wikis/Profiling_with_tools AppArmor wiki - Profiling with tools] に載っています。
# auditctl -a exit,always -F arch=b64 -S all -F path=/usr/bin/chromium -F key=MonitorChromium
 
   
  +
プロファイルは手動でも作成できます。詳しくは [https://gitlab.com/apparmor/apparmor/wikis/Profiling_by_hand AppArmor wiki - Profiling by hand] を参照。
詳しくは [[Audit フレームワーク#ルールの追加]]を読んでください。
 
 
{{Note|プロファイルを作成した後は無駄なのでサービスを停止 (そして {{ic|/var/log/audit/audit.log}}) を消去) してください。}}
 
   
 
=== プロファイルの構文 ===
 
=== プロファイルの構文 ===
92行目: 105行目:
 
}}
 
}}
   
{{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|@}} 記号が前に付くテキストは abstraction ({{ic|/etc/apparmor.d/abstractions/}}) や tunable ({{ic|/etc/apparmor.d/tunables/}}) あるいはプロファイルによって定義される変数を表します。{{ic|#include}} は他のプロファイルふを直接読み込みます。後ろに文字がいくつか付いているパスは [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#file-access-rules アクセス権限] です。[https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#apparmor-globbing-syntax AppArmor の globbing 構文] を使用したパターンマッチングが行われます。
   
 
ほとんどのユースケースは以下のステートメントで表すことができます:
 
ほとんどのユースケースは以下のステートメントで表すことができます:
99行目: 112行目:
 
* {{ic|w}} — write: ファイルの作成・削除・編集と拡張。
 
* {{ic|w}} — write: ファイルの作成・削除・編集と拡張。
 
* {{ic|m}} — memory map executable: ファイルを実行可能とメモリマップ。
 
* {{ic|m}} — memory map executable: ファイルを実行可能とメモリマップ。
* {{ic|x}} — execute: ファイルを実行。[http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference#Execute_rules 修飾子] を付ける必要があります。
+
* {{ic|x}} — execute: ファイルを実行。[https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#execute-rules 修飾子] を付ける必要があります。
   
 
上記の権限は任意アクセス制御 (DAC) によって与えられる権限を上回ることはできません。
 
上記の権限は任意アクセス制御 (DAC) によって与えられる権限を上回ることはできません。
   
詳しいガイドは [http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference ドキュメント] を見てください。
+
詳しいガイドは {{man|5|apparmor.d}} の man ページや [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference ドキュメント] を見てください。
   
  +
== ヒントとテクニック ==
=== プロファイルの解析 ===
 
   
  +
=== DENIED アクション時にデスクトップ通知を表示 ===
プロファイルをロード・アンロード・リロード・確認するには {{ic|apparmor_parser}} を使います。デフォルトでは新しいプロファイルをロードするようになっており ({{ic|-a}})、既存のプロファイルを上書きするには {{ic|-r}} オプションを、プロファイルを削除するには {{ic|-R}} を使います。各操作では複数のプロファイルを指定できます。詳しくは {{man|8|apparmor_parser|url=http://man.cx/apparmor_parser(8)}} の man ページを参照してください。
 
   
  +
通知デーモンは AppArmor によってプログラムのアクセスが拒否されたときにデスクトップ通知を表示します。{{ic|aa-notify}} デーモンをログイン時に自動的に起動するには以下の手順に従ってください。
== セキュリティについての考察 ==
 
=== リンクによるパスベースの MAC の迂回 ===
 
   
  +
[[Audit フレームワーク]]をインストール・有効化してください。{{ic|audit}} [[グループ|ユーザーグループ]]にユーザーを追加することで {{ic|/var/log/audit}} の監査ログを読み込めるようにします:
標準の POSIX セキュリティモデルでは、ハードリンクを使うことで AppArmor は迂回できるようになっています。ただし、カーネルには以下の設定で脆弱性を防ぐ機能が備わっています [https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=800179c9b8a1e796e441674776d11cd4c05d61d7]:
 
   
  +
# groupadd -r audit
{{hc|/usr/lib/sysctl.d/50-default.conf|2=
 
  +
# gpasswd -a <username> audit
...
 
fs.protected_hardlinks = 1
 
fs.protected_symlinks = 1}}
 
   
  +
{{ic|audit}} グループを {{ic|auditd.conf}} に追加:
Ubuntu などのようにカーネルにパッチをあてる方法は必ずしも必要とされません。
 
  +
{{hc|/etc/audit/auditd.conf|2=
  +
log_group = audit
  +
}}
   
  +
{{Tip|{{ic|wheel}} や {{ic|adm}} など既存のシステムグループを使用することもできます。}}
== ヒントとテクニック ==
 
  +
=== DENIED アクション時にデスクトップ通知を表示 ===
 
  +
以下の内容で[[デスクトップエントリ]]を作成:
通知デーモンは AppArmor によってプログラムのアクセスが拒否されたときにデスクトップ通知を表示します。ブートされるたびにパラメータを指定してスクリプトを起動する必要があります:
 
  +
  +
{{hc|~/.config/autostart/apparmor-notify.desktop|2=
  +
[Desktop Entry]
  +
Type=Application
  +
Name=AppArmor Notify
  +
Comment=Receive on screen notifications of AppArmor denials
  +
TryExec=/usr/bin/aa-notify
  +
Exec=/usr/bin/aa-notify -p -s 1 -w 60 -f /var/log/audit/audit.log
  +
StartupNotify=false
  +
NoDisplay=true
  +
}}
  +
  +
再起動して {{ic|aa-notify}} デーモンが稼働しているか確認:
  +
  +
$ pgrep -ax aa-notify
  +
  +
{{Note|システムの設定によっては多数の通知が表示されます。}}
  +
  +
詳しくは {{man|8|aa-notify}} を参照。
  +
  +
=== プロファイルをキャッシュして AppArmor の起動を高速化 ===
  +
  +
AppArmor は設定されたプロファイルをバイナリ形式に翻訳する必要があるため、プロファイルのロードにはしばらく時間がかかります。煩わしいことに起動時間がかなり伸びてしまいます。AppArmor の起動時間は以下のコマンドで確認できます:
  +
  +
$ systemd-analyze blame | grep apparmor
  +
  +
AppArmor プロファイルのキャッシュを有効化するには、以下をアンコメント:
  +
  +
{{hc|/etc/apparmor/parser.conf|2=
  +
## Turn creating/updating of the cache on by default
  +
write-cache
  +
}}
  +
  +
デフォルトのキャッシュ場所を変更するには以下を追加:
  +
  +
{{hc|/etc/apparmor/parser.conf|2=
  +
cache-loc=/path/to/location
  +
}}
  +
  +
{{Note|2.13.1 からデフォルトのキャッシュ保存場所は {{ic|/var/cache/apparmor/}} となっています。以前は {{ic|/etc/apparmor.d/cache.d/}} でした。}}
   
  +
再起動して AppArmor の起動時間が変化したか確認してください:
# aa-notify -p -f /var/log/audit/audit.log --display $DISPLAY
 
   
  +
$ systemd-analyze blame | grep apparmor
デーモンは監査イベントに依存しており、{{ic|-f}} を使うことでログ出力されるテキストファイルを指定できます。[[systemd]] がファイルにログ出力しないように {{ic|auditd.service}} を[[有効化]]してログファイルを {{ic|aa-notify}} に渡してください。動作させるのに特殊な監査イベントは必要ありません。したがってオーバーヘッドは[[#監査とプロファイルの作成|プロファイルを作成]]することに比べれば少なくなっています。
 
   
=== プロファイのキャッシュ ===
+
== トラブルシューティング ==
   
  +
=== Samba SMB/CIFS サーバーを起動できない ===
AppArmor は設定されたプロファイルをバイナリ形式に翻訳する必要があるため、プロファイルのロードにはしばらく時間がかかります。煩わしいことに起動時間がかなり伸びてしまいます。
 
   
  +
[[Samba#AppArmor におけるパーミッションの問題]]を参照。
そのような問題を解決するため AppArmor では {{ic|/etc/apparmor.d/cache/}} にプロファイルをキャッシュすることができます。ただしキャッシュはデフォルトで無効になっているため {{ic|apparmor_parser}} で手動でキャッシュする必要があります。キャッシュに書き込むには {{ic|-W}} を使用し ({{ic|-T}} で既存のプロファイルを上書き)、{{ic|-r}} でプロファイルをリロードします。他の引数については[[#プロファイルの解析|プロファイルの解析]]を見てください。
 
   
 
== 参照 ==
 
== 参照 ==
   
* [http://wiki.apparmor.net/ AppArmor wiki]
+
* [https://gitlab.com/apparmor/apparmor/wikis/home AppArmor wiki]
* [http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference AppArmor Core Policy Reference] — プロファイルで利用できるオプションの詳しい解説
+
* [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference AppArmor Core Policy Reference] — プロファイルで利用できるオプションの詳しい解説
 
* [https://ubuntuforums.org/showthread.php?t=1008906 Ubuntu Tutorial] — 利用可能なユーティリティとプロファイルの作成に関する概要
 
* [https://ubuntuforums.org/showthread.php?t=1008906 Ubuntu Tutorial] — 利用可能なユーティリティとプロファイルの作成に関する概要
 
* [https://help.ubuntu.com/community/AppArmor Ubuntu Wiki] — 基本的なコマンドの一覧
 
* [https://help.ubuntu.com/community/AppArmor Ubuntu Wiki] — 基本的なコマンドの一覧
* [http://wiki.apparmor.net/index.php/AppArmor_versions AppArmor Versions] — バージョンの概要とリリースノートのリンク
+
* [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_versions AppArmor Versions] — バージョンの概要とリリースノートのリンク
  +
* [https://gitlab.com/apparmor/apparmor/wikis/Kernel_interfaces Kernel Interfaces] — AppArmor カーネルモジュールの低レベルインターフェイス
* {{man|5|apparmor.d|url=http://manpages.ubuntu.com/manpages/oneiric/man5/apparmor.d.5.html}} — AppArmor の設定ディレクトリの構造
 
* {{man|8|apparmor_parse|url=http://manpages.ubuntu.com/manpages/oneiric/man8/apparmor_parser.8.html}} — プロファイルをロード・アンロード・キャッシュ・出力する AppArmor のユーティリティ
 
* [http://wiki.apparmor.net/index.php/Kernel_interfaces Kernel Interfaces] — AppArmor カーネルモジュールの低レベルインターフェイス
 
* [https://wiki.ubuntu.com/ApparmorProfileMigration Apparmor Profile Migration] — Emergence of profiles
 
 
* [[wikipedia:Linux Security Modules]] — AppArmor が使用している Linux カーネルモジュール
 
* [[wikipedia:Linux Security Modules]] — AppArmor が使用している Linux カーネルモジュール
  +
* [https://doc.opensuse.org/documentation/leap/security/single-html/book.security/index.html#part.apparmor AppArmor in openSUSE Security Guide]
* [https://launchpad.net/apparmor Launchpad プロジェクトページ]
 
* {{Bug|21406}} — AppArmor の導入に関する議論
 

2019年2月19日 (火) 22:46時点における版

関連記事

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

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

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

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

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

インストール

AppArmor は公式でサポートしているカーネルに含まれています。

起動時にデフォルトのセキュリティモデルとして AppArmor を有効にするには、以下のカーネルパラメータを設定:

apparmor=1 security=apparmor

AppArmor を制御するためのユーザースペースツールやライブラリは apparmor パッケージでインストールできます。起動時に全ての AppArmor プロファイルをロードするには、apparmor.service有効化してください。

カスタムカーネル

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

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 が有効になっているか確認するには:

$ aa-enabled
Yes

ロードされている状態を表示するには apparmor_status を使用:

# apparmor_status
apparmor module is loaded.
44 profiles are loaded.
44 profiles are in enforce mode.
 ...
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

プロファイルの解析

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

ロードの無効化

全てのプロファイルをアンロードすることで現在のセッションで AppArmor が無効化されます:

# aa-teardown 

次の起動時に AppArmor プロファイルがロードされないようにしたい場合は apparmor.service無効化してください。カーネルが AppArmor をロードしないようにするには、カーネルパラメータから apparmor=1 security=apparmor を削除します。

設定

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

aa-genprof を使って新規プロファイルを作成するには、Audit フレームワークを動作させる必要があります。Arch Linux は systemd を使用しておりデフォルトではファイルにカーネルログを出力しないためです。AppArmor はユーザー空間の auditd デーモンからカーネルの監査ログを取得してプロファイルを作成することができます。

apparmor パッケージに含まれている aa-genprof(8)aa-logprof(8) ツールを使うことで新しい AppArmor プロファイルを作成できます。ツールの詳しい使い方は AppArmor wiki - Profiling with tools に載っています。

プロファイルは手動でも作成できます。詳しくは AppArmor wiki - Profiling by hand を参照。

プロファイルの構文

プロファイルは人間が読める形式のテキストファイルとなっており /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.d(5) の man ページや ドキュメント を見てください。

ヒントとテクニック

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

通知デーモンは AppArmor によってプログラムのアクセスが拒否されたときにデスクトップ通知を表示します。aa-notify デーモンをログイン時に自動的に起動するには以下の手順に従ってください。

Audit フレームワークをインストール・有効化してください。audit ユーザーグループにユーザーを追加することで /var/log/audit の監査ログを読み込めるようにします:

# groupadd -r audit
# gpasswd -a <username> audit

audit グループを auditd.conf に追加:

/etc/audit/auditd.conf
log_group = audit
ヒント: wheeladm など既存のシステムグループを使用することもできます。

以下の内容でデスクトップエントリを作成:

~/.config/autostart/apparmor-notify.desktop
[Desktop Entry]
Type=Application
Name=AppArmor Notify
Comment=Receive on screen notifications of AppArmor denials
TryExec=/usr/bin/aa-notify
Exec=/usr/bin/aa-notify -p -s 1 -w 60 -f /var/log/audit/audit.log
StartupNotify=false
NoDisplay=true

再起動して aa-notify デーモンが稼働しているか確認:

$ pgrep -ax aa-notify
ノート: システムの設定によっては多数の通知が表示されます。

詳しくは aa-notify(8) を参照。

プロファイルをキャッシュして AppArmor の起動を高速化

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

$ systemd-analyze blame | grep apparmor

AppArmor プロファイルのキャッシュを有効化するには、以下をアンコメント:

/etc/apparmor/parser.conf
## Turn creating/updating of the cache on by default
write-cache

デフォルトのキャッシュ場所を変更するには以下を追加:

/etc/apparmor/parser.conf
cache-loc=/path/to/location
ノート: 2.13.1 からデフォルトのキャッシュ保存場所は /var/cache/apparmor/ となっています。以前は /etc/apparmor.d/cache.d/ でした。

再起動して AppArmor の起動時間が変化したか確認してください:

$ systemd-analyze blame | grep apparmor

トラブルシューティング

Samba SMB/CIFS サーバーを起動できない

Samba#AppArmor におけるパーミッションの問題を参照。

参照