第3章 Novell AppArmorプロファイルの構築

目次

3.1. プロファイルコンポーネントおよび構文
3.2. Novell AppArmorプロファイルの構築と管理
3.3. YaST GUIを使用したNovell AppArmorプロファイルの構築
3.4. コマンドラインインタフェースを使用したNovell AppArmorプロファイルの構築
3.5. プロファイルの方法
3.6. パス名およびグロッビング
3.7. ファイルアクセス権限モード

この章では、NovellŪ AppArmorプロファイルを構築し管理する方法について説明します。プロファイルするプログラムを選択すると、Novell AppArmorプロファイルを構築できる状態になります。この処理に関するヘルプは、第2章 検疫するプログラムの選択 (↑Novell AppArmor 2.0アドミニストレーションガイド)を参照してください。


3.1 プロファイルコンポーネントおよび構文

このセクションでは、Novell AppArmorプロファイルの構文または構造の詳細について説明します。この構文を説明する例は、3.1.1項 「Novell AppArmorプロファイルの各部への分割」 (↑Novell AppArmor 2.0アドミニストレーションガイド)に表示されています。

3.1.1 Novell AppArmorプロファイルの各部への分割

Novell AppArmorプロファイルコンポーネントはNovell AppArmorルールと呼ばれています。現在、Novell AppArmorルールには主に2種類あります。パスエントリおよび機能エントリです。パスエントリでは、ファイルシステムでプロセスがアクセスするものを指定し、機能エントリでは、制限されたプロセスが 権限を必要とする他のシステムコールを通して行うことができる動作に対して、よりきめの細かい制御を行うことができます。インクルードは、他のファイルからパスおよび機能を取得するメタルールまたはディレクティブのタイプです。

プロファイルを構成するもの、およびプロファイルの作成方法について説明するのに最も簡単な方法は、サンプルプロファイルの詳細を表示することです。たとえば以下の、プログラム/sbin/klogdへのプロファイルについて検討してみます。

# profile to confine klogd1
/sbin/klogd 2
{3
#include <abstractions/base>4
  capability sys_admin,5
  /boot/* r6,
  /proc/kmsg r,
  /sbin/klogd r,
  /var/run/klogd.pid lw,
}
1

このプロファイルにより制限されるプログラムに名前付けするコメントです。常に#の記号をこのようなコメントの前に置きます。

2

制限されたプログラムへの絶対パスです。

3

中カッコ{}は、 他のプロファイルのinclude文のコンテナとして、またパスエントリおよび機能エントリのコンテナとして機能します。

4

このディレクティブはNovell AppArmorプロファイルのコンポーネントを取得し、プロファイルを簡略化します。

5

機能エントリ文は、29 POSIX.1eのドラフト機能をそれぞれ有効にします。

6

プログラムがアクセスできるファイルシステムの領域を指定するパスエントリです。パスエントリの最初の部分では、ファイルの絶対パスを指定し(一般的な表現方法によるグロッビングを含む)、次の部分はアクセス権モードを表します(rは読み取り、wは書き込み、xは実行)。いかなる種類の空白スペース(スペースまたはタブ)も、パス名の前で使用でき、またはパス名とアクセス権モードを分けるのに使用できます。アクセス権モードと末尾のカンマの間の空白スペースは省略できます。

プログラム用のプロファイルが作成されると、プログラムはプロファイル内で指定したファイル、モードおよびPOSIX機能にのみアクセスできます。 これらの制限は、ネイティブのLinuxアクセス制御に追加されるものです。

例: .  CAP_CHOWNの機能を得るにはプログラムは、従来のLinuxアクセス制御(通常はrootが持つプロセス)の下のCAP_CHOWNへのアクセス権を有し、そのプロファイル内の機能を備えている必要があります。同様に、ファイル/foo/barへ書き込みをするにはプログラムは、正しいユーザIDおよびファイル属性内にセットされたモードのビットを有し( chmodおよびchownのマニュアルページを参照)、そのプロファイル内に/foo/bar wを備えている必要があります。

Novell AppArmorルールに違反する試みは、syslogに記録されます。多くの場合、Novell AppArmorルールは攻撃が機能するのを防ぎます。その理由は、必要なファイルはアクセス不可能であり、いかなる場合でもNovell AppArmorの制限は、Novell AppArmorに許可された一連のファイルに対して攻撃者が加えるダメージを制限するためです。

3.1.2 #include

#include文は、他のNovell AppArmorプロファイルのコンポーネントを取得してプロファイルを簡素化するディレクティブです。プログラムへのアクセス権を取得するファイルを含めます。includeを使用すると、その他のプログラムもまた必要とするディレクトリパスまたはファイルへのアクセス権を、プログラムに備えることができます。 includeを使用すると、プロファイルのサイズを縮小できます。

デフォルトでは、#include文は、includeファイルがあるとされている/etc/apparmor.d/を自動的にパス名の先頭に追加します。他のプロファイル文とは異なり(C言語のプログラムには類似していますが)、#includeの行には末尾にカンマがありません。

アプリケーションをプロファイルするのを支援するため、Novell AppArmorには#includeの2つのクラスがあります。抽象化およびプログラムチャンクです。

3.1.2.1 抽象化

抽象化は、一般的なアプリケーションタスクによりグループ化される#include です。これらのタスクに含まれるのは、アクセス認証メカニズム、名前サービスルーチンへのアクセス、一般的な画像の要求およびシステム会計です。これらの抽象化に一覧表示されるファイルは、名前付けされたタスクに特有のものです。これらのファイルの一つを必要とするプログラムは通常、抽象化ファイル内に表示された他のいくつかのファイルを必要とします(ローカル設定およびプログラムの特殊な要求に応じて決定されます)。抽象化は/etc/apparmor.d/abstractions/にあります。

3.1.2.2 プログラムチャンク

プログラムチャンクは、システム管理者がローカルサイトのポリシーに基づき管理することを希望する、特定のプログラムへのアクセス制御です。各チャンクは単独のプログラムで使用されます。これらは、ローカルサイトをポリシーへ変更すること、およびNovell AppArmorにより与えられるポリシーへ更新することを容易にするために提供されます。管理者は、ポリシーの更新をNovell AppArmorから強化されたポリシーへ毎回マージするタスクを簡略化して、これらのファイルのポリシーを変更してニーズに合わせ、プログラムプロファイルを変更せずに残すことができます。

プログラムチャンク内のアクセス制御は通常、非常に自由であり、ユーザが全く規制されることなくファイルにアクセスできるよう設計されています。一方でシステムリソースは依然として保護されます。この規則の例外は、プログラムチャンクのpostfix*シリーズです。これらのプロファイルは、postfixバイナリの場所を抽出するのを支援するために使用されます。ユーザはpostfix*シリーズ内のアクセス権を下げることをおそらく望まないでしょう。プログラムチャンクは/etc/apparmor.d/program-chunks/にあります。

3.1.3 機能エントリ(POSIX.1e)

Capabilities文は単純に、「capability」の文字の後に、capabilities(7)のマニュアルページで定義されるPOSIX.1eの機能名を続けたものです。