5.2 mod-apparmorへのApache設定

Apacheはプレインテキスト設定ファイルにディレクティブを設置して設定します。主要な設定ファイルは通常、httpd.confです。Apacheをコンパイルするときに、このファイルの場所を指定することができます。ディレクティブをこれらの任意のファイルに設置して、Apacheの動作を変更することができます。主要な設定ファイルを変更する際は、Apacheを起動または再起動して変更を認識させる必要があります。

5.2.1 バーチャルホストディレクティブ

バーチャルホストディレクティブは、実際のファイル名(存在するディレクトリにある存在しないファイル)に続く末尾のパス名を含む要求が、受け入れられるか拒否されるかを管理します。バーチャルホストディレクティブに関するApacheの説明については、http://httpd.apache.org/docs-2.0/mod/core.html#virtualhostを参照してください。

change-hatに特有の設定キーワードはImmDefaultHatNameですが、これはたとえばImmDefaultHatName My_Funky_Default_Hatのように、ImmHatNameと同じように使用されます。

設定オプションは実際、サーバのディレクティブに基づいています。そのためその他のオプション以外のキーワードを使用し、デフォルトのサーバに対してそのキーワードを設定することができます。バーチャルホストは内部的にApache内にあり、「サーバー」と分けられるとされています。このため必要であれば、デフォルトのサーバーに対し1つのデフォルトのhat名を設定することができ、また各バーチャルホストに対し1つのhat名を設定することができます。

要求を受け取ったとき、mod-apparmorでは以下のステップでシーケンスをhatに適用させようとします。 

  1. ImmHatNameキーワードにより特定された場所またはディレクトリのhat。

  2. 完全なURIパスから名前がついたhat。

  3. ImmDefaultHatNameキーワードにより特定されたデフォルトサーバーのhat

  4. DEFAULT_URI(存在しない場合は、「」Apache hatに戻ります)

5.2.2 場所およびディレクトリのディレクティブ

場所およびディレクトリのディレクティブは、プログラム設定ファイル内のhat名を特定し、プログラムがセキュリティに関してhatを呼び出せるようにします。Apacheに関しては、場所およびディレクトリのディレクティブについての説明がhttp://httpd.apache.org/docs-2.0/sections.htmlに記載されています。

以下に挙げる場所のディレクティブの例は、ある場所ではmod-apparmorは特別のhatを使用する必要があることを示します:

<Location /foo/>
      ImmHatName MY_HAT_NAME
</Location>

ここでは、mod-apparmorで始まる任意のURIについてMY_HAT_NAMEを使用することを試みます(/foo//foo/bar/foo/cgi/path/blah_blah/blahなど)。

ディレクトリのディレクティブは場所のディレクティブと同じように機能しますが、以下の例のようなときにファイルシステム内のパス名を参照します:

<ディレクトリ "/srv/www/www.immunix.com/docs"> # 末尾のスラッシュがないことに注意 
     ImmHatName immunix.com
</Directory>

例:  以下の例で場所のディレクティブを示す際に、プログラムphpsysinfoが使用されます。TAR書庫はhttp://phpsysinfo.sourceforge.comからダウンロードできます。

  1. TAR書庫をダウンロードしたら、それを/srv/www/htdocs/sysinfo/にインストールします。

  2. /etc/apache2/conf.d/sysinfo.confを作成し、以下のテキストをそこへ追加します:

    <Location "/sysinfo">
              ImmHatName sysinfo
    </Location>

    以下のhatがphpsyinfoに対し動作します:

       ^sysinfo {
      #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,
      }
    
  3. ターミナルウィンドウでルートとしてrcsubdomain restartと入力し、Novell AppArmorプロファイルをリロードします。

  4. ルートとしてログインし、ターミナルウィンドウでrcapache2 restartと入力してApacheを再起動します。

  5. ブラウザでhttp://hostname/sysinfo/と入力し、phpsysinfoが配信する情報を受け取ります。

  6. /var/log/syslogに行くか、またはdmesgを実行して設定エラーを追跡し、出力の拒否がないかどうか検索します。