如何使用 PowerShell 管理 ACL 权限

  1. PowerShell 中的 NTFS 权限类型
  2. 在 PowerShell 中使用 Get-Acl 命令获取文件和文件夹的 ACL
  3. 在 PowerShell 中使用 Set-Acl 命令设置文件和文件夹的 ACL
  4. 使用 -RemoveAccessRule 参数在 PowerShell 中删除用户权限
  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

使用 -RemoveAccessRule 参数在 PowerShell 中删除用户权限

$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
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
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