使用 PowerShell 管理 ACL 权限
Marion Paul Kenneth Mendoza
2023年1月30日
- PowerShell 中的 NTFS 权限类型
-
在 PowerShell 中使用
Get-Acl
命令获取文件夹和文件的 ACL -
在 PowerShell 中使用
Set-Acl
命令为文件和文件夹设置 ACL -
在 PowerShell 中使用
-RemoveAccessRule
参数删除用户权限 - 在 PowerShell 中禁用或启用权限继承
-
在 PowerShell 中使用
SetOwner
方法更改文件和文件夹的所有权
系统管理员通过在 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn