Iis

如何通過 Powershell 為 IIS APPPOOL* 帳戶添加 ACL 權限?

  • June 4, 2020

我希望能夠為新網站設置 IIS 帳戶以具有修改權限。我有以下腳本:

function Set-ModifyPermission ($directory, $username, $domain = 'IIS APPPOOL') {
   $inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
   $propagation = [system.security.accesscontrol.PropagationFlags]"None"
   $acl = Get-Acl $directory
   $user = New-Object System.Security.Principal.NTAccount($domain, $username )
   $accessrule = New-Object system.security.AccessControl.FileSystemAccessRule($user, "Modify", $inherit, $propagation, "Allow")
   $acl.AddAccessRule($accessrule)
   set-acl -aclobject $acl $directory
}

但是,當我執行它時,我會收到如下錯誤:

Set-Acl : 此工作站與主域之間的信任關係失敗。

我認為這是因為IIS APPPOOL它不是一個真正的域,而是一個假帳戶上的一個奇怪的前綴。是否有正確的方法來引用該帳戶以便我可以完成這項工作?

首先,像這樣使用 Set-Acl,因為目錄路徑是第一個位置參數:

Set-Acl $directory $acl

其次,您應該只使用一個參數創建使用者對象:

$user = New-Object System.Security.Principal.NTAccount("$domain\\$username")

**更新:**似乎它不會接受“IIS APPPOOL\AppPoolName”作為 NTAccount 標識符。現在,有兩種方法可以完成您正在嘗試做的事情:

  1. 使用 AppPoolIdentities SID 創建一個新的 SID 對象並將其轉換為 NTAccount,如下所示:http: //iformattable.blogspot.com/2007/12/convert-sid-to-ntaccount-with.html,您應該能夠像對待任何其他 NTAccount 對像一樣對待它。如果您仍然希望能夠為真實帳戶傳遞域/使用者名,則內置一些簡單的邏輯,如果使用者名是“AweSomeAppPool”並且域為空,則預設為 AppPool SID,僅作為範例。
  2. 使用 PowerShell 呼叫 icacls.exe,並使用它來授予/撤銷您想要的任何權限,如下所示(首先是正常的 icacls 表單命令提示符,然後是 powershell,注意區別):

icacls.exe test.txt /grant "IIS AppPool\DefaultAppPool":(OI)(CI)M

cmd /c icacls test.txt /grant "IIS AppPool\DefaultAppPool:(OI)(CI)M"

如果您選擇第二個選項,請務必先手動測試它們,我自己沒有機會測試這些特定範例,但它應該可以

引用自:https://serverfault.com/questions/303097