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,其用法與 ImmHatName 類似,例如 ImmDefaultHatName My_Funky_Default_Hat

組態選項實際上是以伺服器指示詞為基礎,這可讓您使用其他選項以外的關鍵字,因此您可以為預設伺服器設定這個組態選項。虛擬主機被視為是 Apache 內部的個別「伺服器」,因此您可以為預設伺服器設定預設的 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>

針對任何以 /foo/ 開頭的 URI (/foo//foo/bar/foo/cgi/path/blah_blah/blah 等),它會嘗試使用 MY_HAT_NAME

目錄指示詞的運作方式與位置指示詞類似,不過該指示詞會參考檔案系統中的路徑名稱,如以下範例所示:

<Directory "/srv/www/www.immunix.com/docs"> # Note lack of trailing slash
      ImmHatName immunix.com
</Directory>

範例:.  在以下範例中,利用程式 phpsysinfo 示範位置指示詞。您可以從 http://phpsysinfo.sourceforge.com 下載 tarball。

  1. 將下載完成的 tarball 安裝至 /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. 以 root 身份在終端機視窗中輸入 rcsubdomain restart,重新載入 Novell AppArmor 設定檔。

  4. 以 root 身份登入時,在終端機視窗中輸入 rcapache2 restart,以重新啟動 Apache。

  5. 在瀏覽器中輸入 http://hostname/sysinfo/ 以接收 phpsysinfo 傳送的系統資訊。

  6. 移至 /var/log/syslog 或執行 dmesg 並尋找輸出中的拒絕以追蹤組態錯誤。