「AppArmor」の版間の差分
(→カスタムカーネル: 情報を更新) |
(→インストール: 翻訳を修正) |
||
27行目: | 27行目: | ||
{{Note|{{ic|1=lsm=}} カーネル・パラメータは、Linux セキュリティ・モジュールの初期化順序を設定します。カーネルに設定された {{ic|1=lsm=}} 値は {{ic|1=zgrep CONFIG_LSM= /proc/config.gz}} で、現在の値は {{ic|cat/sys/kernel/security/lsm}} です。 |
{{Note|{{ic|1=lsm=}} カーネル・パラメータは、Linux セキュリティ・モジュールの初期化順序を設定します。カーネルに設定された {{ic|1=lsm=}} 値は {{ic|1=zgrep CONFIG_LSM= /proc/config.gz}} で、現在の値は {{ic|cat/sys/kernel/security/lsm}} です。 |
||
− | * {{ic|apparmor}} がリストの最初の |
+ | * {{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=}} では省略する必要があります。 |
* {{ic|capability}} は常に自動的に含まれるため、{{ic|1=lsm=}} では省略する必要があります。 |
||
}} |
}} |
2021年7月28日 (水) 13:09時点における版
関連記事
AppArmor は強制アクセス制御 (MAC) のシステムです。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
AppArmor を制御するためのユーザースペースツールやライブラリは apparmor パッケージでインストールできます。起動時に全ての AppArmor プロファイルをロードするには、apparmor.service
を有効化してください。
カスタムカーネル
カーネルをコンパイルするとき、以下のオプションを設定する必要があります:
CONFIG_SECURITY_APPARMOR=y CONFIG_AUDIT=y
AppArmor Linux セキュリティモデルをデフォルトで有効にし、カーネルパラメータで設定する必要を無くすには、さらに CONFIG_LSM
オプションを設定し、リストの最初の "major" モジュールとして apparmor
を指定します。
CONFIG_LSM="landlock,lockdown,yama,apparmor,bpf"
使用方法
現在の状態を表示
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
以下の内容でデスクトップエントリを作成:
~/.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
再起動して AppArmor の起動時間が変化したか確認してください:
$ systemd-analyze blame | grep apparmor
トラブルシューティング
Samba SMB/CIFS サーバーを起動できない
Samba#AppArmor におけるパーミッションの問題を参照。
参照
- AppArmor wiki
- AppArmor Core Policy Reference — プロファイルで利用できるオプションの詳しい解説
- Ubuntu Tutorial — 利用可能なユーティリティとプロファイルの作成に関する概要
- Ubuntu Wiki — 基本的なコマンドの一覧
- AppArmor Versions — バージョンの概要とリリースノートのリンク
- Kernel Interfaces — AppArmor カーネルモジュールの低レベルインターフェイス
- wikipedia:Linux Security Modules — AppArmor が使用している Linux カーネルモジュール
- AppArmor in openSUSE Security Guide