Sun Java System Web Server 7.0 Update 3 管理員指南

第 7 章 控制對伺服器的存取

您可以透過數種安全性服務與機制 (包括認證、授權和存取控制) 保護 Web 伺服器中的資源。本章說明一些用以控制 Web 伺服器 存取的支援機制。

何為存取控制

認證是確認識別的程序。授權表示將存取受限資源的權限授予某個身份識別,並由存取控制機制強制執行這些限制。可透過多種安全性模型 (Web 應用程式安全性、htaccess、認證範圍等) 和服務來強制執行認證與授權。

存取控制讓您決定:

您可以控制對整個伺服器、部分伺服器或您網站上的檔案或目錄的存取。您可以建立稱為存取控制項目 (ACE) 的規則階層來允許或拒絕存取。您建立的 ACE 集合稱為存取控制清單 (ACL)。

依預設,伺服器具有一個包含多個 ACL 的 ACL 檔案。確定用於內送請求的虛擬伺服器後,伺服器會檢查是否為此虛擬伺服器配置了任何 ACL。如果找到適用於目前請求的 ACL,伺服器將評估其 ACE 以確定是否應該允許或拒絕存取。

允許或拒絕存取基於以下事項:

存取控制的運作方式

當伺服器收到某個頁面的請求時,伺服器將使用 ACL 檔案中的規則來確定是否允許存取。這些規則可以參照傳送請求的電腦之主機名稱或 IP 位址。還可以參照儲存在 LDAP 目錄中的使用者和群組。


備註 –

如果有一個以上符合的 ACL,伺服器將使用最後一個相符的 ACL 敘述。uri ACL 是最後一個符合的敘述,因此會略過預設 ACL。


Web 伺服器

上圖說明存取控制在 Web 伺服器 中的運作方式。使用者代理程式 (用戶端) 會存取 Web 伺服器。Web 伺服器執行 obj.conf 檔案中的 PathCheck 指令。Web 伺服器會將 HTTP 401 (未經授權) 傳回至用戶端。用戶端將提示使用者進行認證。如果用戶端為瀏覽器,則將會顯示一個登入對話方塊。使用者輸入登入資訊。Web 伺服器執行內部 check-acl 功能。Web 伺服器驗證使用者憑證並處理請求。

為使用者/群組設定存取控制

您可以僅允許特定的使用者或群組存取您的 Web 伺服器。使用者/群組存取控制需要使用者輸入使用者名稱和密碼,然後才能存取伺服器。伺服器會將用戶端憑證中的資訊與目錄伺服器項目進行比較。

管理伺服器僅使用基本認證。如果您希望需要在管理伺服器上進行用戶端認證,必須手動編輯 ACL 檔案,將方法變更為 SSL。

Web 伺服器藉由讀取使用者群組資料庫中的項目,執行使用者/群組認證。目錄服務用於執行存取控制的資訊可以從以下任何一種來源獲得:

當伺服器使用基於 LDAP 的外部目錄服務時,它支援對伺服器實例使用以下類型的使用者/群組認證方法:

當伺服器使用基於檔案的內部目錄服務時,它支援的可對伺服器實例使用的使用者/群組認證方法有:

使用者/群組認證要求使用者先進行認證,然後才能存取伺服器或網站上的檔案和目錄。認證之後,使用者以用戶端憑證輸入使用者名稱及密碼,來驗證他們的身份。 只有 SSL 通訊需要用戶端憑證。

預設認證

預設認證是首選方法。預設設定會使用 server.xml 檔案中的預設方法,若 server.xml 中沒有設定,則使用「基本」方法。如果核取 [預設],ACL 規則便不會在 ACL 檔案中指定方法。如果選擇 [預設],則編輯 obj.conf 檔案中的一行即可輕鬆變更所有 ACL 的方法。

基本認證

基本認證要求使用者輸入使用者名稱和密碼,才能存取 Web 伺服器或網站。此為預設設定。您必須在 LDAP 資料庫 (例如 Sun Java System Directory Server) 或檔案中建立並儲存使用者與群組清單。您使用的目錄伺服器不能與您的 Web 伺服器安裝在相同的伺服器根目錄下;您也可以使用安裝在遠端機器上的目錄伺服器。

當使用者嘗試在管理伺服器或網站上存取需要使用者/群組認證的資源時,Web 瀏覽器將顯示對話方塊,要求該使用者輸入使用者名稱和密碼。伺服器將收到加密或未加密的資訊,這取決於是否為您的伺服器開啟了加密。


備註 –

使用不具有 SSL 加密的基本認證,以未加密文字的方式在網路上傳送使用者名稱和密碼。網路封包可能會被截取,並且使用者名稱和密碼可能會被盜用。基本認證結合 SSL 加密、主機 IP 認證或兩者時最有效。使用「摘要認證」可以避免此問題。


SSL 認證

伺服器可以使用安全憑證,以下列兩種方式來確認使用者的身份:

當您設定讓伺服器使用憑證資訊對用戶端進行認證時,伺服器將:

要求以用戶端認證機制控制用戶端存取特定資源,與要求所有伺服器連線皆需進行用戶端認證是不同的。如果您將伺服器設定為需要對所有連線進行用戶端認證,則用戶端只需提供一份由可信任的 CA 核發的有效憑證即可。如果您將伺服器的存取控制設定為使用 SSL 方法來認證使用者與群組,則用戶端將需要:

當您需要以用戶端認證進行存取控制時,便需要為您的 Web 伺服器啟用 SSL 加密。

為了成功存取 SSL 認證資源,用戶端憑證必須來自 Web 伺服器信任的 CA。如果 Web 伺服器的 certmap.conf 檔案配置為將瀏覽器中的用戶端憑證與目錄伺服器中的用戶端憑證進行比較,則需要在該目錄伺服器中發佈用戶端憑證。不過,certmap.conf 檔案也可以配置為僅將憑證中已選取的資訊與目錄伺服器項目進行比較。例如,您可以將 certmap.conf 檔案配置為僅將瀏覽器憑證中的使用者 ID 和電子郵件位址與目錄伺服器項目進行比較。


備註 –

由於檢查憑證時對照的是 LDAP 目錄,因此僅 SSL 認證方法需要對 certmap.conf 檔案進行修改。要求所有對伺服器的連線進行用戶端認證則不需要如此。如果您選擇使用用戶端憑證,則應該增加 magnus.conf 中 AcceptTimeout 指令的值。


摘要認證

可以將伺服器配置為使用基於 LDAP 或基於檔案的目錄服務執行摘要認證。

摘要認證允許使用者根據使用者名稱和密碼進行認證,而無須傳送明文格式的使用者名稱和密碼。瀏覽器以使用者的密碼和 Web 伺服器提供的某些資訊,利用 MD5 演算法來建立摘要值。

當伺服器使用基於 LDAP 的目錄服務執行摘要認證時,也將使用摘要認證外掛程式在伺服器端計算該摘要值,並與用戶端提供的摘要值比較。如果摘要值相符,則使用者將通過認證。為了使此機制得以運作,您的目錄伺服器需要存取明文格式的使用者密碼。Sun Java System Directory Server 具有一個可逆的密碼外掛程式,它使用對稱的加密演算法以加密形式儲存資料,這些資料可在稍後被解密成原來的形式。只有目錄伺服器保留了資料的金鑰。

對於基於 LDAP 的摘要認證,您需要啟用伺服器中包含的可逆密碼外掛程式及 digestauth 專用外掛程式。若要配置 Web 伺服器以處理摘要認證,請設定 dbswitch.conf 中資料庫定義的 digestauth 特性。

如果未指定 ACL 方法,則需要認證時,伺服器將使用摘要認證或基本認證;不需要認證時,伺服器將使用基本認證。此為首選方法。

表 7–1 摘要認證的不同情況

ACL 方法  

認證資料庫支援摘要認證  

認證資料庫不支援摘要認證  

「預設」 

未指定 

摘要和基本 

基本 

「基本」 

基本 

基本 

「摘要」 

摘要 

錯誤 

當處理具有 method = digest 的 ACL 時,伺服器嘗試透過下列方式進行驗證:

為主機 IP 設定存取控制

您可以限制對管理伺服器或您網站上的檔案和目錄的存取,方法為讓僅使用特定電腦的用戶端能夠存取它們。可以指定要允許或拒絕存取的電腦之主機名稱或 IP 位址。您可以使用萬用字元樣式指定多台電腦或整個網路。"使用主機 IP 認證存取檔案或目錄對使用者而言極為便利。" 使用者無須輸入使用者名稱或密碼,可立即存取檔案和目錄。

因為不止一人可以使用特定的電腦,所以主機 IP 認證結合使用者/群組認證時,會更有效。如果同時使用這兩種認證方法,則存取時將需要輸入使用者名稱和密碼。

主機 IP 認證並不需要在您的伺服器上配置 DNS。如果您選擇使用主機 IP 認證,則網路中必須有 DNS 處於執行中狀態,且您的伺服器必須配置為可使用該 DNS。

啟用 DNS 會降低伺服器的效能,因為伺服器將不得不執行 DNS 查找。若要降低 DNS 查找對伺服器效能的影響,請僅解析存取控制與 CGI 的 IP 位址,而非解析每個請求的 IP 位址。若要這樣做,請將 iponly=1 附加至 obj.conf 檔案中的 AddLog fn="flex-log" name="access":

AddLog fn="flex-log" name="access" iponly=1

配置 ACL 使用者快取記憶體

依預設,伺服器將快取 ACL 使用者快取中的使用者和群組認證結果。您可以使用 magnus.conf 檔案中的 ACLCacheLifetime 指令,控制 ACL 使用者快取處於有效狀態的時間。 每一次參照快取中的項目時,將對照 ACLCacheLifetime 計算並檢查該項目的作用時間。如果該項目的生命週期大於或等於 ACLCacheLifetime,則不會使用它。預設值為 120 秒。將該值設定為 0 (零) 將關閉快取。如果將此值設定為較大的數字,則每次變更 LDAP 項目時,您可能需要重新啟動伺服器。例如,如果將此值設定為 120 秒,則此伺服器可能會與 LDAP 目錄不同步達兩分鐘。僅當 LDAP 目錄不經常變更時才設定一個較大的值。

使用 ACLUserCacheSize 的 magnus.conf 參數,您可以配置可保留在快取中的最大項目數。此參數的預設值為 200。新項目將增加到清單的開頭,而且快取達到大小的上限時,會回收清單尾端的項目以產生新項目。

您還可以使用 magnus.conf 中的參數 ACLGroupCacheSize,為每個使用者項目設定可快取的最大群組成員數。此參數的預設值為 4。可惜的是,目前不會快取群組中非成員關係的使用者,這將導致每個請求都要進行數次 LDAP 目錄存取。

如需有關 ACL 檔案指令的更多資訊,請參閱「NSAPI Developer’s Guide」。

設定 ACL 快取特性

若要透過 CLI 設定 ACL 快取特性,請執行以下指令。


wadm> set-acl-cache-prop --user=admin --password-file=admin.pwd --host=serverhost 
--port=8989 --config=config1 property=value

請參閱 CLI 參考資料 set-acl-cache-prop(1)。

您可設定的有效特性為:

配置存取控制

伺服器使用儲存在本機上的存取控制清單 (ACL) 來支援認證與授權,這些清單說明使用者對資源具有哪些存取權限。例如,ACL 中的某項目可授予名為 John 的使用者對特定資料夾 misc 的 read 權限。

本節說明了限制存取您網站上檔案或目錄的程序。您可以為所有伺服器設定全域存取控制規則,也可以為特定的伺服器進行個別設定。例如人力資源部門可以建立 ACL,允許所有經過認證的使用者檢視其自己的薪資資料,但是僅允許負責薪資的人力資源人員更新資料。

伺服器支援的核心 ACL 是三種類型的認證: 基本認證、SSL 認證以及摘要認證。

若要編輯存取控制設定,請執行以下作業:

  1. 按一下 [配置] 標籤,然後選取配置。

  2. 按一下 [安全性] 子標籤 > [存取控制] 子標籤。

  3. 按一下 [增加 ACL] 按鈕 增加新的 ACL,或按一下現有 ACL 來編輯設定。

增加存取控制清單 (ACL)

以下小節說明將新的 ACL 增加至配置的程序。

  1. 按一下 [配置] 標籤,然後選取配置。

  2. 按一下 [存取控制] 子標籤 > [存取控制清單] 子標籤。

  3. [新增] 按鈕,增加新的 ACL。

配置以下參數:

表 7–2 ACL 參數

參數

說明

資源

已命名/URI/路徑。選取您需要設定存取限制和指定值的資源類型。URI 資源範例 ─「/sales」。路徑資源範例 —「/usr/sun/server4/docs/cgi-bin/*」。 

認證資料庫

認證資料庫可讓您選取伺服器將用於認證使用者的資料庫。

預設為 keyfile。

認證方法

  1. 基本 — 使用 HTTP 基本方法從用戶端取得認證資訊。僅當在伺服器上啟用 SSL 時,才會透過網路對使用者名稱和密碼進行加密。

  2. SSL — 使用用戶端憑證進行使用者認證。若要使用此方法,必須為伺服器啟用 SSL。啟用加密後,您可以結合使用「Basic」和「SSL」方法。

  3. 摘要 — 使用認證機制,使得瀏覽器能夠根據使用者名稱和密碼進行認證,而無須傳送明文格式的使用者名稱和密碼。瀏覽器利用使用者的密碼和 Web 伺服器提供的某些資訊,透過 MD5 演算法來建立摘要值。請注意,若要使用摘要,基本認證資料庫必須也支援摘要。 僅當已安裝摘要認證外掛程式時,這才表示使用 digestfile 的檔案 auth-db 或 LDAP auth-db

  4. 其他 — 使用透過存取控制 API 建立的自訂方法。

提示進行認證

[提示進行認證] 選項可讓您輸入顯示在認證對話方塊中的訊息文字。您可以使用此文字來說明使用者需要輸入的內容。基於瀏覽器不同,使用者將看到該提示中大概前 40 個字元。

通常,Web 瀏覽器會快取使用者名稱和密碼,並將其與提示文字相關聯。當使用者存取具有相同提示之伺服器的檔案和目錄時,無須再次輸入使用者名稱和密碼。如果您要讓使用者針對特定檔案和目錄再次進行認證,則只需變更該資源上 ACL 的提示。 

拒絕的存取回應

指定存取資源遭拒絕時所採取的回應動作。 

1. 使用預設訊息回應 — 選取此選項,以顯示來自伺服器的標準存取拒絕訊息。 

2. 使用 URL 回應 — 選取此選項,以將請求轉寄至其他外部 URL 或錯誤頁面。 


備註 –

使用 CLI

若要透過 CLI 增加 ACL,請執行以下指令。


wadm> set-acl --user=admin --password-file=admin.pwd 
--host=serverhost --port=8989 --vs=config1_vs_1 --config=config1 
--aclfile=aclfile1

請參閱 CLI 參考資料 set-acl(1)。


增加存取控制項目 (ACE)

本節說明為所選配置增加新存取控制項目 (ACE) 的程序。

  1. 按一下 [配置] 標籤,然後選取配置。

  2. 按一下 [存取控制] 子標籤 > [存取控制清單] 子標籤。

  3. 按一下 [新增] 按鈕。

  4. 按一下存取控制項目下的 [新增] 按鈕。

配置以下 ACE 參數:

表 7–3 ACE 參數

參數

說明

存取

  • 允許表示使用者或系統可以存取請求的資源

  • 拒絕表示使用者或系統不能存取該資源

    伺服器將檢查整個存取控制表示式 (ACE) 清單以確定存取權限。

使用者

1. 任何人 — 無認證。授予每個人存取權。

2. 認證資料庫中的所有使用者 — 對認證資料庫中指定的所有使用者授予存取權。

3. 僅認證資料庫中的以下使用者 — 僅限於認證資料庫中所選使用者存取。

您可以根據一般屬性 (如名字、姓氏和電子郵件位址) 來查詢認證資料庫。 

群組

使用群組認證時,會提示使用者輸入使用者名稱和密碼,然後使用者才能存取在存取控制規則中指定的資源。 

使用此選項限制對特定群組的存取。 

從主機

您可以根據請求的來源電腦限定對管理伺服器或您的網站的存取。 

您可以根據請求的來源電腦限定對管理伺服器或您的網站的存取。 

  • [任何位置] 允許存取所有使用者和系統

  • [僅來自] 僅允許對特定主機名稱或 IP 位址進行存取

如果選取 [僅來自] 選項,請在 [主機名稱] 或 [IP 位址] 欄位中輸入萬用字元樣式或以逗號分隔的清單。依主機名稱進行限定比依 IP 位址進行限定更為靈活: 使用者的 IP 位址發生變更時,您不需要更新此清單。但是,依 IP 位址進行限定更可靠: 如果某個連線用戶端的 DNS 查找失敗,將無法使用主機名稱限制。 

您只能在萬用字元樣式中使用 * 萬用字元表示法,以比對電腦的主機名稱或 IP 位址。例如,若要允許或拒絕特定網域內的所有電腦,請輸入與該網域內所有主機相符的萬用字元樣式,例如 *.sun.com。您可以為存取管理伺服器的超級使用者設定不同的主機名稱和 IP 位址。

對於主機名稱,* 必須替代名稱中的整個部分。亦即,*.sun.com 有效,但 *users.sun.com 無效。* 出現在主機名稱中時,必須是最左側的字元。

例如,*.sun.com 有效,但 users.*.com 無效。對於 IP 位址,* 必須替代位址中的整個位元組。例如 198.95.251.* 有效,但 198.95.251.3* 無效。* 出現在 IP 位址中時,必須是最右側的字元。例如 198.* 有效,但 198.*.251.30 無效。

權限

存取權限可限制對您的網站上檔案和目錄的存取。除了允許或拒絕所有存取權限外,您還可以指定一個允許或拒絕部分存取權限的規則。例如,您可以授予使用者對您擋案的唯讀存取權限,這樣他們可以檢視資訊,但不能變更檔案。 

  • [所有存取權限] 是預設設定,將允許或拒絕所有權限

  • [僅限以下權限] 允許您選取要允許或拒絕的權限組合:

    • 讀取可讓使用者檢視檔案,包括 HTTP 方法 GET、HEAD、POST 和 INDEX

    • 寫入可讓使用者變更或刪除檔案,包括 HTTP 方法 PUT、DELETE、MKDIR、RMDIR 與 MOVE。若要刪除檔案,使用者必須同時具有寫入和刪除權限

    • 執行可讓使用者執行伺服器端應用程式,例如 CGI 程式、Java applet 與代理程式。

      POST 只會對映至執行權限。

    • 刪除可讓還具有寫入權限的使用者刪除檔案或目錄。

    • 清單可讓使用者存取不包含 index.html 檔案之目錄中的檔案清單。

    • 資訊可讓使用者接收有關 URI 的資訊,例如 http_head。

繼續

伺服器將檢查整個存取控制表示式 (ACE) 清單以確定存取權限。例如,第一個 ACE 通常會拒絕所有使用者。如果將第一個 ACE 設定為「繼續」,伺服器將檢查清單中的第二個 ACE,如果它們相符,則會使用下一個 ACE。 

如果未核取「繼續」,則將拒絕所有使用者存取資源。伺服器將繼續檢查清單,直至找到某個不相符的 ACE,或者找到某個相符但未設定為繼續的 ACE。最後一個相符的 ACE 將確定是允許還是拒絕存取。

使用 .htaccess 檔案

伺服器支援 .htaccess 動態配置檔案。您可以透過使用者介面或手動變更配置檔案來啟用 .htaccess 檔案。

您可以將 .htaccess 檔案與伺服器的標準存取控制結合使用。不管 PathCheck 指令的順序如何,標準存取控制始終在任何 .htaccess 存取控制之前套用。當使用者/群組認證為「基本」時,不需要同時使用標準和 .htaccess 存取控制進行使用者認證。您可以透過標準伺服器存取控制使用 SSL 用戶端認證,還需要透過 .htaccess 檔案進行 HTTP「基本」認證。

如果您啟用 .htaccess 檔案,伺服器會在為資源提供服務之前先檢查該 .htaccess 檔案。伺服器會在與資源相同的目錄、該目錄的父系目錄、直至文件根目錄 (包含根目錄) 中尋找 .htaccess 檔案。例如,如果主文件目錄設定為 /sun/server/docs 且用戶端請求 /sun/server/docs/reports/index.html,則伺服器將檢查 /sun/server/docs/reports/.htaccess 和 /sun/server/docs/.htaccess 處的 .htaccess 檔案。

請注意,伺服器的附加文件目錄和 CGI 目錄功能允許管理員定義替代文件根目錄。存在替代文件根會影響 .htaccess 檔案處理。例如,假設某伺服器主文件目錄設定為 /sun/server/docs 且在 /sun/server/docs/cgi-bin/program.cgi 處存在 CGI 程式。如果將 CGI 做為文件類型啟用,則用戶端對 CGI 程式發出請求時,伺服器將計算 /sun/server/docs/.htaccess 和 /sun/server/docs/cgi-bin/.htaccess 的內容。但是,如果您將 CGI 目錄配置在 /sun/server/docs/cgi-bin 處,則伺服器將檢查 /sun/server/docs/cgi-bin/.htaccess 而不是 /sun/server/docs/.htaccess。這是因為將 /sun/server/docs/cgi-bin 指定為 CGI 目錄會將其標記為替代文件根目錄。

防止阻絕服務攻擊

拒絕服務 (DoS) 攻擊是伺服器中某些惡意使用者發動的明確攻擊行為,目的是讓合法使用者無法使用某服務。發動這類攻擊的方式如下:

若請求頻率相當高,Web 伺服器 可監視存取頻繁的 URI 以偵測 DoS 攻擊,進而拒絕請求。

以下章節說明如何在虛擬伺服器層級上防止 DoS 攻擊。

限制對伺服器的請求

現在只要配置請求限制並監視每個虛擬伺服器上的最大連線數,便可以調整伺服器以防止拒絕服務攻擊。配置其中某些值可能會影響伺服器的效能。

若要配置伺服器的請求限制,請按一下 [配置] > [虛擬伺服器] > [伺服器設定] > [請求限制]。配置以下表格中列出的參數。

表 7–4 配置請求限制

參數

說明

請求限制

啟用/停用對此虛擬伺服器的請求限制。依預設,請求限制選項處於停用狀態。 

最大連線

該虛擬伺服器所允許的同步運作之連線的最大數目。 

最大 RPS

允許用戶端每秒送出的請求數上限。 

RPS 計算間隔

計算每秒請求數 (RPS) 平均值的時間間隔。預設值為 30 秒。 

繼續條件

決定遭到阻斷的請求類型要滿足哪些條件,才能再次用於提供服務。 

靜音 — 遭拒絕的請求數必須在之後的間隔時間內減少至零,以便繼續提供服務。

臨界值 — 遭拒絕的請求速率必須降至 RPS 臨界值以下,以便繼續提供服務。

預設值為臨界值。 

錯誤碼

要用於遭到阻斷之請求的 HTTP 狀態代碼。預設代碼為 HTTP 503 — 無法提供服務。 

監視屬性

要監視的選擇性請求屬性。 


備註 –

使用 CLI

若要透過 CLI 來限制對伺服器的請求,請執行以下指令。


wadm> enable-request-limits --user=admin --password-file=admin.pwd 
--host=serverhost --port=8989 --config=config1 --vs=config1_vs_1

請參閱 CLI 參考資料 enable-request-limits(1)。

Procedure限制最大連線數

您可以限制同步運作之連線的最大數目。如果接收到相符的請求,且正在處理的請求數目至少已達到指定數字,則請求將遭到拒絕。請注意,只有那段特定時間內會拒絕請求。一旦同步運作的請求降至此限制以下,則將會處理新的請求。

  1. 按一下 [配置] 標籤。

  2. 從清單中選取配置。

  3. 從 [虛擬伺服器] 標籤下選取虛擬伺服器。

  4. 按一下 [伺服器設定] > [請求限制]。

  5. 輸入 [最多連線] 區段的值。