使用 PowerShell 管理 ACL 許可權

Marion Paul Kenneth Mendoza 2023年1月30日 2022年5月16日
  1. PowerShell 中的 NTFS 許可權型別
  2. 在 PowerShell 中使用 Get-Acl 命令獲取資料夾和檔案的 ACL
  3. 在 PowerShell 中使用 Set-Acl 命令為檔案和資料夾設定 ACL
  4. 在 PowerShell 中使用 -RemoveAccessRule 引數刪除使用者許可權
  5. 在 PowerShell 中禁用或啟用許可權繼承
  6. 在 PowerShell 中使用 SetOwner 方法更改檔案和資料夾的所有權
使用 PowerShell 管理 ACL 許可權

系統管理員通過在 NTFS 檔案伺服器上新增訪問控制條目 ACEs 來配置 NTFS 訪問控制列表 ACLs 以實現最小許可權模型​​。

本文將學習不同的許可權型別以及如何使用 PowerShell 查詢、修改和刪除檔案和資料夾的 ACL。

PowerShell 中的 NTFS 許可權型別

有高階和基本 NTFS 許可權。例如,你可以將每個許可權設定為拒絕允許

  • 完全控制:擁有此許可權的使用者可以修改、新增、移動和刪除檔案和目錄,以及它們的相關屬性。此外,擁有此許可權的使用者可以更改所有子目錄和檔案的許可權設定。
  • 修改:具有此許可權的使用者可以檢視和修改檔案和檔案屬性,包括向目錄新增和刪除檔案或向檔案新增和刪除檔案屬性。
  • 讀取和執行:擁有此許可權的使用者可以執行可執行檔案,包括指令碼。
  • 讀取:使用者可以使用此許可權檢視檔案、檔案屬性和目錄。
  • :具有此許可權的使用者可以寫入檔案並將檔案新增到目錄。

以下是高階許可權列表:

  • 遍歷資料夾執行檔案:具有此高階許可權的使用者可以瀏覽資料夾以訪問其他資料夾或檔案,即使他們沒有這些檔案或資料夾的許可權。擁有此高階許可權的使用者也可以執行可執行檔案。當使用者或組在組策略管理單元中沒有繞過遍歷檢查許可權時,遍歷資料夾許可權將生效。
  • 列出資料夾讀取資料:具有此高階許可權的使用者可以檢視資料夾內的檔案和子資料夾列表以及檔案的內容。
  • 讀取屬性:具有此高階許可權的使用者可以檢視資料夾或檔案的屬性,例如它是隱藏的還是隻讀的。
  • 寫入屬性:具有此高階許可權的使用者可以更改檔案或資料夾的屬性。
  • 讀取擴充套件屬性:具有此高階許可權的使用者可以檢視資料夾或檔案的擴充套件屬性,例如許可權以及建立和修改時間。
  • 寫入擴充套件屬性:具有此高階許可權的使用者可以更改資料夾或檔案的擴充套件屬性。
  • 建立檔案寫入資料建立檔案許可權將允許使用者在具有此高階許可權的資料夾中建立檔案。此許可權僅適用於資料夾。寫入資料許可權將使具有此高階許可權的使用者能夠更改檔案並覆蓋現有內容。此許可權僅適用於檔案。
  • 建立資料夾附加資料建立資料夾許可權允許使用者在具有此高階許可權的資料夾中建立資料夾。此許可權僅適用於資料夾。附加資料許可權將使具有此高階許可權的使用者能夠更改檔案末尾,但他們不能更改、覆蓋或刪除現有資料。此許可權僅適用於檔案。
  • 刪除:具有此高階許可權的使用者可以刪除資料夾或檔案。如果使用者沒有資料夾或檔案的刪除許可權,如果他們對父資料夾擁有刪除子資料夾和檔案許可權,他們仍然可以刪除物件。
  • 讀取許可權:具有此高階許可權的使用者可以讀取資料夾或檔案的許可權,例如完全控制讀取寫入
  • 更改許可權:具有此高階許可權的使用者可以更改檔案或資料夾的許可權。
  • 取得所有權:擁有此高階許可權的使用者可以取得檔案或資料夾的所有權。無論保護檔案或資料夾的任何現有許可權如何,檔案或資料夾所有者始終可以更改其許可權。
  • 同步:具有此高階許可權的使用者可以使用物件進行同步。此許可權將使執行緒能夠等待,直到物件處於訊號狀態。ACL 編輯器中不提供此許可權。

我們可以通過執行下面的 PowerShell 指令碼找到有關這些使用者許可權的所有資訊:

[System.Enum]::GetNames([System.Security.AccessControl.FileSystemRights])

NTFS 許可權可以是顯式的或繼承的。顯式許可權是單獨配置的,而繼承的許可權是從父資料夾繼承的。

許可權的層次結構如下:

  • 明確拒絕
  • 明確允許
  • 繼承拒絕
  • 繼承允許

在 PowerShell 中使用 Get-Acl 命令獲取資料夾和檔案的 ACL

第一個用於管理檔案和資料夾許可權的 PowerShell 命令是 Get-Acl;它列出了所有物件許可權。

Get-Acl \\fs1\shared\hr | fl

使用者必須同時擁有目標資料夾和原始檔夾才能複製許可權。

Get-Acl \\fs1\shared\hr | Set-Acl \\fs1\shared\hr

在 PowerShell 中使用 Set-Acl 命令為檔案和資料夾設定 ACL

PowerShell Set-Acl 命令用於更改指定專案的安全描述符,例如檔案、資料夾或登錄檔項;換句話說,它用於修改檔案或資料夾的許可權。

$acl = Get-Acl \\fs1\shared\hr

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\User01","FullControl","Allow")

$acl.SetAccessRule($AccessRule)

$acl | Set-Acl \\fs1\shared\hr

在 PowerShell 中使用 -RemoveAccessRule 引數刪除使用者許可權

$acl = Get-Acl \\fs1\shared\hr

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISE\User01","FullControl","Allow")

$acl.RemoveAccessRule($AccessRule)

$acl | Set-Acl \\fs1\shared\hr

在 PowerShell 中禁用或啟用許可權繼承

要管理繼承,我們可以使用 SetAccessRuleProtection 方法。該方法有兩個引數:

  • 第一個引數負責阻止從父資料夾繼承。它返回布林狀態:$true$false
  • 第二個引數用於刪除或保留當前繼承的許可權。它還返回布林狀態:$true$false
$acl = Get-Acl \\fs1\shared\hr

$acl.SetAccessRuleProtection($true,$false)

$acl | Set-Acl \\fs1\shared\hr

讓我們恢復此更改並再次為資料夾啟用繼承:

$acl = Get-Acl \\fs1\shared\hr

$acl.SetAccessRuleProtection($false,$true)

$acl | Set-Acl \\fs1\shared\hr

在 PowerShell 中使用 SetOwner 方法更改檔案和資料夾的所有權

如果我們想為資料夾設定所有者,你需要執行 SetOwner 方法。

$acl = Get-Acl \\fs1\shared\hr

$object = New-Object System.Security.Principal.Ntaccount("ENTERPRISE\User01")

$acl.SetOwner($object)

$acl | Set-Acl \\fs1\shared\hr
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn