第23章 コマンドラインからのプロファイル構築

目次

23.1. AppArmor のモジュール状態の確認
23.2. AppArmor プロファイルの構築
23.3. AppArmor プロファイルの追加と作成
23.4. AppArmor プロファイルの編集
23.5. AppArmor プロファイルの削除
23.6. プロファイルを作成する際の 2 つの方法
23.7. 重要なファイル名とディレクトリ

AppArmor® では、システムのセキュリティを管理したり設定したりするのに、 グラフィカルなインターフェイスだけでなく、コマンドラインインターフェイスを 利用することもできます。コマンドラインツールを利用することで、 AppArmor の 状態を追跡したり、 AppArmor のプロファイルを作成/削除/修正したりすることが できます。

[Tip]背景となる情報

AppArmor のコマンドラインツールを利用してプロファイルの管理を行なう前に、 まずは 第19章 プログラムに対する免疫付与第20章 プロファイルの構成と文法 で説明している AppArmor の一般的な 情報をお読みください。

23.1. AppArmor のモジュール状態の確認

AppArmor のモジュールは、下記の 3 種類のうちのいずれかの状態になります:

読み込み前

AppArmor のモジュールがカーネルに読み込まれていない状態です。

実行中

AppArmor のモジュールがカーネル内に読み込まれ、 AppArmor のプログラム ポリシーが強制されている状態です。

停止中

AppArmor のモジュールはカーネル内に読み込まれていますが、プログラム ポリシーは強制されていない状態です。

AppArmor のモジュールの状態は、 /sys/kernel/security/apparmor/profiles ファイルを調べることで判別できます。 cat /sys/kernel/security/apparmor/profiles を実行する ことでプロファイルの一覧が表示されるようであれば、 AppArmor は実行中であると 言えます。何も表示されない場合は、 AppArmor は停止中で、左記のファイルが 存在していない場合は AppArmor が読み込み前の状態であると言えます。

スクリプト rcapparmor を利用した管理では、 下記の操作を行なうことができます:

rcapparmor start

AppArmor のモジュール状態によって動作が異なります。読み込み前の状態であった 場合、 start はモジュールを読み込んで起動し、実行中の 状態に移行します。停止中の状態であった場合、 start は 通常 /etc/apparmor.d ディレクトリ内にある AppArmor プロファイルを再読み込みし、実行中の状態に移行します。既に実行中であった 場合、 start は警告メッセージを表示するだけで何も 行ないません。

rcapparmor stop

実行中の場合は、すべてのプロファイルをカーネルメモリから取り除き、すべての アクセス制御を無効化してモジュールを停止状態にすることで、 AppArmor モジュール の停止を行ないます。 AppArmor のモジュールが読み込み前の状態であった場合や、 既に停止していた場合、 stop は再度プロファイルの読み込みを 解除しようとしますが、何も起こりません。

rcapparmor restart

AppArmor のモジュールに対して、実行中のプロセスが制限を受けることの無いように しながら、 /etc/apparmor.d 内にあるプロファイルの 再スキャンを行なわせます。新しく作成されたプロファイルは強制モードに 置かれ、削除されたプロファイルは /etc/apparmor.d ディレクトリから削除されます。

rcapparmor kill

カーネルから無条件に AppArmor のモジュールを取り除きます。ただし、このコマンド での Linux カーネルからのモジュール読み込み解除は安全ではありません。 このコマンドはデバッグ目的のほか、緊急にモジュールの読み込みを解除する ために利用するものです。

[Warning]

AppArmor はパワフルなアクセス制御システムであり、レスキューメディア (たとえば openSUSE の 1 枚目のメディア) から起動して制御を取り戻さない限り、 あなた自身がマシンから締め出される可能性もありうるシステムです。

このような締め出しの問題を回避するには、 AppArmor のモジュールを再起動する際に 無制限に動作するようにし、 root で対象のマシンにログインしたあと 設定をやり直してください。ログインさえもできない状態にまで (たとえば SSH デーモンに関連づけられたプロファイルを壊してしまうなど) ダメージを 与えてしまった場合は、左記の手順で獲得した root プロンプトを利用 してダメージを修復し、 AppArmor モジュールを再起動してください。

23.2. AppArmor プロファイルの構築

AppArmor モジュールのプロファイル設定は、 /etc/apparmor.d ディレクトリ内にテキストファイル形式で保存されます。これらのファイルの 書式について、詳しくは 第20章 プロファイルの構成と文法

/etc/apparmor.d ディレクトリ内にあるすべてのファイルは、 プロファイルとして解釈され、読み込まれます。ディレクトリ内でのファイル 名の変更は、プロファイルが読み込まれないようにする対策としては正しく ありません。特定のプロファイルについて、これを読み込まれないようにしたい 場合は、ディレクトリから取り除いて対応してください。

プロファイルへのアクセスや変更を行なうには、 vim などのテキストエディタを 利用することができます。プロファイルを構築するにあたっては、下記のような 手段をとることができます:

AppArmor プロファイルの追加と作成

23.3項 「AppArmor プロファイルの追加と作成」 をお読みください。

AppArmor プロファイルの編集

23.4項 「AppArmor プロファイルの編集」 をお読みください。

AppArmor プロファイルの削除

23.5項 「AppArmor プロファイルの削除」 をお読みください。

23.3. AppArmor プロファイルの追加と作成

アプリケーションに対して AppArmor プロファイルを追加したり作成したりする際、 必要に応じて統合型のプロファイル作成を行なうか、もしくは単独でプロファイル 作成を行なうかを選択することができます。それぞれのやり方について、詳しい 説明は 23.6項 「プロファイルを作成する際の 2 つの方法」 をお読みください。

23.4. AppArmor プロファイルの編集

AppArmor のプロファイルを編集するには、下記の手順で行ないます:

  1. root でログインしていない場合は、端末ウインドウで su と入力します。

  2. root のパスワードを尋ねられた場合は、それを入力します。

  3. cd /etc/apparmor.d/ を実行して、プロファイルの あるディレクトリに移動します。

  4. 現在インストールされているすべてのプロファイルを一覧表示するには、 ls と入力します。

  5. vim などのテキストエディタを利用して、プロファイルを開きます。

  6. 必要に応じてプロファイルを修正し、保存します。

  7. 端末ウインドウで rcapparmor restart と入力し、 AppArmor を再起動します。

23.5. AppArmor プロファイルの削除

AppArmor のプロファイルを削除するには、下記の手順で行ないます:

  1. root でログインしていない場合は、端末ウインドウで su と入力します。

  2. root のパスワードを尋ねられた場合は、それを入力します。

  3. cd /etc/apparmor.d/ を実行して、プロファイルの あるディレクトリに移動します。

  4. 現在インストールされているすべてのプロファイルを一覧表示するには、 ls と入力します。

  5. プロファイルを削除するには、 rm プロファイル名 と入力します。

  6. 端末ウインドウで rcapparmor restart と入力し、 AppArmor を再起動します。

23.6. プロファイルを作成する際の 2 つの方法

第20章 プロファイルの構成と文法 に 書かれている AppArmor プロファイルの文法を利用することで、ツールを利用すること なくプロファイルを作成することができます。ただし、ツールを利用せずに作成 するのは、それなりの困難を伴います。このような手間暇を省くには、 AppArmor の ツールを利用してプロファイルの作成や修正を自動化することをお勧めします。

AppArmor のプロファイルを作成するにあたっては、 2 種類の方法が存在します。 それぞれの方法向けにツールが用意されています。

単独プロファイル作成

限られた時間しか動作しない、メールクライアントなどのユーザクライアント アプリケーションなどの小規模なアプリケーションに適した方法です。詳しくは 23.6.1項 「単独プロファイル作成」 をお読みください。

統合型プロファイル作成

一括で多数のプログラムに対してプロファイルを作成する方法で、 Web サーバや メールサーバなど、何日/何週間もの間、システムの再起動が発生するまで動作 し続けるタイプのアプリケーションに適した方法です。詳しくは 23.6.2項 「統合型プロファイル作成」 をお読みください。

プロファイルの自動開発は、 AppArmor のツールを利用することでより管理が やりやすくなります:

  1. 必要に応じて、どちらのプロファイル作成方法を利用するのかを決めます。

  2. まずは静的な分析を行ないます。選択した作成方法に応じて、 aa-genprof または aa-autodep を動作させます。

  3. 動的な学習を有効にします。すべてのプロファイル作成済みプログラムに 対して学習モードを有効にします。

23.6.1. 単独プロファイル作成

単独でのプロファイル生成と改善の作業は、 aa-genprof と呼ばれるプログラムで 管理します。この方法は、 aa-genprof がすべての事象を取り扱うため、簡単に 実行することができる方法です。ただし、 aa-genprof ではお使いのプログラムを テストする際、すべての機能を動作させる必要があるという制限があります (また、プロファイルを作成している間は、マシンを再起動することはできません) 。

単独プロファイル作成で aa-genprof を利用するには、 23.6.3.4項 「aa-genprof—プロファイルの生成」 をお読みください。

23.6.2. 統合型プロファイル作成

この方法は、 aa-genprof や単独プロファイル作成のように 1 つまたは少数のプロファイルに限定することなく、システム内に存在するすべての プロファイルを一括更新することから、 統合システムプロファイル作成 とも呼ばれます。統合システムプロファイル作成では、プロファイルの構築と 改善はほとんど自動化することができませんが、その分だけ柔軟性があるものに なります。なお、この方法はシステムを再起動するまでの間動作し続けるような プログラムや、一括で多数のプログラムが動作するようなプログラムの場合に 適切な手段です。

複数のアプリケーションに対して AppArmor のプロファイルを作成するには、 下記の手順で行ないます:

  1. まずはお使いのアプリケーションを構成する各プログラムに対して、それぞれ プロファイルを作成します。

    本手順は統合型とは言うものの、 AppArmor はプロファイルの存在するプログラムと その子プロセスしか監視しません。 AppArmor に対してプログラムへの考慮を行なわ せるには、少なくとも aa-autodep を利用して概要プロファイルを作成して おかなければなりません。大まかなプロファイルを作成するための方法については、 23.6.3.1項 「aa-autodep—概要プロファイルの作成」 をお読みください。

  2. それぞれ関連するプロファイルを学習モードか不平モードに切り替えます。

    root でログインしてから端末ウインドウを開き、 aa-complain /etc/apparmor.d/* と入力することで、すべての プロファイルを学習モードや不平モードに切り替えることができます。この機能は YaST のプロファイルモジュールでも利用できるもので、こちらについては 22.6.2項 「個別のプロファイルに対するモード変更」 をお読みください。

    学習モードでは、たとえプロファイル側で明示的に拒否されていた場合であっても、 アクセス要求がブロックされることはありません。これにより、いくつかのテスト (ステップ 3 に 書かれているような) を実施することができるほか、プログラムが正しく動作する ためのアクセス要件を学習することができます。この情報を利用することで、 プロファイルをどれだけ堅牢にするかを決定することができます。

    学習モードに不平モードの詳しい手順については、 23.6.3.2項 「aa-complain—不平モード/学習モードへの突入」 をお読みください。

  3. アプリケーションを使用します。

    アプリケーションを起動し、その機能を一通り動作させます。少なくとも、 プログラムが必要とするファイルにはすべてアクセスするようにしてください。 動作は aa-genprof が管理するものではないため、この手順はシステムの 再起動を行なうまでの間、数日間や数週間の単位で動作させることができます。

  4. 次にログを分析します。

    統合型のプロファイル作成では、単独プロファイルで動作させる aa-genprof の代わりとして、 aa-logprof を直接起動します。 aa-logprof は下記のようにして実行します:

    aa-logprof [ -d プロファイルのパス ] [ -f ログファイルのパス ]

    aa-logprof について、詳しくは 23.6.3.5項 「aa-logprof—システムログのスキャン」 をお読みください。

  5. あとは ステップ 3ステップ 4 を繰り返します。

    繰り返し作業を行なうことで、最適なプロファイルを作成することができます。 繰り返しの作業では、学習してポリシーエンジンに読み込むデータを小さく まとめることができるほか、警告などのメッセージも少なくできるので、 より高速に動作することになります。

  6. プロファイルを編集します。

    生成されたプロファイルを確認したい場合は、 vim などを利用し、 /etc/apparmor.d/ ディレクトリ内にあるプロファイルを 開いて編集します。

  7. 強制モードに戻します。

    単純にログだけを採取していた状態から、プロファイル内に書かれているルールを 適用するようにシステムを戻します。これはプロファイル内に書かれている flags=(complain) という行を削除するか、もしくは aa-enforce コマンドを利用することで実施することができます。 これは aa-complain コマンドと同じ使い方で、 強制モードに切り替える作業を行なうものです。この機能は、 YaST の プロファイルモードモジュールから行なうこともできます。こちらについて 詳しくは 22.6.2項 「個別のプロファイルに対するモード変更」 をお読みください。

    すべてのプロファイルの不平モードを終了し、強制モードに戻すには、 aa-enforce /etc/apparmor.d/* と入力します。

  8. すべてのプロファイルを再読み込みします。

    AppArmor に対してすべてのプロファイルの再読み込みを行ない、カーネルでの 強制モードを適用するには、 rcapparmor restart と入力します。

23.6.3. プロファイル作成ツールの概要

AppArmor でのプロファイル作成ユーティリティは、 apparmor-utils RPM パッケージとして提供されて いて、それらは /usr/sbin 内に配置されます。これらは それぞれ異なる用途で使用します。

23.6.3.1. aa-autodep—概要プロファイルの作成

このユーティリティは、選択したプログラムやアプリケーションに対して、 概要プロファイルを作成します。バイナリの実行形式のほか、インタプリタ 型のスクリプトプログラムに対しても、プロファイルを作成することができます。 作成されたプロファイルが 概要プロファイル と呼ばれる のは、 AppArmor の制限下で動作するにあたって必要となる、すべての項目が含まれて いるわけではないことによります。 aa-autodep が生成する 最低限のプロファイルには、ほとんどのプログラムで必要となるプロファイル項目を 含む、基本的な include ディレクティブが書かれます。プログラムの種類によっては、 aa-autodep がさらに詳しいプロファイルを生成する場合もあります。 これはコマンドラインで指定した実行ファイルに対し、再帰的に ldd(1) を呼び出すことで生成されたプロファイルです。

概要プロファイルを作成するには aa-autodep プログラムを使用して行ないます。 aa-autodep に指定するパラメータは、パス名を含まないプログラム名 (aa-autodep 内部で PATH 環境変数を参照して検索します) かフルパスのプログラム名で指定します。概要 プロファイルを作成するプログラムには、任意の種類のものを指定できます (ELF 形式のバイナリ、シェルスクリプト、 Perl スクリプトなど) 。 aa-autodep は後に続く動的なプロファイル改善処理を行なう目的で、 概要プロファイルを作成します。

作成された概要プロファイルは、 AppArmor のプロファイル命名規約に従って /etc/apparmor.d ディレクトリ以下に作成されます。 これはプログラムの絶対パスのうち、スラッシュ (/) をピリオド (.) に置き換えた名前になります。 aa-autodep は通常、 root でログインした状態で、 端末ウインドウから下記のように入力して実行します:

aa-autodep [ -d /path/to/profiles ] [program1 program2...]

プログラム名を指定しない場合は、 aa-autodep の起動後に 問い合わせが表示されます。また、 /path/to/profiles を指定すると、既定で /etc/apparmor.d に設定されて いるプロファイルのパスを上書きすることができます。これにより、既定の 場所以外にプロファイルを作成することができます。

プロファイル作成を始めるには、まずお使いのアプリケーションを構成する それぞれの実行ファイルやサービスに対して、プロファイルを作成しなければ なりません (既にプロファイルを作成してあるプログラムや、そこから起動 される子プロセスなどは除きます) 。このようなプログラムを全て調べるのは 面倒な作業ですが、下記のようなやり方で調べることができます:

ディレクトリ

プロファイル対象のプログラムが全て 1 つのディレクトリにまとまって いて、そのディレクトリにはそれ以外のプログラムが存在していない場合、 aa-autodep /path/to/your/programs/* というシンプルなコマンドを実行することで、そのディレクトリ内にある 全てのプログラムに対する基本的なプロファイルを作成することができます。

ps コマンド

アプリケーションを起動したあと、標準の Linux コマンドである ps を利用すると、実行中の全てのプロセスを確認する ことができます。あとは手作業でそれぞれのプログラムの場所を探し出し、 それぞれに対して aa-autodep を実行すれば完了です。 プログラムが PATH 環境変数で検索可能なディレクトリにある場合は、 aa-autodep 側でプログラムを検索します。検索可能な ディレクトリに無い場合は、同じく標準の Linux コマンドである find を利用することで、プログラムを見つけることができます。 find / -name 'アプリケーション名' -print のように実行し、アプリケーションのパスを探してください。 なお、必要であればワイルドカードを利用することもできます。

23.6.3.2. aa-complain—不平モード/学習モードへの突入

不平モード/学習モードツール (aa-complain) は、 プロファイル済みのプログラムが許可されていないファイルにアクセスした場合など、 プロファイルルールの違反事例を検出するようにします。この場合、違反事例は 許可されるものの、ログが記録されます。プロファイルを改善するには、まず 不平モードに設定したあとプログラムを起動し、プログラムの振る舞いを記録させる ために一通りの機能を動作させます。あとは AppArmor ツールを利用してログファイルを 事後処理し、ログイベントをプロファイルに適用します。

不平モードを手作業 (コマンドライン経由) で有効にした場合、プロファイルの 冒頭にフラグを追加します。これにより /bin/foo と書かれて いる行が /bin/foo flags=(complain) のようになります。 不平モードを使用するには、端末ウインドウを開いて root になり、 下記のいずれかを入力します:

  • プログラムが PATH 環境変数で書かれたパス内に存在する場合は、下記のように 実行します:

    aa-complain /sbin/プログラム 1
    
  • プログラムが PATH 環境変数で書かれたパス内に存在しない場合は、下記のように 実行します:

    aa-complain /sbin/プログラム 1
  • プロファイルが /etc/apparmor.d 以外のディレクトリに 存在する場合は、下記のようにして場所を指定します:

    aa-complain /path/to/profiles/ プログラム 1
         
  • プログラム 1 に対するプロファイルを指定するには、 下記のようにします:

    aa-complain /etc/apparmor.d/sbin.プログラム 1

上記のコマンドは、いずれも指定したプロファイルやプログラムに対して、 不平モードを有効にします。プログラム名がフルパス表記でない場合、 aa-complain はプログラムを $PATH 内で検索します。 たとえば aa-complain /usr/sbin/* のように実行すると、 /usr/sbin 以下にある全てのプログラムに関連づけられて いるプロファイルを検索し、不平モードに切り替えます。また、 aa-complain /etc/apparmor.d/* のように実行すると、 /etc/apparmor.d 内にある全てのプロファイルを 不平モードに切り替えます。

[Tip]YaST を利用したプロファイルのモード切り替え

YaST では、不平モードや強制モードへのプロファイル切り替えについて、 グラフィカルなフロントエンドを提供しています。詳しくは 22.6.2項 「個別のプロファイルに対するモード変更」 をお読みください。

23.6.3.3. aa-enforce—強制モードへの突入

強制モードでは、 AppArmor のプロファイル済みのプログラムが許可されていない ファイルにアクセスした場合など、プロファイルルールの違反事例を検出し、 禁止します。強制モードは通常時に使用しておくべきものです。違反事例を 検出だけして、禁止したくない場合は、不平モードをお使いください。

強制モードを手作業 (コマンドライン経由) で有効にした場合、プロファイルの 冒頭にフラグを追加します。これにより /bin/foo と書かれて いる行が /bin/foo flags=(enforce) のようになります。 強制モードを使用するには、端末ウインドウを開いて root になり、 下記のいずれかを入力します:

  • プログラムが PATH 環境変数で書かれたパス内に存在する場合は、下記のように 実行します:

    aa-enforce [プログラム 1 プログラム 2 ...]
  • プログラムが PATH 環境変数で書かれたパス内に存在しない場合は、下記のように 実行します:

    aa-enforce /sbin/プログラム 1
  • プロファイルが /etc/apparmor.d 以外のディレクトリに 存在する場合は、下記のようにして場所を指定します:

    aa-enforce /path/to/profiles/プログラム 1
  • プログラム 1 に対するプロファイルを指定するには、 下記のようにします:

    aa-enforce /etc/apparmor.d/sbin.プログラム 1

上記のコマンドは、いずれも指定したプロファイルやプログラムに対して、 強制モードを有効にします。

プログラム名やプロファイル名を指定しない場合は、起動後に問い合わせが 表示されます。また、 /path/to/profiles を指定すると、既定で /etc/apparmor.d に設定されて いるプロファイルのパスを上書きすることができます。

パラメータにはプログラム名のほか、プロファイルの一覧を指定することも できます。プログラム名がフルパス表記でない場合、 aa-enforce はプログラムを $PATH 内で検索します。

[Tip]YaST を利用したプロファイルのモード切り替え

YaST では、不平モードや強制モードへのプロファイル切り替えについて、 グラフィカルなフロントエンドを提供しています。詳しくは 22.6.2項 「個別のプロファイルに対するモード変更」 をお読みください。

23.6.3.4. aa-genprof—プロファイルの生成

aa-genprof は AppArmor のプロファイル生成ユーティリティです。 指定したプログラムに対して aa-autodep を起動して 概要プロファイルを作成 (プロファイルが存在していなかった場合) し、プロファイルを 不平モードに切り替えます。その後 AppArmor の再読み込み処理を行なってログに印を付け、 ユーザに対してプログラムを起動して一通りの機能を利用するように促します。 aa-genprof の書式は下記のとおりです:

aa-genprof [ -d /path/to/profiles ]  program

たとえば Apache Web サーバのプログラムである httpd2-prefork に対して プロファイルを作成するには、下記の手順を root で実行します:

  1. まずは端末ウインドウから rcapache2 stop と入力します。

  2. 次に aa-genprof httpd2-prefork と入力します。

    aa-genprof は下記のように動作します:

    1. まずはシェルの PATH 環境変数を利用して、 httpd2-prefork のフルパス を解決しようとします。コマンドラインからフルパスを指定することで、 解決を行なわずにすませることも可能です。なお、 openSUSE では、 httpd2-prefork は /usr/sbin/httpd2-prefork にあります。

    2. 次に、 httpd2-prefork に対する既存のプロファイルが存在していないか どうかを確認します。既に存在する場合は更新し、存在しない場合は aa-autodep を利用して作成 (詳しくは 23.6.3項 「プロファイル作成ツールの概要」 を お読みください) します。

    3. このプログラムに対するプロファイルを、学習モードまたは不平モードに 切り替えます。これにより、プロファイルに対する違反事例は記録される ものの、特に禁止されることもなく動作するようになります。記録される イベントは下記のようになります (/var/log/audit/audit.log にあります):

      type=APPARMOR_ALLOWED msg=audit(1189682639.184:20816): operation="file_mmap" requested_mask="::r" denied_mask="::r" fsuid=30 name="/srv/www/htdocs/index.html" pid=27471 profile="null-complain-profile"
      

      監査デーモンを起動していない場合、 AppArmor のイベントは /var/log/messages 内に記録されます:

      Sep 13 13:20:30 K23 kernel: audit(1189682430.672:20810): operation="file_mmap" requested_mask="::r" denied_mask="::r" fsuid=30 name="/srv/www/htdocs/phpsysinfo/templates/bulix/form.tpl" pid=30405 profile="/usr/sbin/httpd2-prefork///phpsysinfo/"

      イベントは dmesg コマンドを利用して閲覧することも できます:

      audit(1189682430.672:20810): operation="file_mmap" requested_mask="::r" denied_mask="::r" fsuid=30 name="/srv/www/htdocs/phpsysinfo/templates/bulix/form.tpl" pid=30405 profile="/usr/sbin/httpd2-prefork///phpsysinfo/"
    4. ログイベントの冒頭には、判別しやすいようにマーカーが付けられています。 下記のような形式です:

      Sep 13 17:48:52 figwit root: GenProf: e2ff78636296f16d0b5301209a04430d
  3. ツールから問い合わせがあったタイミングで、プロファイル対象の アプリケーションを別の端末ウインドウ内で起動し、アプリケーションに用意されて いる機能をできるだけ多く使用します。これにより学習モードは、正しく動作 するのに必要な、各種ファイルやディレクトリへのアクセスをログに記録 します。たとえばこの場合、新しい端末ウインドウを起動して rcapache2 start と入力します。

  4. プログラムの機能を一通り試した後は、 aa-logprof を起動した端末ウインドウで、下記のキーのうちのいずれかを入力します:

    • S を押すと、 aa-logprof をシステムログに対して起動し、 aa-genprof がマーキングしたところからログを処理したあと、プロファイルを 読み込みなおします。ログ内にシステムイベントが存在した場合は、 AppArmor は 学習モードのログファイルを処理します。この処理では、 aa-genprof が正しいセキュリティプロファイルを作成するために必要な、各種問い合わせ メッセージが表示されます。

    • F を押すと、ツールを終了してメインメニューに戻る ことができます。

    [Note]

    ハットの追加を示すメッセージが表示された場合は、 第24章 ハット変更を利用した Web アプリケーションのプロファイル作成 をお読みください。

  5. それぞれ 2 種類の質問に対して回答してください:

    それぞれ下記に示す分類の事象が発生した場合、リソースやプロファイル 対象のプログラムに追加するための質問が表示されます。 それぞれ、 例23.1「学習モードの例外: 特定リソースに対するアクセス制御」例23.2「学習モードの例外: 項目に対する実行許可の設定」 に例が示されています。続く手順では、これらの質問に回答する際の選択肢 について説明しています。

    • 扱っている実行アクセスが複雑な場合。この場合は、これに適用する実行 許可タイプを選択しなければなりません:

      例23.1 学習モードの例外: 特定リソースに対するアクセス制御

      Reading log entries from /var/log/audit/audit.log.
      Updating AppArmor profiles in /etc/apparmor.d.
      
      Profile:  /usr/sbin/xinetd
      Program:  xinetd
      Execute:  /usr/lib/cups/daemon/cups-lpd
      Severity: unknown
      
      [(I)nherit] / (P)rofile / (U)nconfined / (D)eny / Abo(r)t / (F)inish
      

      継承 (ix)

      子プロセスに対して、親プロセスのプロファイルを引き継ぐように指定 します。これにより、親と子で同じアクセス制御を持つようになります。 この選択肢は、制限を受けるプログラムが他のプログラムを呼び出す環境 で、元のプロファイルから新しく権利や許可を受けたり失ったりしない 状況で便利な選択です。このモードは、子プログラムが ヘルパーアプリケーション である場合にしばしば使用される 選択肢で、たとえば /usr/bin/mail のようなメール クライアントから、 less のようなページャや Mozilla* Web ブラウザを起動したり、 PDF ファイルを表示するために Adobe Acrobat* を起動したりする場合が該当します。

      プロファイル (px)

      子プロセスに対して、子プロセス独自のプロファイルを使用させるように 指定します。プロファイルが存在しない場合は、子プロセスの起動は permission denied (許可がありません) として失敗します。 この選択肢は、親のプログラムがグローバルなサービス、たとえば DNS を参照したり、お使いのシステムにある MTA を利用してメールを 送信したりする場合などに特に便利な仕組みです。

      なお、 profile with clean exec (Px) を選択すると、 子プロセスに渡される環境変数のうち、実行動作を変更することのできる ものを取り除くことができます。

      無制限 (ux)

      子プロセスに対して、いかなる AppArmor のプロファイルをも適用しない、 無制限の実行を行なうように指定します。

      なお、 unconfined with clean exec (Ux) を選択 すると、子プロセスに渡される環境変数のうち、実行動作を変更することの できるものを取り除くことができます。この選択は、 AppArmor の盲点を作る ことになることから、セキュリティ上の脆弱性を作ってしまいます。 この選択は、他の選択がうまくいかない場合の最後の選択肢としてください。

      mmap (m)

      この許可は、プロファイル下で動作するプログラムに対して、 PROT_EXEC フラグ付きの mmap システムコールを利用し、 リソースにアクセスできる許可を与えます。これにより、ここにマッピング されたデータをプログラムとして実行できることになります。プロファイル の作成中にこれが要求された場合、許可するかどうかを尋ねられます。

      拒否

      指定されたディレクトリパス項目に対して、プログラムからのアクセスを 拒否します。 AppArmor は次のイベントに移動します。

      中止

      aa-logprof を中断し、今までに行なわれた全てのルール変更を取り消したあと、 全てのプロファイルを変更前の状態に戻します。

      完了

      aa-logprof を閉じ、今までに行なわれた全てのルール変更を保存します。

    • 例23.2「学習モードの例外: 項目に対する実行許可の設定」 には、プロファイル対象のアプリケーションがアクセスするディレクトリパス について、 AppArmor が提案するディレクトリを示しています。場合によっては、 実行許可を設定する必要がある場合もあります。

      例23.2 学習モードの例外: 項目に対する実行許可の設定

      Adding /bin/ps ix to profile.
      
      Profile:  /usr/sbin/xinetd
      Path:     /etc/hosts.allow
      New Mode: r
      
       [1 - /etc/hosts.allow]
      
      [(A)llow] / (D)eny / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish
      

      AppArmor では 1 つまたは複数のパス、もしくは include を提示します。選択肢の 番号を入力することで選択を行ない、次のステップに進むことができます。

      [Note]

      なお、 AppArmor のメニューには全ての選択肢が表示されない場合もあります。

      #include

      これは AppArmor のプロファイルを構成する include ファイルを参照する セクションで、プログラムに対するアクセス許可を設定するための ものです。 include を使用することで、ファイルやディレクトリに 対するアクセス許可を他のプログラムでも共有できるようになります。 また、 include を使用することでプロファイルのサイズを小さくする こともできます。提案があった場合は include を選択しておくのが お勧めです。

      グロブ表記

      これは次のステップで グロブ を選択した場合に 利用できるようになります。グロブの文法について、詳しくは 20.6項 「パスとグロブ」 をお読みください。

      実際のパス

      プログラムが必要としているパスそのものを指定し、アクセスできる ようにします。

      パスや include を選択したあとは、 AppArmor プロファイル内での扱いを、 許可 または 拒否 で指定します。 表示されたディレクトリパスが期待通りのものでない場合は、 グロブ を選択してワイルドカード指定を行なうことも できます。

      学習モードでの項目処理の選択肢には、下記のようなものがあります:

      Enter キー入力

      選択したディレクトリパスに対して、アクセスを許可します。

      許可

      選択したディレクトリパスに対して、アクセスを許可します。 AppArmor はファイルのアクセス許可を提案します。詳しくは 20.7項 「ファイルのアクセス許可とアクセスモード」 をお読みください。

      拒否

      指定したディレクトリパス項目に対して、プログラムからのアクセスを 拒否します。 AppArmor は次のイベントに進みます。

      新規

      このイベントに対して、正規表現を利用する独自のルールを設定します。 入力した正規表現が、最初に提示したイベントに対して十分なものでは ない場合、 AppArmor は確認メッセージを表示して再入力を促します。

      グロブ

      より広いパスが含まれるようにするため、指定したパスを選択するか ワイルドカードでルールを作成します。提示されたパスの中から選択 したい場合はパスの前に表示された番号を入力したあと、選択した項目 についてどのように扱うのかを指定します。

      グロブの書式について、詳しくは 20.6項 「パスとグロブ」 をお読みください。

      拡張子付きグロブ

      元々のディレクトリパスに対して、ファイル名の拡張子部分を保持する 形でのグロブを設定します。たとえば /etc/apache2/file.ext というディレクトリパス であった場合、ファイル名の本体部分にワイルドカード (アスタリスク) が挿入されて /etc/apache2/*.ext のようになります。 これにより、プログラムは指定したディレクトリ内に存在し、かつ .ext という拡張子を持つ全てのファイルに アクセスできるようになります。

      中止

      aa-logprof を中断し、今までに行なわれた全てのルール変更を取り消したあと、 全てのプロファイルを変更前の状態に戻します。

      完了

      aa-logprof を閉じ、今までに行なわれた全てのルール変更を保存します。

  6. vim を利用してプロファイルを閲覧したり編集したりしたい場合は、端末 ウインドウから vim /etc/apparmor.d/プロファイル名 のように入力します。

  7. rcapparmor restart コマンドを入力 して AppArmor を再起動し、新しく作成したものを含む全てのプロファイルセットを 再読み込みします。

AppArmor のプロファイルを構築する際のグラフィカルなフロントエンドと同様に、 YaST の AppArmor プロファイルウイザードと aa-genprof では、 /etc/apparmor/profiles/extras ディレクトリ内にある ローカルプロファイル と、リモートの AppArmor プロファイルリポジトリ を利用することができます。

ローカルリポジトリ内のプロファイルを利用するには、下記の手順を実施します:

  1. 上記の手順で aa-genprof を起動します。

    aa-genprof が有効に設定されていないローカルプロファイルを 検出すると、端末ウインドウ内に下記のようなメッセージを表示します:

    Profile: /usr/bin/opera
    
     [1 - Inactive local profile for /usr/bin/opera]
    
    [(V)iew Profile] / (U)se Profile / (C)reate New Profile / Abo(r)t / (F)inish
  2. 表示されたプロファイルを単純に使用したい場合は、 U (Use Profile) を選択してから、上述のプロファイル生成 手順を実施します。

    プロファイルを有効化する前に確認したい場合は、 V (View Profile) を選択します。

    既存のプロファイルを使用せずに無視したい場合は、 C (Create New Profile) を選択してから、上述のとおり 何もない状態からのプロファイル生成手順を実施します。

  3. aa-genprof を閉じ、今までに行なわれた全てのルール変更を保存するには、 F (Finish) を選択します。

aa-genprof でリモートの AppArmor プロファイルリポジトリを使用するには、 下記の手順を実施します:

  1. 上記の手順で aa-genprof を起動します。

    aa-genprof がリポジトリサーバ内に適切なプロファイルが存在すると判断した場合は、 端末ウインドウ内に下記のようなメッセージを表示します:

    Repository: http://apparmor.opensuse.org/backend/api
    
    Would you like to enable access to the profile repository?
    
    (E)nable Repository / (D)isable Repository / Ask Me (L)ater
    
  2. リポジトリを有効にするには、 E (Enable Repository) を選択します。

  3. aa-genprof に対して、リポジトリサーバにプロファイルをアップロードする かどうかを指示するには、下記のメッセージに応答してください:

    Would you like to upload newly created and changed profiles to
          the profile repository?
    
    (Y)es / (N)o / Ask Me (L)ater
    

    プロファイルのアップロードを有効にするには Y (Yes) を、単純にリポジトリからプロファイルの 取得だけを行なわせ、アップロードさせたくない場合は N (No) を選択します。

  4. プロファイルをアップロードできるようにするには、プロファイルの リポジトリサーバ内に新規ユーザを作成する必要があります。それぞれ ユーザ名とパスワードを用意してください。

  5. サーバからダウンロードしたプロファイルを使用するかどうかと、その内容を 確認するかどうかが尋ねられます:

    Profile: /usr/bin/opera
    
     [1 - novell]
    
    [(V)iew Profile] / (U)se Profile / (C)reate New Profile / Abo(r)t / (F)inish
    

    表示されたプロファイルを単純に使用したい場合は、 U (Use Profile) を選択してから、上述のプロファイル生成 手順を実施します。

    プロファイルを有効化する前に確認したい場合は、 V (View Profile) を選択します。

    既存のプロファイルを使用せずに無視したい場合は、 C (Create New Profile) を選択してから、上述のとおり 何もない状態からのプロファイル生成手順を実施します。

  6. aa-genprof を閉じ、今までに行なわれた全てのルール変更を保存するには、 F (Finish) を選択します。

    プロファイルをアップロードするように選択した場合は、短い変更履歴を 入力してリポジトリにアップロードします。

23.6.3.5. aa-logprof—システムログのスキャン

aa-logprof は、学習モードや不平モードで /var/log/audit/audit.log/var/log/messages (auditd が動作していない場合) に出力されたログ項目を確認するための対話的なツールで、ここから AppArmor のセキュリティプロファイルに対する新しい項目を作成することができます。

aa-logprof を実行すると、学習モードや不平モードで生成されたログファイルを 読み込み、既存のプロファイルセットではカバーしていない、新しいセキュリティイベントが 存在しないかどうかを確認したあと、プロファイルの修正について提案を表示します。 学習モードや不平モードはプログラムの動作を追跡してそれらをログに記録する仕組みで あるため、 aa-logprof はこの情報を利用してプログラムの振る舞いを監視します。

制限下にあるプログラムが fork() したり他のプログラムを実行したりした 場合、 aa-logprof はこれを検知して、子プロセスの起動時に使用する実行モードを ユーザに問い合わせます。実行モードはそれぞれ ix, px, Px, ux, Ux の中から選択します。子プロセスに 対して個別のプロファイルが存在する場合、既定の選択肢は px に なります。個別のプロファイルが存在しない場合は、既定値は ix になります。個別のプロファイルが存在する子プロセス に対しても aa-autodep を動作させ、 AppArmor 内に読み込む必要があります。

aa-logprof が終了すると、プロファイルは更新されます。 AppArmor モジュールが動作している 場合は更新されたプロファイルが再読み込みされます。また、セキュリティイベントを 生成しているプロセスが、その時点でも NULL-不平プロファイルで動作していた場合は、 それらのプロセスは適切なプロファイルで動作するように設定されます。

aa-logprof を実行するには、 root でログインしている 状態で端末ウインドウから aa-logprof と入力します。 aa-logprof に対しては下記のようなオプションを指定できます:

aa-logprof -d /path/to/profile/directory/

プロファイルが標準のディレクトリである /etc/apparmor.d/ に存在しない場合は、プロファイルのフルパスを指定することができます。

aa-logprof -f /path/to/logfile/

ログファイルが標準のディレクトリである /var/log/audit/audit.log/var/log/messages (auditd が動作していない場合) に存在しない場合は、ログファイルのフルパスを指定することができます。

aa-logprof -m "string marker in logfile"

aa-logprof に対してシステムログ内に開始点のマーキングを付けるように指示します。 aa-logprof は指定したマークよりも前にあるシステムログについては、全てのイベント を無視するようになります。なお、マークにスペースが含まれる場合、正しく動作させる には引用符を付けて指定しなければなりません。たとえば下記のようになります:

aa-logprof -m"17:04:21"

or

logprof -m e2ff78636296f16d0b5301209a04430d

aa-logprof がログを読み出すと、それぞれ記録されたイベントに対して、どのように 処理すべきかを尋ねてきます。それぞれの質問には AppArmor ルールに対する番号付きリストが 表示され、その番号を選択することでルールに追加することができるようになっています。

既定では aa-logprof は、 /etc/apparmor.d/ 内でプロファイルを検索し、 /var/log/messages 内で ログを検索します。多くの場合、 rootaa-logprof を起動すれば、プロファイルを作成するには十分な環境となります。

ただし、ログのローテーション (今まで書き込んでいたログの書き込みを停止し、 新しいログへの書き込みを始めること) 期間をまたいでいる場合など、アーカイブ されたログファイルを検索する必要がある場合は注意が必要です。この場合は zcat -f `ls -1tr /var/log/messages*` | aa-logprof -f - のようにして実行してください。

23.6.3.6. aa-logprof 実行例 1

下記に示す例は、 aa-logprof が httpd2-prefork のログを調査している場合の 例で、 /etc/group ファイルへのアクセスを行なって います。なお、 [] は既定値を示しています。

下記の例では /etc/group へのアクセスが httpd2-prefork のネームサービスアクセスの一部として扱っています。ここでの適切な応答は 1 で、 AppArmor ルール集として事前に定義されているものを 取り込むように指定します。 1 である #include を選択すると、 DNS 参照に分類される全ての質問のうち、今後発生するものを ネームサービスのパッケージで全て解決するようになります。また、このように することで、 DNS の設定を変更してもプロファイルが役に立たなくなるような 事態を防ぐことができるほか、関連するネームサービス関連の設定をひとまとめに することができます。

Profile:  /usr/sbin/httpd2-prefork
Path:     /etc/group
New Mode: r

[1 - #include <abstractions/nameservice>]
 2 - /etc/group
[(A)llow] / (D)eny / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish

それぞれ下記のように入力します:

Enter の入力

既定の選択肢を選択したものとみなします。この場合、指定したディレクトリ パス項目に対して、アクセスを許可します。

許可

指定したディレクトリパス項目に対して、アクセスを許可します。 AppArmor は ファイルアクセス許可を提案しています。アクセス許可について、詳しくは 20.7項 「ファイルのアクセス許可とアクセスモード」 をお読みください。

拒否

指定したディレクトリパス項目に対して、アクセスを拒否します。 AppArmor は 次のイベントに移動します。

新規

このイベントに対して独自のルールを設定します。ここでは正規表現による 記述を行なうことができます。入力した正規表現が表示されたイベントに 当てはまらないようなものであった場合、 AppArmor は確認メッセージを表示して 再入力を促します。

Glob

より広いパスが含まれるようにするため、指定したパスを選択するか ワイルドカードでルールを作成します。提示されたパスの中から選択 したい場合はパスの前に表示された番号を入力したあと、選択した項目 についてどのように扱うのかを指定します。

グロブの書式について、詳しくは 20.6項 「パスとグロブ」 をお読みください。

拡張子付きグロブ

元々のディレクトリパスに対して、ファイル名の拡張子部分を保持する 形でのグロブを設定します。たとえば /etc/apache2/file.ext というディレクトリパス であった場合、ファイル名の本体部分にワイルドカード (アスタリスク) が挿入されて /etc/apache2/*.ext のようになります。 これにより、プログラムは指定したディレクトリ内に存在し、かつ .ext という拡張子を持つ全てのファイルに アクセスできるようになります。

中止

aa-logprof を中断し、今までに行なわれた全てのルール変更を取り消したあと、 全てのプロファイルを変更前の状態に戻します。

完了

aa-logprof を閉じ、今までに行なわれた全てのルール変更を保存します。

23.6.3.7. aa-logprof 実行例 2

たとえば vsftpd に対してプロファイル作成を行なうと、下記のような 質問が表示されます:

Profile:  /usr/sbin/vsftpd
Path:     /y2k.jpg
New Mode: r

[1 - /y2k.jpg]

(A)llow / [(D)eny] / (N)ew / (G)lob / Glob w/(E)xt / Abo(r)t / (F)inish

この質問にはいくつか注目すべき項目があります。まず 1 つめには、 openSUSE 上で動作する vsftpd は、既定では /srv/ftp 内にあるファイルを公開するはずなのに対し、 トップレベルのディレクトリにある項目のアクセス可否を尋ねていることがあります。 これは vsftpd が chroot を使用 しているためで、コードの一部が chroot 環境内で動作するためです。 AppArmor はグローバルな絶対パスではなく、 chroot 環境下のパスとしてファイル アクセスを確認するためです。

2 つめに注目すべき項目としては、このディレクトリ内にある全ての JPEG ファイルに対して FTP からの読み込みアクセスを許可したい場合、 拡張子付きグロブ を利用し、 /*.jpg というパスを設定できる点です。このようにして個別の .jpg ファイルに対するアクセス許可ルールを集約し、 今後発生する .jpg ファイルの質問に対して、 前もって手を打つことができます。

最後に、 FTP で提供されているファイルに対してより広範囲のアクセス許可を 設定することができます。最後の行に書かれている Glob を選択すると、 aa-logprof は表示されているパス /y2k.jpg/* に置き換える ことができます。またこれ以外にも、ディレクトリツリー全体に対してアクセス 許可を設定したい場合は、 New を選択してから /**.jpg と入力する (サブディレクトリを含む全ての .jpg ファイルにアクセスを許可する意味) か、もしくは /** と入力して (サブディレクトリを含む全てのファイルに アクセスを許可する意味) ください。

ここまでの説明では読み込みアクセスについて記述してきましたが、書き込み アクセスに対しても同様です。ただし書き込みアクセスに対しては、正規表現を 使用する場合でもより注意して作っておいたほうが良いでしょう。また、実行 許可の設定はより複雑なやり方になります。詳しくは 例23.1「学習モードの例外: 特定リソースに対するアクセス制御」 をお読みください。

下記の例では、 /usr/bin/mail というメールクライアントに 対してプロファイルを作成していて、 /usr/bin/mail/usr/bin/less をヘルパーアプリケーションとして呼び出し、 長いメールメッセージを表示している例です:

/usr/bin/nail -> /usr/bin/less
(I)nherit / (P)rofile / (U)nconfined / (D)eny
[Tip]

/usr/bin/mail の実際の実行ファイルは /usr/bin/nail です。印字ミスなどではありません。

プログラム /usr/bin/less は 1 画面以上にわたる テキストファイルに対して、これをスクロールさせながら読むのに適した シンプルなソフトウエアです。 /usr/bin/mail が使用して いることからもわかるとおり、シンプルではありますがパワフルで広範囲の用途を 持った、 tar や rpm のようなヘルパーアプリケーションを使用することもできる ソフトウエアです。

[Tip]

tar 形式のファイルや RPM ファイルに対して less を 実行すると、これらのファイルに含まれる内容を表示することができます。

たとえばメールメッセージを表示したとき、 rpm コマンドを 自動では動作させたくない場合 (RPM ファイルはシステムプログラムを インストールしたり修正したりする機能があるため、 Microsoft* Outlook スタイルの直接的なウイルス攻撃になります) は、 継承 を選択しておくのがベストです。これにより、この環境下で less プログラムを 実行すると、 /usr/bin/mail 向けのプロファイルで 動作するようになるため、下記のような影響があります:

  • /usr/bin/less に対するファイルアクセス許可の うち、基本的なもの全てを /usr/bin/mail の プロファイルに追加する必要があります。

  • tar や rpm のようなヘルパーアプリケーションを追加する必要がなくなります。 これは /usr/bin/mail と同じ環境で /usr/bin/less を動作させるため、 less が AppArmor の 保護無しで動作させるよりはずっと安全になるためです。

その他の状況下では、 プロファイル オプションを使用する こともできます。これは aa-logprof に対して 2 つの影響があります:

  • プロファイルに対して書き込まれるルールが px を使用するようになります。 これは子プロセス独自のプロファイルに強制的に遷移させるための設定です。

  • aa-logprof は子プロセスに対してもプロファイルを生成し、構築します。 それは親のプロセスを構築したのと同じ方法で行なわれるもので、子プロセスに 対して発生したイベントを、 aa-logprof からの問い合わせをもとに、 子プロセスのプロファイルに反映させる手順です。

制限下にあるプログラムが fork() したり他のプログラムを実行したりした 場合、 aa-logprof はこれを検知して、子プロセスの起動時に使用する 実行モードをユーザに問い合わせます。実行モードはそれぞれ継承、 プロファイル、無制限、もしくは実行の拒否を選択できます。

また、子プロセスに対して個別のプロファイルが存在する場合、既定の選択肢は プロファイルになります。個別のプロファイルが存在しない場合は、既定値は 継承になります。継承 (ix) について、詳しくは 20.7項 「ファイルのアクセス許可とアクセスモード」 をお読みください。

プロファイルの選択肢は、子プロセスに対して独自のプロファイル下で実行 させることを指しています。 2 つめの質問では、親から引き継ぐ子プロセス 向けの環境変数について、実行動作を変更することのできるものを取り除く かどうかが問い合わせられます。取り除く処理を有効にすると、お使いの AppArmor プロファイル内にある実行オプションに Px が設定され ます。取り除く処理を選択しなかった場合は実行オプションに px が設定され、環境変数はそのまま引き継がれます。プロファイルを選択した 場合の実行モードの既定値は px です。

無制限モードでの実行は非推奨であり、その他の選択ではどうしても動作する プロファイルを生成できない場合にのみ選択すべきものです。無制限オプションを 選択すると、警告ダイアログが表示されて確認が求められます。メッセージを確認 して はい を押すと、実行動作を変更することのできる 環境変数について、これらを取り除くかどうかを選択します。 はい を選択すると、お使いのプロファイル内の実行オプションに Ux が設定されます。 いいえ を選択すると実行モードは ux が設定されます。無制限モードでの既定値は Ux です。

[Important]無制限モードでの実行

ux の選択は非常に危険なものであり、プログラムの実行 動作に対して一切の強制力 (セキュリティ観点での) が働かなくなります。

23.6.3.8. aa-unconfined—保護されていないアクセスの検出

aa-unconfined コマンドは、お使いのシステムからネットワークに対して 開いているポートを検出し、システムに読み込まれているプロファイル集との 比較を行ないます。その後、 AppArmor プロファイルが適用されていない ネットワークサービスについて報告を行ないます。このコマンドの実行には root の権限が必要で、 AppArmor のプロファイルでの制限を受けてはいけません。

aa-logprof は /proc ファイルシステムから プロセスの実行ファイルへのリンクを探すため、 root で動作させなければ なりません。なお、このプログラムは下記のような状況では正しく動作しない 場合もあります:

  • 削除された実行ファイルが正しく処理されない場合がある

  • netstat(8) を実行してから詳しいチェックを行なうまでの 間にプロセスが終了した場合、正しく処理されない場合がある

[Note]

このプログラムは TCP と UDP を使用しているプロセスのみを列挙します。 つまり、このプログラムは危険箇所を把握するためのソフトウエアではなく、 検証環境などからネットワークにアクセスできる全てのプログラムを検出し、 プロファイルを作成するために用意されているものです。

23.7. 重要なファイル名とディレクトリ

下記には AppArmor のフレームワークで使用される、最も重要なファイルとディレクトリ を列挙しています。お使いのプロファイルについて手作業で管理したりトラブルの 原因を探ったりしたい場合は、あらかじめこれらのファイルやディレクトリに ついて知識を得ておいてください:

/sys/kernel/security/apparmor/profiles

現在読み込まれているプロファイル集を表示することのできる、仮想ファイルです。

/etc/apparmor/

AppArmor の設定ファイルが含まれるディレクトリです。

/etc/apparmor/profiles/extras/

AppArmor に同梱されているローカルのプロファイルリポジトリです。 ただし有効化されていないことに注意してください。

/etc/apparmor.d/

プロファイルが配置されるディレクトリです。ファイル名の規則として、 パス内の /. に置き換えた (ただしルートディレクトリの / は除く) 名前を利用する ようになっていて、管理しやすくなっています。たとえば /usr/sbin/ntpd に対するプロファイルは usr.sbin.ntpd という名前になります。

/etc/apparmor.d/abstractions/

アブストラクト (抽象) が配置されるディレクトリです。

/etc/apparmor.d/program-chunks/

プログラムチャンクが配置されるディレクトリです。

/proc/*/attr/current

このファイルを表示させることで、プロセスに対する制限状態を確認する ことができるほか、プロセスを制限するのにどのプロファイルが使用されて いるのかを確認することができます。 ps auxZ のように実行することで、この情報を自動的に採取することも できます。


openSUSE セキュリティガイド 13.1