章 5. 使用 ChangeHat Apache 建立網頁應用程式設定檔

內容目錄

5.1. Apache ChangeHat
5.2. mod-apparmor 的 Apache 組態

NovellŪ AppArmor 設定檔可提供個別程式例項或程序的安全性原則。設定檔可以套用至可執行程式中,但如果程式的某個部份所需要的存取許可權與其他部份不同,則程式可「變更 hats」 以使用不同的安全性內容,並與主程式的存取有明顯的不同。這通常稱為 hat子設定檔

ChangeHat 可讓程式變更 Novell AppArmor 設定檔中的 hat。這可讓您定義較程序更高層級的安全性。

此功能需要每個應用程式都具備「changehat aware」的功能,這表示其必須能夠對 Novell AppArmor 模組提出要求,在應用程式執行期間的任何時間點上切換安全性領域。

設定檔可包含任意數量的子設定檔,但全部只分成兩種層級: 子設定檔並沒有更下層的子設定檔。子設定檔是寫成個別設定檔,以包含的設定檔命名,再加上子設定檔名稱並以 ^ 分隔。子設定檔必須儲存在與上層設定檔相同的檔案中。

[Note]

如需更多資訊,請參閱 change_hat 線上文件。


5.1. Apache ChangeHat

Novell AppArmor 為 Apache 程式提供了 mod-apparmor 模組。mod-apparmor 可在 SUSE Linux 上運作,使 Apache 網頁伺服器具備「ChangeHat aware」功能。系統上若有安裝 Apache,就會自動安裝該模組。

當 Apache 具備「ChangeHat-aware」功能時,它會依照接收每個 URI 的順序來檢查以下的自訂 Novell AppArmor 安全性設定檔。

  • 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]

如果您安裝的 mod-apparmor 不含 Novell AppArmor,您必須確定 Apache 載入模組在組態檔中具有一個指令,可將下行新增至組態檔以載入 mod-apparmor

LoadModule change_hat_module modules/mod_change_hat.so

5.1.1. 管理 ChangeHat-Aware 應用程式的工具

如同大部份的 Novell AppArmor 工具一樣,您可以使用兩種方法來管理 ChangeHat、YaST 或指令行介面。使用指令行管理 ChangeHat-aware 應用程式較具有彈性,但程序也比較複雜。兩種方法都可讓您管理應用程式的 hat,並在其中匯入設定檔項目。

在以下步驟中,我們將提供示範以引導您使用 YaST 將 hat 新增至 Apache 設定檔。在新增設定檔精靈中,Novell AppArmor 建立設定檔公用程式會提示您為特定的 URI 要求建立新 hat。選擇建立新的 hat 可讓您為每個 URI 建立個別的設定檔。這可讓您為每個要求建立非常嚴格的規則。

如果處理的 URI 並不代表重要的程序或重大的安全性風險,可以放心選擇使用預設 Hat,在預設的 hat 中處理此 URI,這也是預設的安全性設定檔。

在示範中,我們為 URI phpsysinfo-dev 以及其後續存取建立一個新的 hat。我們會使用設定公用程式將新增的項目委託給這個新的 hat。產生的 hat 會變成高安全性的容器以包含伺服器上的所有處理程序,而這些程序是 phpsysinfo-dev URI 傳送至 Apache 網頁伺服器時產生的。

在此示範中,我們會產生一個應用程式 phpsysinfo 的設定檔 (請參閱 http://phpsysinfo.sourceforge.net 以取得更多資訊)。假設 phpsysinfo-dev 已安裝在全新安裝 Novell AppArmor 中的 /srv/www/htdocs/phpsysinfo-dev/ 之下。

  1. 在安裝 phpsysinfo-dev 之後,您就可以準備將 hat 新增至 Apache 設定檔中。從 Novell AppArmor GUI 中選擇新增設定檔精靈

    新增設定檔精靈
  2. 要新增的設定檔中,輸入 httpd2-prefork

  3. 按一下建立設定檔。會開啟 AppArmor 建立設定檔精靈視窗。

    AppArmor 建立設定檔精靈
  4. 在終端機視窗中輸入 rcapache2 restart 以重新啟動 Apache。

    [Note]

    重新啟動您正在建立設定檔的程式。

  5. 在網頁瀏覽器視窗中開啟 http://localhost/phpsysinfo-dev/。瀏覽器將會顯示網路使用量和系統資訊。

    [Note]

    若您要確定伺服器已處理此要求,且不在瀏覽器中檢閱快取資料,您必須重新整理頁面。要這樣做,請按一下重新整理按鈕以確定 Apache 會處理 phpsysinfo-dev 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 (選擇 Inherit) 及個別設定檔 (選擇 Profile) 的限制,或者不受到任何限制或不包含任何安全性設定檔 (選擇 Unconfined)。在 Profile 選項的情況中,系統會為不存在設定檔的程式建立一個新設定檔。

    [Note]

    選擇 Unconfined 將會產生重大的安全性漏洞,因此必須謹慎進行。

    AppArmor 設定檔精靈:Inherit
    1. /bin/bash 路徑選擇 Inherit。這會將 /bin/bash/ (由 Apache 存取) 新增至含必要許可權的 phpsysinfo-dev hat 設定檔中。

    2. 按一下允許

  9. 剩餘的問題會提示您產生新的 hat 並將項目新增至設定檔及其 hat 中。節 3.3.1, "使用精靈新增設定檔" (↑Novell AppArmor 2.0 管理指南) 一節中詳細說明了將項目新增至設定檔的程序。

    在回答所有的設定問題之後,按一下完成以儲存變更並結束精靈。

以下為 phpsyinfo-dev 的範例。

範例 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 管理指南)」中的說明),就有選項可以讓您將 hat (子設定檔) 新增至 Novell AppArmor 設定檔。

您可以從 AppArmor 設定檔對話方塊視窗中新增 ChangeHat 子設定檔。

AppArmor 設定檔對話方塊
  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 管理指南)