Home
Packages
Forums
Wiki
GitLab
Security
AUR
Download
コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
目次
コミュニティに貢献
最近の出来事
おまかせ表示
特別ページ
交流
ヘルプ
貢献
最近の更新
最近の議論
新しいページ
統計
リクエスト
ArchWiki
検索
検索
表示
アカウント作成
ログイン
個人用ツール
アカウント作成
ログイン
AppArmorのソースを表示
ページ
議論
日本語
閲覧
ソースを閲覧
履歴を表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
ソースを閲覧
履歴を表示
全般
リンク元
関連ページの更新状況
ページ情報
表示
サイドバーに移動
非表示
←
AppArmor
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
[[Category:アクセス制御]] [[Category:カーネル]] [[bs:AppArmor]] [[en:AppArmor]] {{Related articles start}} {{Related|セキュリティ}} {{Related|TOMOYO Linux}} {{Related|SELinux}} {{Related articles end}} [[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 ではデスクトップにポップアップを表示することで、リアルタイムにユーザーに通知するように設定することもできます。 == インストール == AppArmor は[[カーネル#公式パッケージ|公式でサポートしているカーネル]]に含まれています。 起動時にデフォルトのセキュリティモデルとして AppArmor を有効にするには、以下の[[カーネルパラメータ]]を設定: lsm=landlock,lockdown,yama,apparmor,bpf {{Note|{{ic|1=lsm=}} カーネル・パラメータは、Linux セキュリティ・モジュールの初期化順序を設定します。カーネルに設定された {{ic|1=lsm=}} 値は {{ic|1=zgrep CONFIG_LSM= /proc/config.gz}} で、現在の値は {{ic|cat /sys/kernel/security/lsm}} です。 * {{ic|apparmor}} がリストの最初の "major" モジュールであることを確認してください。[https://www.kernel.org/doc/html/latest/admin-guide/LSM/index.html] 有効な値とその順序の例については、 [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/security/Kconfig security/Kconfig] を参照してください。 * {{ic|capability}} は常に自動的に含まれるため、{{ic|1=lsm=}} では省略する必要があります。 }} AppArmor を制御するためのユーザースペースツールやライブラリは {{Pkg|apparmor}} パッケージで[[インストール]]できます。起動時に全ての AppArmor プロファイルをロードするには、{{ic|apparmor.service}} を[[有効化]]してください。 === カスタムカーネル === [[カーネル#コンパイル|カーネルをコンパイル]]するとき、以下のオプションを設定する必要があります: CONFIG_SECURITY_APPARMOR=y CONFIG_AUDIT=y AppArmor Linux セキュリティモデルをデフォルトで有効にし、カーネルパラメータで設定する必要を無くすには、さらに {{ic|CONFIG_LSM}} オプションを設定し、リストの最初の "major" モジュールとして {{ic|apparmor}} を指定します。 CONFIG_LSM="landlock,lockdown,yama,apparmor,bpf" == 使用方法 == === 現在の状態を表示 === AppArmor が有効になっているか確認するには: {{hc|$ aa-enabled| Yes }} ロードされている状態を表示するには {{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. }} === プロファイルの解析 === プロファイルをロード・アンロード・リロード・確認するには {{ic|apparmor_parser}} を使います。デフォルトでは enforce モードで新しいプロファイルをロードするようになっており ({{ic|-a}})、{{ic|-C}} スイッチを使うことで complain モードでロードできます。既存のプロファイルを上書きするには {{ic|-r}} オプションを、プロファイルを削除するには {{ic|-R}} を使います。各操作では複数のプロファイルを指定できます。詳しくは {{man|8|apparmor_parser}} の man ページを参照してください。 === ロードの無効化 === 全てのプロファイルをアンロードすることで現在のセッションで AppArmor が無効化されます: # aa-teardown 次の起動時に AppArmor プロファイルがロードされないようにしたい場合は {{ic|apparmor.service}} を[[無効化]]してください。カーネルが AppArmor をロードしないようにするには、[[カーネルパラメータ]]から {{ic|1=apparmor=1 security=apparmor}} を削除します。 == 設定 == === 監査とプロファイルの作成 === 新しいプロファイルを作成するには、 [[Audit フレームワーク]] を実行する必要があります。これは、Arch Linux がデフォルトで [[systemd]] を採用し、ファイルへの kernel logging を行わないためです。AppArmor は、ユーザー空間の auditd デーモンからカーネル監査ログを取得し、プロファイルを構築できます。 新しい AppArmor プロファイルは、{{man|8|aa-genprof}} または {{man|8|aa-autodep}} を使用して作成できます。プロファイルは最初に ''complain mode'' で作成されます。このモードでは、ポリシー違反は報告されるだけで、強制されません。ルールは、{{pkg|apparmor}} パッケージの {{man|8|aa-logprof}} ツールによってインタラクティブに作成されます。最後に、{{man|8|aa-enforce}} を使用して、プロファイルを ''enforce mode'' に設定する必要があります。このモードでは、対応するプロファイルのルールによって定義されたポリシーが適用されます。必要に応じて、{{man|8|aa-logprof}} を繰り返し実行してルールを追加したり、{{man|8|aa-apprait}} を使用してプロファイルを警告モードに戻すことができます。これらのツールの使用方法の詳細については、 [https://gitlab.com/apparmor/apparmor/wikis/Profiling_with_tools AppArmor wiki-Profiling with tools] を参照してください。 {{man|8|aa-logprof}} には ''deny'' ルールも用意されていますが、これは基本的な AppArmor ロジックによれば、ルールによって明示的に許可されていないものはすべて禁止されているため、厳密には必要ではありません。ただし、''deny'' 規則には2つの目的があります。 # ''deny'' ルールは ''allow'' ルールよりも優先されます。重要なフォルダやファイルへのアクセスをブロックするために、{{ic|/etc/apparmor.d/abstractions}} にある多くの [https://man.archlinux.org/man/extra/apparmor/apparmor.d.5.en##include_mechanism abstractions] でよく使用されます。これにより、誤って作成された許可ルールによってプロファイルが過度に許可されることがなくなります。 #''allow'' ルールは、logging を無効にし、以降の ''aa-logprof'' の実行ノイズを減らします。''deny'' ルールは ''complain mode'' でも適用されることを覚えておくことが重要です。 アプリケーションが苦情モードでも適切に動作しない場合、プロファイルまたは拒否ルールをチェックしてください。 また、手動でプロファイルを作成することもできます。詳細については、 [https://gitlab.com/apparmor/apparmor/wikis/Profiling_by_hand AppArmor wiki-Profiling by hand] を参照してください。 === プロファイルの構文 === プロファイルは人間が読める形式のテキストファイルとなっており {{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}} は他のプロファイルふを直接読み込みます。後ろに文字がいくつか付いているパスは [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 構文] を使用したパターンマッチングが行われます。 ほとんどのユースケースは以下のステートメントで表すことができます: * {{ic|r}} — read: データの読み込み。 * {{ic|w}} — write: ファイルの作成・削除・編集と拡張。 * {{ic|m}} — memory map executable: ファイルを実行可能とメモリマップ。 * {{ic|x}} — execute: ファイルを実行。[https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#execute-rules 修飾子] を付ける必要があります。 上記の権限は任意アクセス制御 (DAC) によって与えられる権限を上回ることはできません。 詳しいガイドは {{man|5|apparmor.d}} の man ページや [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference ドキュメント] を見てください。 == ヒントとテクニック == === DENIED アクション時にデスクトップ通知を表示 === 通知デーモンは AppArmor によってプログラムのアクセスが拒否されたときにデスクトップ通知を表示します。{{ic|aa-notify}} デーモンをログイン時に自動的に起動するには以下の手順に従ってください。 [[Audit フレームワーク]]をインストール・有効化してください。{{ic|audit}} [[グループ|ユーザーグループ]]にユーザーを追加することで {{ic|/var/log/audit}} の監査ログを読み込めるようにします: # groupadd -r audit # gpasswd -a <username> audit {{ic|audit}} グループを {{ic|auditd.conf}} に追加: {{hc|/etc/audit/auditd.conf|2= log_group = audit }} {{Tip|{{ic|wheel}} や {{ic|adm}} など既存のシステムグループを使用することもできます。}} {{Pkg|python-notify2}} と {{Pkg|python-psutil}} を [[インストール]] します。 以下のコンテンツで [[デスクトップランチャー]] を作成します。 {{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 の起動時間が変化したか確認してください: $ systemd-analyze blame | grep apparmor == トラブルシューティング == === Samba SMB/CIFS サーバーを起動できない === [[Samba#AppArmor におけるパーミッションの問題]] を参照 === aa-logprof でイベントが捕捉されない === [[Audit フレームワーク]] のログに特殊文字 {{ic|0x1d}} [https://github.com/linux-audit/audit-userspace/issues/3] が含まれる場合があります。[https://gitlab.com/apparmor/apparmor/-/issues/271 AppArmor バグレポート] がありますが、回避策として次を実行します。 # aa-logprof -f <(sed 's/\x1d.*//' < /var/log/audit/audit.log) == 参照 == * [https://gitlab.com/apparmor/apparmor/wikis/home AppArmor wiki] * [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference AppArmor Core Policy Reference] — プロファイルで利用できるオプションの詳しい解説 * [https://ubuntuforums.org/showthread.php?t=1008906 Ubuntu Tutorial] — 利用可能なユーティリティとプロファイルの作成に関する概要 * [https://help.ubuntu.com/community/AppArmor Ubuntu Wiki] — 基本的なコマンドの一覧 * [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_versions AppArmor Versions] — バージョンの概要とリリースノートのリンク * [https://gitlab.com/apparmor/apparmor/wikis/Kernel_interfaces Kernel Interfaces] — AppArmor カーネルモジュールの低レベルインターフェイス * [[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]
このページで使用されているテンプレート:
テンプレート:Hc
(
ソースを閲覧
)
テンプレート:Ic
(
ソースを閲覧
)
テンプレート:META Related articles start
(
ソースを閲覧
)
テンプレート:Man
(
ソースを閲覧
)
テンプレート:Note
(
ソースを閲覧
)
テンプレート:Pkg
(
ソースを閲覧
)
テンプレート:Related
(
ソースを閲覧
)
テンプレート:Related articles end
(
ソースを閲覧
)
テンプレート:Related articles start
(
ソースを閲覧
)
テンプレート:Tip
(
ソースを閲覧
)
AppArmor
に戻る。
検索
検索
AppArmorのソースを表示
話題を追加