第5章 ChangeHat Apacheを使用したWebアプリケーションのプロファイル

目次

5.1. Apache ChangeHat
5.2. mod-apparmorへのApache設定

NovellŪ AppArmorプロファイルとは、個々のプログラム インスタンスやプロセスのセキュリティポリシーを表します。これは実行プログラムに適用されますが、プログラムの一部が他の部分と異なるアクセス権を必要とする場合に、プログラムは「change hat(hatの変更)」を行い、メインプログラムとは異なる独自のセキュリティコンテキストを使用します。hatまたはサブプロファイルと呼ばれます。

ChangeHatにより、プログラムでNovell AppArmor プロファイル内のhatを変更できます。セキュリティをプロセスよりも細かいレベルで定義できます。

この機能を使用するには、各アプリケーションで「changehat aware」に設定する必要があります。つまり、この変更により、アプリケーションの実行中に適宜、セキュリティドメインを切り替えるよう、Novell AppArmorモジュールに要求することができます。

プロファイルは任意の数のサブプロファイルをもつことができますが、階層は2つしかありません。サブプロファイルの中でさらにサブプロファイルを設定することはできません。サブプロファイルは独立したプロファイルとして記載され、親プロファイル名とサブプロファイル名を^で区切った名前が付けられます。サブプロファイルは親プロファイルと同じファイルに保存する必要があります。

[Note]注意

詳細についてはchange_hatのマンページを参照してください。


5.1 Apache ChangeHat

Novell AppArmor には、Apacheプログラムのためのmod-apparmorモジュールがあります。mod-apparmorモジュールはSUSE Linux上で動作し、Apache Webサーバが「ChangeHatを認識」できるようにします。システム上にApacheがあればインストールされます。

ApacheがChangeHatを認識する状態のとき、以下のカスタマイズされたNovell AppArmorセキュリティプロファイルを、受け取った各URI要求の順番で確認します。

  • URI指定のhat(たとえば、^phpsysinfo-dev/templates/classic/images/bar_left.gif

  • DEFAULT_URI

  • HANDLING_UNTRUSTED_INPUT

システム上に必要なApache 2があれば、mod-apparmorモジュールはNovell AppArmorと一緒に自動的にインストールされ、Apacheの設定に追加されます。Apache 1.3はサポートされません。

[Note]注意

Novell AppArmorを使用せずにmod-apparmorをインストールするには、Apache 設定ファイルに次の行を追加することにより、Apacheロードモジュールが設定ファイル内に、mod-apparmorモジュールをロードするコマンドを持つことを確認する必要があります。

LoadModule change_hat_module modules/mod_change_hat.so

5.1.1 ChangeHat認識アプリケーションを管理するツール

ほとんどのNovell AppArmorツールと同様に、ChangeHatを管理するために2つの方法、つまり、YaSTまたはコマンドラインインターフェイスを使用できます。コマンドラインを使用するとChangeHat認識アプリケーションをより柔軟に管理することができますが、プロセスはより複雑です。いずれの方法でも、アプリケーションに対してhatを管理し、プロファイルの登録にhatをあてがうことができます。

以下の手順により、YaSTを使用してApacheのプロファイルにhatを追加するデモを行います。[プロファイル追加ウィザード]では、Novell AppArmorプロファイルユーティリティにより、明確なURIを要求するための新しいhatを作成するよう求められます。[新しいhatの作成]を選択すると、各URIに対し個別のプロファイルを作成することができます。これにより、各要求に応じて厳密な規則を作成することができます。

処理されるURIが重要な処理を行わない場合や重大なセキュリティリスクを伴わない場合、Use Default Hatを選択してこのURIをデフォルトのhatで処理することができます。これはデフォルトのセキュリティプロファイルです。

デモでは、URIphpsysinfo-devへの新しいhatおよびその後のそれへのアクセスを作成します。プロファイルユーティリティを使用すると、新しいhatに追加される設定を委任することができます。その結果hatはphpsysinfo-devURIがApache Webサーバーに渡ったときに起こるサーバー上での処理をすべて網羅する、セキュリティの固い容器となります。

このデモでは、phpsyinfoアプリケーションのためのプロファイルを作成します(詳細についてはhttp://phpsysinfo.sourceforge.netを参照してください)。phpsysinfoパッケージは/srv/www/htdocs/phpsysinfo-dev/の下に、Novell AppArmorの新規インストールの過程でインストールされることが想定されています。

  1. phpsysinfo-devがインストールされると、Apacheプロファイルにhatを追加することができます。Novell AppArmor GUIから[プロファイルウィザードの追加]を選択します。

    プロファイルウィザードの追加
  2. 追加するプロファイルで、httpd2-preforkと入力します。

  3. プロファイルの作成をクリックします。[AppArmorプロファイルウィザード]ウィンドウが開きます。

    AppArmorプロファイルウィザード
  4. ターミナルウィンドウで rcapache2 restartと入力し、Apacheを再起動します。

    [Note]注意

    この時にプロファイルしているプログラムを再起動します。

  5. Webブラウザ画面でhttp://localhost/phpsysinfo-dev/を開きます。ブラウザのウィンドウではネットワークの使用およびシステム情報について表示されます。

    [Note]注意

    この要求がサーバーにより処理されることを確認したいときに、キャッシュされたデータをブラウザで見直していない場合は、ページを最新の情報に更新します。  これを行うには、ブラウザの更新ボタンをクリックし、ApacheがURIへの要求を処理することを確認します。

  6. [システムログをスキャンしてエントリーをプロファイルに追加する]をクリックします。Novell AppArmorはこれまでのステップで習得した情報をすべてスキャンするlogprofツールを開始します。プロファイルへの質問が表示されます。

  7. デモでは、logprofで最初に、要求されたHatを追加するまたはデフォルトのHatを追加するを選択することが求められます。これはphpsysinfo-devがURIにアクセスしたためです。[要求されたHatを追加する]を選択します。

    AppArmor プロファイルウィザード:要求されたHatを追加する
  8. 承認をクリックします。

    ここで要求されたHatを追加するを選択すると、プロファイルに新しいhatが作成され、その後スクリプトが行う処理についての質問が、このアプリケーションのデフォルトのhatにではなく新規作成されたhatに追加されることを示します。

    次の画面で、Novell AppArmorはスクリプトが実行した外部プログラムを表示します。プログラムをphpsysinfo-dev hatで囲み実行するのか(継承を選択する場合)、別のプロファイルで囲み実行するのか(プロファイルを選択する場合)、囲まずにまたはセキュリティプロファイルなしで実行するのか(囲みなしを選択する場合)を指定することができます。プロファイルオプションを選択する場合、プロファイルがなければ新しく作成されます。

    [Note]注意

    囲みなしを選択する場合、深刻なセキュリティホールが生まれるため、注意する必要があります。

    AppArmor プロファイルウィザード:継承
    1. /bin/bashパスに対し継承を選択します。これにより、/bin/bash/(Apacheがアクセスしたパス)が必要なアクセス権とともにphpsysinfo-dev hatプロファイルに追加されます。

    2. 承認をクリックします。

  9. 残りの質問では、新しいhatを作成し、プロファイルおよびhatにエントリを追加するよう求められます。プロファイルにエントリを追加するプロセスについては、3.3.1項 「ウィサードを使用してプロファイルを追加する」 (↑Novell AppArmor 2.0アドミニストレーションガイド)に記載されています。

    プロファイルの質問すべてに答えたら、完了をクリックして変更を保存し、ウィザードを終了します。

以下は、phpsyinfo-dev hatの具体例です。

例 5.1 phpsysinfo-dev Hatの例

  ^phpsysinfo {
  #include <program-chunks/base-files>
    /bin/df                               ix,
    /bin/bash                             ix,
    /dev/tty                              rw,
    /etc/SuSE-release                     r,
    /etc/fstab                            r,
    /etc/hosts                            r,
    /etc/mtab                             r,
    /proc/**                              r,
    /sbin/lspci                           ix,
    /srv/www/htdocs/sysinfo/**            r,
    /sys/bus/pci/devices                  r,
    /sys/devices/**                       r,
    /usr/bin/who                          ix,
    /usr/share/pci.ids                    r,
    /var/log/apache2/{access,error}_log   w,
    /var/run/utmp                         r,
  }
[Note]注意

^phpsysinfo-devプロファイルは、親プロファイルhttpd2-preforkの下でプロセスが実行される状態でのみ、有効です。

5.1.2 HatにHatおよびエントリを追加する

プロファイルの編集を使用するとき(方法については3.3.3項 「プロファイルの編集」 (↑Novell AppArmor 2.0アドミニストレーションガイド)を参照)、または[Novell AppArmorプロファイルを手動で追加]を使用して新しいプロファイルを追加するとき(方法については3.3.2項 「手動によるプロファイルの追加」 (↑Novell AppArmor 2.0アドミニストレーションガイド)を参照)、Novell AppArmorプロファイルにhat(サブプロファイル)をオプションで追加できます。

[AppArmorプロファイルダイアログ]ウィンドウからChangeHatのサブプロファイルを追加することができます。

プロファイルダイアログ
  1. [AppArmorプロファイルダイアログ]ウィンドウから、[エントリを追加]をクリックし、[Hat]を選択します。[Hat名入力]ダイアログボックスが開きます:

    hat名を入力
  2. Novell AppArmorプロファイルに追加するhat名を入力します。名前は、アクセスの際に、hatに設定されたアクセス権を受け取るURIです。

  3. Hatを作成をクリックします。[AppArmorプロファイルダイアログ]画面に戻ります。

  4. 新しいhatを入力したら、終了をクリックします。

[Note]注意

Novell AppArmorプロファイルの例については、例 5.1. 「phpsysinfo-dev Hatの例」 (↑Novell AppArmor 2.0アドミニストレーションガイド)を参照してください。