2011年7月24日 星期日

有關IIS7.5 Application Pool Identity的設定

今天有同事在把ASP.NET應用程式從Windows 2003 Server移機到Windows Server 2008 R2,發現原來的檔案上傳功能都不能用了,從錯誤訊息看起來是權限問題,心裏大概有個底了,應該是IIS的Worker Process的帳號沒有存取該資料夾的權限,所以看了一下他們IIS的應用程式集區的設定,果然沒錯,用到了IIS7.5的AppliationPoolIdentity的帳號,大家應該都對IIS6時代的Network Service帳號不陌生,不過到了IIS7.5預設Worker Process的執行身份改為ApplicationPoolIdentity這個帳號,所以我們的ASP.NET應用程式如果有需要去存取後端資源時,就必須針對ApplicationPoolIdentity這個帳號去設定.
在Windows 2008 SP2之後及Windows 7的IIS 7.5中,當我們去執行預設的Web站台的首頁時,打開工作管理員,可以看到IIS的Worker Process(w3wp.exe)的執行身份,變成了DefaultAppPool這個帳號,如下圖:
image
打開IIS管理員,右鍵點選Default Web Site->管理網站->進階設定,可以看到我們要瀏灠的網站應用程式集區是DefaultAppPool,如下圖:
image
然後再展開應用程式集區,從這裏我們可以看到每一個應用程式集區的識別(Identity),如下圖:
image
到這裡我們可以了解,我們的Default Web Site是跑在DefaultAppPool這個應用程式集區之中,而DefaultAppPool這個集區的識別則是用了ApplicationPoolIdentity這個帳號,我們可以在DefaultAppPool應用程式集上按右鍵->進階設定,找到識別這個屬性,點選...後,可以讓我們去設定這個集區的執行身份,如果你不想用ApplicationPoolIdentity這個識別的話,在這裏也可以改回用NetworkService,這樣就跟IIS6一樣了,如下圖所示:
image
那為何IIS7.5要用ApplicationPoolIdentity來取代原來的NetworkService做為應用程式集區的執行身份呢?那是因為Windows很多服務也會用NetworkService這個帳號做為執行識別,如果我們因為這個應用程式集區需要去取存某個後端資源,比如採用Windows驗證的SQL Server,就把NetworkService加進了SQL 的Login Account中,那不就代表其他也用NetworkService的Windows服務也能進到我們的SQL Server?所以,為了讓系統更安全及兼顧設定上的方便性,Windows就新增了一個ApplicationPoolIdentity的識別專門用來作為IIS應用程式集區執行身份,需注意的是,即使我們為每個集區都設定ApplicationPoolIdentity作為識別,但Windows的IIS管理服務會為不同集區的建立不同的虛擬帳號(Virtual Account)來跟它對應,Virtual Account是Windows 2008 R2及Windows 7新增的一個專門用來做為服務識別的新帳號,詳細說明可以參考http://technet.microsoft.com/en-us/library/dd548356(WS.10).aspx.
回到一開始的問題,當採用ApplicationPoolIdentity的應用程式集區如果要存取後端資源,該如何去設定它的權限好讓我們的ASP.NET應用程式可以上傳檔案到某特定的資料夾呢?步驟如下:
1.開啟檔案總管,右鍵點選我們要設定權限的資料夾->內容,切換至安全性頁籤
2.按編輯,權限設定視窗出現後,接著按新增,在輸入物件名稱的文字方塊中,輸入IIS AppPool\DefaultAppPool,請注意DefaultAppPool是你要設定的應用程式集區的名稱,輸入完後按檢查名稱,出現底線後再按確定,然後你就可以去設定修改或刪除等權限了.
image

2 則留言:

  1. 最近剛入門有些設定根本搞不太懂 😅
    謝謝大大的分享 😁

    回覆刪除
  2. 大大您好
    能否請問一下也是關於這類型的問題
    因為廠商協助撰寫了一個程式
    安裝於Windows Server 2016內
    而欲擷取資料的主機為Win10主機
    最近遇到的問題為
    執行階段發生錯誤:拒絕存取路徑 '\\192.168.7.115\dt\Q\1'
    不知是何處需要進行相關設定
    才能夠順利截取相關資料
    謝謝

    回覆刪除