Sun ONE Web Server 6.1 管理員指南 |
附錄 C
ACL 檔案語法本附錄描述了存取控制清單 (ACL) 檔案及其語法。ACL 檔案是指包含清單的文字檔,這些清單定義哪些使用者可以存取儲存在 Web 伺服器上的資源。依預設,Web 伺服器使用一個包含用於存取伺服器所有清單的 ACL 檔案。然而,您可以建立多個 ACL 檔案,並在 obj.conf 檔案中參照這些檔案。
如果您計劃使用存取控制 API 自訂存取控制,則需要瞭解 ACL 檔案的語法與功能。例如,您可以使用存取控制 API 與另一個資料庫 (例如 Oracle 或 Informix 資料庫) 接合。如需有關 API 的更多資訊,請參閱 Sun ONE 文件網站:
本附錄包含下列小節:
ACL 檔案語法所有 ACL 檔案均必須遵循特定的格式與語法。ACL 檔案是包含一個或多個 ACL 的文字檔。所有 ACL 檔案均必須以其所使用的版本號碼開始。只能有一個版本行,該版本行可以出現於任何註釋行之後。Sun ONE Web Server 6.1 使用版本 3.0。例如︰
您可以透過以 # 符號開始註釋行,在檔案中納入註釋。
檔案中的每個 ACL 均以定義其類型的描述開始。ACL 可以採用以下三種類型之一:
路徑 ACL 和 URI ACL 均可以在項目的結尾包含萬用字元。例如︰/a/b/*。萬用字元只能位於項目的結尾,否則將不起作用。
類型行以字母 acl 開始,然後是類型資訊 (以雙引號標示),其後跟隨一個分號。所有 ACL 的每種類型資訊均必須為唯一名稱--即使在不同的 ACL 檔案中亦如此。下列行是數個不同類型 ACL 的範例:
定義 ACL 的類型之後,您可以具有一個或多個描述,定義 ACL 使用的方法 (認證描述),以及定義被允許或被拒絕存取的使用者與電腦 (授權描述)。以下小節描述了這些描述的語法。
本節包括下列主題:
認證方法
ACL 可以選擇性地指定伺服器處理 ACL 時必須使用的認證方法。有三種一般方法:
基本認證方法和摘要認證方法要求使用者在存取資源之前輸入使用者名稱和密碼。
SSL 認證方法要求使用者具有用戶端證書。Web 伺服器必須使加密處於開啟狀態,並且使用者的證書核發者必須位於要認證的可信任 CA 清單中。
依預設,伺服器針對未指定方法的任意 ACL 使用「基本」方法。您的伺服器認證資料庫必須能夠處理使用者傳送的摘要認證。
每個認證行均必須指定伺服器認證的屬性 (使用者、群組或者使用者與群組)。以下認證描述 (將出現於 ACL 類型行之後) 指定了對使用者的基本認證,這些使用者匹配資料庫或目錄中的個別使用者。
以下範例使用 SSL 作為使用者和群組的認證方法:
以下範例允許使用者名稱以字母 sales 開始的所有使用者:
如果最後一行變更為 group = sales,則 ACL 將失敗,因為未認證群組屬性。
授權描述
每個 ACL 項目均可以包含一個或多個授權描述。授權描述指定允許或拒絕哪些使用者存取伺服器資源。寫入授權描述時,請使用以下語法:
以 allow 或 deny 作為每一行的開始。一般來說,最好在第一條規則中拒絕所有使用者進行存取,然後在後續規則中明確允許使用者、群組或電腦進行存取。這是由於規則具有階層結構。也就是說,如果您允許所有使用者存取名為 /my_stuff 的目錄,並且您還有一個僅允許幾個使用者存取的子目錄 /my_stuff/personal,則子目錄的存取控制將無效,因為被允許存取 /my_stuff 目錄的所有使用者亦將被允許存取
/my_stuff/personal 目錄。為防止上述情形發生,請為子目錄建立一條規則,先拒絕所有使用者存取,然後允許需要存取的幾個使用者進行存取。然而,在某些情況下,如果將預設 ACL 設定為拒絕所有使用者存取,則其他 ACL 規則不需要「deny all」規則。
下列行拒絕所有使用者存取:
本節包括下列主題:
授權描述的階層
ACL 具有取決於資源的階層。例如,如果伺服器接收到對文件 (URI)
/my_stuff/web/presentation.html 的請求,則伺服器會建立適用於此 URI 的 ACL 清單。伺服器首先增加其 obj.conf 檔案的「check-acl」描述中所列示的 ACL。然後,伺服器會附加匹配的 URI ACL 與 PATH ACL。伺服器將以相同的順序處理此清單。除非有「absolute」ACL 描述,否則將依順序評估所有描述。如果「absolute allow」或「absolute deny」描述評估為「true」,則伺服器將停止處理並接受此結果。
如果有多個匹配的 ACL,則伺服器會使用匹配的最後一個描述。然而,如果您使用絕對描述,則伺服器會停止尋找其他匹配的 ACL,並使用包含絕對描述的 ACL。如果同一個資源具有兩個絕對描述,則伺服器將在檔案中使用第一個描述,並停止尋找其他匹配的資源。
屬性表示式
屬性表示式基於使用者的使用者名稱、群組名稱、主機名稱或 IP 位址,定義允許或拒絕哪些使用者進行存取。以下各行是允許不同使用者或電腦存取的範例:
您也可以透過使用 timeofday 屬性,對存取伺服器的時間 (基於伺服器上的本機時間) 進行限定。例如,使用 timeofday 屬性,在特定時間內限定特定使用者進行存取。
以下範例限定名為 guests 的使用者群組在上午 8:00 到下午 4:59 之間存取:
也可以依星期幾來限定存取。請使用以下三個字母的縮寫來指定星期幾:Sun、Mon、Tue、Wed、Thu、Fri 和 Sat。
以下描述允許高級群組中的使用者在任一天的任何時間進行存取。折扣群組中的使用者可以在週末的全天以及在工作日中除上午 8:00 到下午 4:59 的任何時間進行存取。
表示式的運算子
您可以在屬性表示式中使用各種運算子。圓括號表示運算子的優先順序。對於 user、group、dns 和 ip,可以使用以下運算子:
對於 timeofday 和 dayofweek,可以使用:
預設 ACL 檔案
安裝後,server_root/httpacl/generated.https-serverid.acl 檔案為伺服器提供了預設設定。伺服器將一直使用工作檔案 genwork.https-serverid.acl,直至您在使用者介面中建立設定。編輯 ACL 檔案時,您可以在 genwork 檔案中進行變更,然後使用 Sun ONE Web Server 儲存和套用這些變更。
一般語法項目
輸入字串可以包含以下字元:
如果您使用其他任何字元,需要使用雙引號標示字元。
單一描述可以單獨放在一行,並以分號結束。多個描述放於花括號內。項目清單必須使用逗號分隔,並以雙引號標示。
參照 obj.conf 中的 ACL 檔案如果您擁有已命名 ACL 檔案或單獨 ACL 檔案,可以在 obj.conf 檔案中參照它們。您可以透過 check-acl 函式,在 PathCheck 指令中執行此作業。該行使用以下語法︰
由於出現在任何 ACL 檔案中,因此 aclname 為 ACL 的唯一名稱。
例如,如果您想要使用名為 testacl 的 ACL 來限定對目錄的存取,則可以將以下各行增加至 obj.conf 檔案:
在上述範例中,第一行是一個物件,描述您想要限定對哪些伺服器資源的存取。第二行是 PathCheck 指令,該指令藉由 check-acl 函式將已命名 ACL (testacl) 連結至使用了該指令的物件。testacl ACL 可以出現於 magnus.conf 所參照的任何 ACL 檔案中。