如何從 IIS 應用程式存取網路檔案

文章翻譯 文章翻譯
文章編號: 207671 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文提供有關從 Internet Server API (ISAPI) Extension、「動態伺服器網頁」(ASP,Active Server Pages) 或「公用閘道介面」(CGI,Common Gateway Interface) 應用程式,存取 Internet Information Server (IIS) 伺服器以外的電腦上的檔案時,所產生之問題的資訊。本文列出會牽涉到的某些問題,以及一些可能的解決之道。

雖然本文內容主要針對存取網路共用上的檔案,但是相同的概念也可以套用在具名管道連線上。具名管道常用在 SQL Server 連線,以及遠端程序呼叫 (RPC,Remote Procedure Call) 和元件物件模型 (COM,Component Object Model) 通訊上。其中有一點很特別,就是如果您透過 設定使用「Microsoft Windows NT 整合安全」的網路來連接 SQL Server,會因為本文中說明的問題而無法連接。RPC 和 COM 也會使用其他擁有類似網路驗證配置的通訊機制。因此,本文中的概念也適用於 IIS 應用程式可能會使用的各種網路通訊機制,涵蓋範圍廣泛。


驗證與模擬類型

當 IIS 服務 HTTP 要求時,IIS 會執行模擬以便適當限制處理要求時的資源存取。模擬的安全性內容,會根據要求所執行的驗證種類而有所不同。IIS 4.0 可以使用五種不同的驗證類型,分別是:
摺疊此表格展開此表格
驗證類型模擬類型
匿名存取 (不需驗證)
自動密碼同步為啟用狀態 (ON,預設值)
網路
匿名存取 (不需驗證)
自動密碼同步為停用狀態 (OFF)
IIS 純文字
基本驗證IIS 純文字
NT 挑戰/回應驗證網路
用戶端 SSL 憑證對應互動式

權杖類型

是否允許存取網路資源,是根據處理要求時使用的模擬權杖種類而定。
  • 網路權杖並「不允許」存取網路資源。(當使用者透過網路進行驗證時,習慣上伺服器會建立這種權杖,因此其名稱為網路權杖。允許伺服器將網路權杖當做網路用戶端並存取另一個伺服器的過程,稱為「委派」,是一個可能的安全性漏洞。)
  • 當驗證電腦上的本機使用者時,習慣上會使用互動式權杖。互動式權杖允許透過網路存取資源。
  • 批次權杖是設計來提供批次工作執行的安全性內容。批次權杖可以存取網路。
IIS 的概念為 [純文字] 登入。[純文字] 登入之所以會有這樣的名稱,是因為 IIS 可以存取純文字的使用者名稱與密碼。您可以藉由設定 Metabase 中的 [LogonMethod] 屬性,控制 [純文字] 登入是否要建立網路權杖、互動式權杖或批次權杖。根據預設值,[純文字] 登入接收互動式權杖並且可以存取網路資源。您可以在伺服器、站台、虛擬目錄、目錄或檔案層級設定 [LogonMethod]

匿名存取會模擬提出要求之設定為匿名使用者的帳戶。根據預設值,IIS 有一個稱為 IUSR_<machinename> 的匿名使用者帳戶,可以在處理未經驗證的要求時當做模擬。根據預設值,IIS 4.0 有一個稱為「啟用自動密碼同步」的可供設定的功能,會使用安全性子授權來建立權杖。使用這種方式建立的權杖為網路權杖,「沒有」網路上其他電腦的存取權。如果您停用 [自動密碼同步],IIS 會使用與稍早提及之 [純文字] 登入相同的方式來建立權杖。只有與 IIS 位於相同電腦上的帳戶才能使用 [自動密碼同步]。因此,如果您將匿名帳戶變更為網域帳戶,便無法使用 [自動密碼同步],而且會收到 [純文字] 登入。有一個例外的情形,會發生在您在「主要網域控制站」上安裝 IIS 時。在這種情況中,網域帳戶是位於本機電腦上。您可以在伺服器、站台、虛擬目錄、目錄或檔案層級設定匿名帳戶和 [自動密碼同步] 選項。

如果要存取網路上的資源,首先必須要有正確的權杖類型。您也必須模擬能夠透過網路存取資源的帳戶。根據預設值,IIS 針對匿名要求所建立的 IUSR_<machinename> 帳戶只存在於本機電腦。即使您停用 [自動密碼同步] 以便能取得互動式權杖來存取網路資源,IUSR_<machinename> 帳戶通常仍舊無法存取大部分的網路資源,因為其他電腦無法辨識此帳戶。如果想要使用匿名要求存取網路資源,您必須使用在網路網域中所有電腦都能辨識的帳戶來取代預設帳戶。如果您在「網域控制站」上安裝 IIS,IUSR_<machinename> 帳戶就會是網域帳戶,網路上的其他電腦不需執行其他的動作即可辨識該帳戶。


避免問題的方法

下列是當您從 IIS 應用程式存取網路資源時,避免發生問題的方法:
  • 將檔案保留在本機電腦。
  • 某些網路通訊方式不需要安全性檢查。使用 Windows 通訊端即是一例。
  • 您可以根據下列方式設定虛擬目錄,以直接存取電腦的網路資源:
    「另一台電腦上的共用位置」。
    對共用網路資源電腦的所有存取,都是在 [連線身份] 對話方塊指定的人員環境中執行。不論虛擬目錄設定何種驗證方式,都會採用這種方式。藉由使用此選項,存取 IIS 電腦的瀏覽器即可以使用網路共用上所有的檔案。
  • 不搭配 [自動密碼同步] 使用基本驗證或匿名驗證。

    根據預設值,Internet Information Server 執行的基本驗證模擬,提供能夠存取網路資源的權杖 (不像「Windows NT 挑戰/回應驗證」,提供無法存取網路資源的權杖)。針對匿名驗證,權杖只能在停用 [自動密碼同步] 的情況下存取網路資源。根據預設值,當首次安裝 Internet Information Server 時會啟用 [自動密碼同步]。在這種預設設定中,匿名使用者權杖無法存取網路資源。 如需有關 IIS [自動密碼同步] 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    190005 A Site Set Up for Anonymous Access Prompts Users for Password
    259353 Must Enter Password Manually After You Set Password Synchronization
  • [將匿名帳戶設定為網域帳戶]。

    這個選項會允許匿名要求透過網路存取資源。如果要避免讓所有匿名要求都能存取網路,您必須在虛擬目錄中僅針對有特殊存取需求的匿名帳戶建立網域帳戶。
  • 在共用網路資源的電腦上,使用相同的使用者名稱與密碼設定匿名帳戶,然後停用 [自動密碼同步]。

    如果要執行這項操作,您必須確定密碼完全吻合。當基於某些原因無法使用先前提及的 [將匿名帳戶設定為網域帳戶] 選項時,才能夠使用本方法。
  • 當使用網路權杖處理要求時,NullSessionShares 和 NullSessionPipes 可以用來允許存取特定網路共用或具名管道。

    如果您有網路權杖並嘗試建立網路資源連線,作業系統會嘗試建立未經驗證的連線 (稱為「NULL 工作階段」)。本登錄設定必須在共用網路資源的電腦 (而非 IIS 電腦) 上執行。如果您嘗試使用非網路的權杖存取 NullSessionShare 或 NullSessionPipe,通常會使用 Microsoft Windows 驗證,而資源的存取權則是根據被模擬使用者的帳戶使用者權限決定。
  • 您可以執行專屬的模擬,以建立擁有網路存取的執行緒權杖。

    LogonUserImpersonateLoggedOnUser 函式可以用來模擬不同的帳戶。要使用這個方法時,您需要程式碼中可以使用另一個帳戶的「純文字」使用者名稱和密碼。LogonUser 也需要呼叫 LogonUser 的帳戶在「使用者管理員」中擁有「作為作業系統的一部份」權限。根據預設值,當 IIS 處理 HTTP 要求時模擬的大部份使用者都沒有此使用者權限。然而,「同處理序應用程式」可以使用好幾種方法將目前的安全性內容變更為 LocalSystem 帳戶,而這個帳戶擁有「作為作業系統的一部份」系統管理認證。針對執行同處理序的 ISAPI DLL,將 IIS 建立的安全性內容變更為 LocalSystem 帳戶最好的方法,是呼叫 RevertToSelf 函式。如果您是以「跨處理序」執行 IIS 應用程式,根據預設值本機制無法正常運作,因為此程序是在 IWAM_<machinename> 帳戶而非「本機系統帳戶」中執行。根據預設值,IWAM_<machinename> 並「沒有」「做為作業系統的一部分」系統管理認證。
  • 將由 ASP 頁面呼叫的元件新增至 Microsoft Transaction Server (MTS) Server 套件或 COM+ Server 應用程式中,然後指定特定使用者做為套件的身份識別。

    注意 該元件是在 IIS 之外的不同 .exe 檔案中執行。
  • 使用基本/純文字驗證時,我們建議您使用 SSL 來加密資料,因為要從網路追蹤取得認證是極為容易的事情。 如需有關如何安裝 SSL 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    228991 How to Create and Install an SSL Certificate in Internet Information Server 4.0
注意 在停用密碼同步並且使用基本驗證 ([純文字] 登入) 來驗證要求的案例中,別忘了您可以將 LogonMethod Metabase 屬性設定為 2 (表示使用網路登入來建立模擬權杖),預防匿名存取網路的要求。使用此設定時,要求能避免網路權杖限制的唯一方法即為連接至 NullSessionShares 或 NullSessionPipes。

不要使用對應至網路共用的磁碟機代號。不僅是因為只能選取 26 個磁碟機代號,而且如果您嘗試使用對應至不同安全性內容的磁碟機代號,可能會發生問題。請改為永遠使用「通用命名慣例」(UNC,Universal Naming Convention) 名稱存取資源。其格式看起來必須類似以下範例:
\\MyServer\filesharename\directoryname\filename
如需有關使用 UNC 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
280383 IIS Security Recommendations When You Use a UNC Share and Username and Password Credentials
本文中的資訊僅與 Internet Information Server 4.0 有關。在 Windows 2000 隨附的 Internet Information Server 5.0 中,新的驗證類型和能力有大幅變更。雖然本文中大部份的概念仍適用於 IIS 5.0,但文中使用某些驗證配置所產生的模擬權杖種類詳細資訊,僅適用於 IIS 4.0。

319067 HOW TO: Run Applications Not in the Context of the System Account in IIS
如果無法判斷 IIS 伺服器處理要求時產生的登入種類,您可以開啟 [登入] 和 [登出] 的稽核。請遵循下列步驟:
  1. 依序按一下 [開始][設定][控制台][系統管理工具],然後按 [本機安全性原則]
  2. 開啟 [本機安全性原則] 後,接著按一下左方樹狀檢視窗格中的 [安全設定],再按 [本機原則],然後按 [稽核原則]
  3. 按兩下 [稽核登入事件] 然後按 [成功和失敗]。「事件日誌」項目會新增到安全性記錄檔中。您可以藉由檢視 [登入類型] 中的事件詳細資訊來判斷登入種類:
2=互動式
3=網路
4=批次
5=服務

?考

如需有關網路安全性的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
124184 Service Running as System Account Fails Accessing Network
180362 INFO: Services and Redirected Drives
158229 INFO: Security Ramifications for IIS Applications
319067 HOW TO: Run Applications Not in the Context of the System Account in IIS
280383 IIS Security Recommendations When You Use a UNC Share and Username and Password Credentials
如需有關 IIS [自動密碼同步] 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
190005 A Site Set Up for Anonymous Access Prompts Users for Password
259353 Must Enter Password Manually After You Set Password Synchronization

屬性

文章編號: 207671 - 上次校閱: 2006年1月20日 - 版次: 5.0
這篇文章中的資訊適用於:
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Server Application Programming Interface 4.0
  • Microsoft Internet Information Services 5.0
關鍵字:?
kbhowtomaster kbhttp KB207671
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com