章 3. 建立 Novell AppArmor 設定檔

內容目錄

3.1. 設定檔元件和語法
3.2. 建立和管理 Novell AppArmor 設定檔
3.3. 使用 YaST GUI 建立 Novell AppArmor 設定檔
3.4. 使用指令行介面建立 Novell AppArmor 設定檔
3.5. 兩種設定方法
3.6. 路徑名稱和 globbing
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 規則共有兩種主要類型,即路徑項目和功能項目。路徑項目會指定程序可以在檔案系統中存取哪些內容,而功能項目會提供更精細的方法,控制透過其他需要權限的系統呼叫可以執行哪些特定程序。Include 是一種中繼規則或指示詞,可拉進其他檔案的路徑項目和功能項目。

說明設定檔的組成、以及如何建立設定檔的最簡單方式,就是顯示範例設定檔的詳細資訊。讓我們以下面這個 /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

一種路徑項目,可用來指定程式可存取的檔案系統區域。路徑項目的第一個部份會指定檔案的絕對路徑 (包含一般表示式 globbing),第二部份會指示允許的存取模式 (r 表示讀取、w 表示寫入,而 x 表示執行)。任何型式 (空格或 Tab 鍵) 空白都可放置在路徑名稱之前,或者用來區隔路徑名稱與存取模式。您也可選擇在存取模式和後面逗號之間放入空白。

如果是為程式建立設定檔,該程式就只能存取該設定檔所指定的檔案、模式和 POSIX 功能。這些是原始 Linux 存取控制項以外的限制。

範例: .  若要取得功能 CAP_CHOWN,該程式必須同時具有在傳統 Linux 存取控制權下 CAP_CHOWN 的存取權 (通常這是擁有 root 權限使用者的程序),以及在其設定檔中設定 chown 功能。同樣地,若要能夠寫入檔案 /foo/bar,這個程式必須擁有正確的使用者 ID 和在檔案屬性的模式位元集 (請參閱 chmodchown man 頁面),並且在其設定檔中設定 /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/,這是它預期在其中找到 Include 檔案的檔案。不同於其他設定檔陳述式 (但與 C 程式類似),#include 行並不是以逗號作為結尾。

Novell AppArmor 提供了兩種類別的 #include、抽象和程式區塊,以便協助您為應用程式建立設定檔。

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)

功能陳述式只是在 “capability” 文字後加上 POSIX.1e 功能的名稱,詳細資訊請參閱 capabilities(7) man 頁面。