您可以透過數種安全性服務與機制 (包括認證、授權和存取控制) 保護 Web 伺服器中的資源。本章說明一些用於控制存取 Sun Java System Web Server 7.0 的支援機制。
認證是確認識別的程序。授權表示將存取受限資源的權限授予某個身份識別,並由存取控制機制強制執行這些限制。可透過多種安全性模型 (Web 應用程式安全性、htaccess、認證範圍等) 和服務來強制執行認證與授權。
哪些使用者可以存取 Administration Server
這些使用者可以存取哪些應用程式
哪些使用者可以存取您網站上的檔案或目錄
您可以控制對整個伺服器、部分伺服器或您網站上的檔案或目錄的存取。您可以建立稱為存取控制項目 (ACE) 的規則階層來允許或拒絕存取。您建立的 ACE 集合稱為存取控制清單 (ACL)。
依預設,伺服器具有一個包含多個 ACL 的 ACL 檔案。確定用於內送請求的虛擬伺服器後,Sun Java System Web Server 將檢查是否為該虛擬伺服器配置了任何 ACL。如果找到適用於目前請求的 ACL,伺服器將評估其 ACE 以確定是否應該允許或拒絕存取。
允許或拒絕存取基於以下事項:
當伺服器收到某個頁面的請求時,伺服器將使用 ACL 檔案中的規則來確定是否允許存取。這些規則可以參照傳送請求的電腦之主機名稱或 IP 位址。還可以參照儲存在 LDAP 目錄中的使用者和群組。
如果有一個以上符合的 ACL,伺服器將使用最後一個相符的 ACL 敘述。由於 uri ACL 是最後一個符合的敘述,因此會略過預設 ACL。
上圖描述存取控制在 Web Server 7.0 中的運作方式。使用者代理程式 (用戶端) 會存取 Web Server。 Web Server 執行 obj.conf 檔案中的 PathCheck 指令。Web 伺服器會將 HTTP 401 (未經授權) 傳回至用戶端。用戶端將提示使用者進行認證。如果用戶端為瀏覽器,則將會顯示一個登入對話方塊。使用者輸入登入資訊。Web Server 執行內部 check-acl 功能。Web Server 驗證使用者憑證並處理請求。
您可以僅允許特定的使用者或群組存取您的 Web 伺服器。使用者/群組存取控制需要使用者輸入使用者名稱和密碼,然後才能存取伺服器。伺服器會將用戶端憑證中的資訊與目錄伺服器項目進行比較。
Administration Server 僅使用基本認證。如果您希望需要在 Administration Server 上進行用戶端認證,必須手動編輯 ACL 檔案,將方法變更為 SSL。
Web Server 藉由讀取使用者/群組資料庫中的項目,執行使用者/群組認證。目錄服務用於執行存取控制的資訊可以從以下任何一種來源獲得:
內部平面檔案類型資料庫
外部 LDAP 資料庫
當伺服器使用基於 LDAP 的外部目錄服務時,它支援對伺服器實例使用以下類型的使用者/群組認證方法:
預設值
Basic (基本)
SSL
摘要
Other (其他)
當伺服器使用基於檔案的內部目錄服務時,它支援的可對伺服器實例使用的使用者/群組認證方法有:
預設值
Basic (基本)
摘要
使用者/群組認證要求使用者先進行認證,然後才能存取伺服器或網站上的檔案和目錄。認證之後,使用者以用戶端憑證輸入使用者名稱及密碼,來驗證他們的身份。 僅在 SSL 通訊時需要用戶端憑證。
預設認證是首選方法。預設設定使用 server.xml 檔案中的預設方法,如果 server.xml 中不存在設定,將使用「基本」方法。如果核取 [預設],ACL 規則便不會在 ACL 檔案中指定方法。如果選擇 [預設],則編輯 obj.conf 檔案中的一行即可輕鬆變更所有 ACL 的方法。
基本認證要求使用者輸入使用者名稱和密碼,才能存取 Web 伺服器或網站。此為預設設定。您必須在 LDAP 資料庫 (例如 Sun Java System Directory Server) 或檔案中建立並儲存使用者與群組清單。您使用的目錄伺服器不能與您的 Web 伺服器安裝在相同的伺服器根目錄下;您也可以使用安裝在遠端機器上的目錄伺服器。
當使用者嘗試在 Administration Server 或網站上存取需要使用者/群組認證的資源時,Web 瀏覽器將顯示對話方塊,要求該使用者輸入使用者名稱和密碼。伺服器將收到加密或未加密的資訊,這取決於是否為您的伺服器開啟了加密。
使用不具有 SSL 加密的基本認證,以未加密文字的方式在網路上傳送使用者名稱和密碼。網路封包可能會被截取,並且使用者名稱和密碼可能會被盜用。基本認證結合 SSL 加密、主機 IP 認證或兩者時最有效。使用「摘要認證」可以避免此問題。
伺服器可以使用安全憑證,以下列兩種方式來確認使用者的身份:
使用用戶端憑證中的資訊做為身份的證明
驗證 LDAP 目錄 (附加) 中發佈的用戶端憑證
當您設定讓伺服器使用憑證資訊對用戶端進行認證時,伺服器將:
首先檢查憑證是否來自可信任的 CA。如果不是,認證將失敗,異動也將結束。
如果憑證正確對映,請檢查為該使用者指定的 ACL 規則。即使憑證對映,ACL 規則也可拒絕該使用者的存取。
要求以用戶端認證機制控制用戶端存取特定資源,與要求所有伺服器連線皆需進行用戶端認證是不同的。如果您將伺服器設定為需要對所有連線進行用戶端認證,則用戶端只需提供一份由可信任的 CA 核發的有效憑證即可。如果您將伺服器的存取控制設定為使用 SSL 方法來認證使用者與群組,則用戶端將需要:
提供由可信任的 CA 核發的有效憑證
該憑證必須對映到 LDAP 中的有效使用者
存取控制清單必須正確評估
當您需要以用戶端認證進行存取控制時,便需要為您的 Web 伺服器啟用 SSL 加密。
為了成功存取 SSL 認證資源,用戶端憑證必須來自 Web 伺服器信任的 CA。如果 Web 伺服器的 certmap.conf 檔案配置為將瀏覽器中的用戶端憑證與目錄伺服器中的用戶端憑證進行比較,則需要在該目錄伺服器中發佈用戶端憑證。不過,certmap.conf 檔案也可以配置為僅將憑證中已選取的資訊與目錄伺服器項目進行比較。例如,您可以將 certmap.conf 檔案配置為僅將瀏覽器憑證中的使用者 ID 和電子郵件位址與目錄伺服器項目進行比較。
由於檢查憑證時對照的是 LDAP 目錄,因此僅 SSL 認證方法需要對 certmap.conf 檔案進行修改。要求所有對伺服器的連線進行用戶端認證則不需要如此。如果您選擇使用用戶端憑證,則應該增加 magnus.conf 中 AcceptTimeout 指令的值。
可以將伺服器配置為使用基於 LDAP 或基於檔案的目錄服務執行摘要認證。
摘要認證允許使用者根據使用者名稱和密碼進行認證,而無須傳送明文格式的使用者名稱和密碼。瀏覽器使用使用者的密碼和 Web Server 提供的某些資訊,利用 MD5 演算法來建立摘要值。
當伺服器使用基於 LDAP 的目錄服務執行摘要認證時,也將使用摘要認證外掛程式在伺服器端計算該摘要值,並與用戶端提供的摘要值比較。如果摘要值相符,則使用者將通過認證。為了使此機制得以運作,您的目錄伺服器需要存取明文格式的使用者密碼。Sun Java System Directory Server 具有一個可逆的密碼外掛程式,它使用對稱的加密演算法以加密形式儲存資料,這些資料可在稍後被解密成原來的形式。只有 Directory Server 保留了資料的金鑰。
對於基於 LDAP 的摘要認證,您需要啟用伺服器中包含的可逆密碼外掛程式及 digestauth 專用外掛程式。若要配置 Web 伺服器以處理摘要認證,請設定 dbswitch.conf 中資料庫定義的 digestauth 特性。
如果未指定 ACL 方法,則需要認證時,伺服器將使用摘要認證或基本認證;不需要認證時,伺服器將使用基本認證。此為首選方法。
表 7–1 摘要認證的不同情況
ACL 方法 |
認證資料庫支援摘要認證 |
認證資料庫不支援摘要認證 |
---|---|---|
「預設」 未指定 |
摘要和基本 |
基本 |
「基本」 |
基本 |
基本 |
「摘要」 |
摘要 |
錯誤 |
當處理具有 method = digest 的 ACL 時,伺服器嘗試透過下列方式進行驗證:
檢查 Authorization 請求標頭。如果沒有找到該標頭,將會產生帶有摘要詰問的 401 回應,且程序也隨之停止。
檢查授權類型。如果認證類型為摘要,伺服器將:
檢查 nonce。如果不是由此伺服器產生的有效的新 nonce,將會產生 401 回應,且程序會隨之停止。 如果已過期,則會產生 401 回應 (其中 stale=true),且程序會隨之停止。
您可以變更位於 server_root /https-server_name/config/ 的 magnus.conf 檔案中 DigestStaleTimeout 參數的值,來配置 nonce 的有效時間。若要設定該值,請將以下行增加至 magnus.conf:
其中 seconds 表示 nonce 保持最新的秒數。指定的秒數過後,nonce 將過期並需要使用者進行新的認證。
檢查範圍。如果不符合,將產生 401 回應,且程序會隨之停止。
如果認證目錄是基於 LDAP 的,請檢查 LDAP 目錄中是否存在使用者;如果認證目錄是基於檔案的,請檢查檔案資料庫中是否存在使用者。 如果沒有找到使用者,將產生 401 回應,且程序會隨之停止。
從目錄伺服器或檔案資料庫取得請求/摘要值,並檢查是否符合用戶端的請求/摘要。 如果不符合,將產生 401 回應,且程序會隨之停止。
建構 Authorization-Info 標頭並將其插入伺服器標頭中。
您可以限制對 Administration Server 或您網站上的檔案和目錄的存取,方法為讓僅使用特定電腦的用戶端能夠存取它們。可以指定要允許或拒絕存取的電腦之主機名稱或 IP 位址。您可以使用萬用字元式樣指定多台電腦或整個網路。"使用主機 IP 認證存取檔案或目錄對使用者而言極為便利。" 使用者無須輸入使用者名稱或密碼,可立即存取檔案和目錄。
因為不止一人可以使用特定的電腦,所以主機 IP 認證結合使用者/群組認證時,會更有效。如果同時使用這兩種認證方法,則存取時將需要輸入使用者名稱和密碼。
主機 IP 認證並不需要在您的伺服器上配置 DNS。如果您選擇使用主機 IP 認證,則網路中必須有 DNS 處於執行中狀態,且您的伺服器必須配置為可使用該 DNS。您可以透過 Server Manager [效能調校] 頁面中的 [喜好設定] 標籤,在您的伺服器上啟用 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 使用者快取中的使用者和群組認證結果。您可以使用 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」。
若要透過 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)。
您可設定的有效特性為:
enabled—指出伺服器是否快取檔案內容和中介資訊。預設值為 true。
max-age—快取檔案內容和中介資訊的最長時間 (以秒為單位)。值的範圍是從 0.001 到 3600。
max-groups-per-user —對於每個使用者而言,伺服器將快取其成員關係資訊的最大群組數。值的範圍是從 1 到 1024。
max-age—快取認證資訊的最長時間 (以秒為單位)。值的範圍是從 0.001 到 3600。
伺服器使用儲存在本機上的存取控制清單 (ACL) 來支援認證與授權,這些清單說明使用者對資源具有哪些存取權限。例如,ACL 中的某項目可授予名為 John 的使用者對特定資料夾 misc 的讀取權限。
本節說明了限制存取您網站上檔案或目錄的程序。您可以為所有伺服器設定全域存取控制規則,也可以為特定的伺服器進行個別設定。例如人力資源部門可以建立 ACL,允許所有經過認證的使用者檢視其自己的薪資資料,但是僅允許負責薪資的人力資源人員更新資料。
伺服器支援的核心 ACL 是三種類型的認證:基本認證、SSL 認證以及摘要認證。
若要編輯存取控制設定,請執行以下作業:
按一下 [配置] 標籤,然後選取配置。
按一下 [安全性] 子標籤 > [存取控制] 子標籤。
按一下 [增加 ACL] 按鈕 增加新的 ACL,或按一下現有 ACL 來編輯設定。
以下小節說明將新的 ACL 增加至配置的程序。
按一下 [配置] 標籤,然後選取配置。
按一下 [存取控制] 子標籤 > [存取控制清單] 子標籤。
[新增] 按鈕,增加新的 ACL。
配置以下參數:
表 7–2 ACL 參數
使用 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 參數:
表 7–3 ACE 參數
伺服器支援 .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 資源。
如果請求頻率相當高,則 Sun Java System Web Server 可監視存取頻繁的 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)。
您可以限制同步運作之連線的最大數目。如果接收到相符的請求,且正在處理的請求數目至少已達到指定數字,則請求將遭到拒絕。請注意,只有那段特定時間內會拒絕請求。一旦同步運作的請求降至此限制以下,則將會處理新的請求。