当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

作者:精品下载站 日期:2024-12-14 05:58:26 浏览:15 分类:玩电脑

如何使用 PowerShell 脚本管理文件系统 ACL


许多拥有 Microsoft Windows 环境的组织都依赖 NTFS 作为其包含敏感数据的存储设备的主文件系统。这是用户处理文件的最简单方法。为了实施最低权限模型(这是系统安全的最佳实践),IT 安全专家和系统管理员通过在 NTFS 文件服务器上添加访问控制条目 (ACE) 来配置 NTFS 访问控制列表 (ACL)。

NTFS 权限文件和文件夹类型

NTFS 权限有基本权限和高级权限。您可以将每个权限设置为“允许”或“拒绝”。以下是基本权限

  • 完全控制:用户可以修改、添加、移动和删除文件和目录及其关联属性。此外,用户可以更改所有文件和子目录的权限设置。
  • 修改:用户可以查看和修改文件和文件属性,包括删除和添加文件到目录或文件属性。
  • 读取和执行:用户可以运行可执行文件,包括脚本
  • 读取:用户可以查看文件、文件属性和目录。
  • 写入:用户可以写入文件并将文件添加到目录。

以下是高级权限列表:

  • 遍历文件夹/执行文件:用户可以浏览文件夹以访问其他文件或文件夹,即使他们没有这些文件或文件夹的权限。用户还可以运行可执行文件。仅当组或用户在组策略管理单元中没有“绕过遍历检查”权限时,遍历文件夹权限才会生效。
  • 列出文件夹/读取数据:用户可以查看文件夹内的文件和子文件夹列表以及文件内容。
  • 读取属性:用户可以查看文件或文件夹的属性,例如是否只读或隐藏。
  • 写入属性:用户可以更改文件或文件夹的属性。
  • 读取扩展属性:用户可以查看文件或文件夹的扩展属性,例如权限以及创建和修改时间。
  • 写入扩展属性:用户可以更改文件或文件夹的扩展属性。
  • 创建文件/写入数据:“创建文件”权限允许用户在文件夹中创建文件。 (此权限仅适用于文件夹。)“写入数据”权限允许用户更改文件并覆盖现有内容。 (此权限仅适用于文件。)
  • 创建文件夹/附加数据:“创建文件夹”权限允许用户在文件夹内创建文件夹。 (此权限仅适用于文件夹。)“追加数据”权限允许用户对文件末尾进行更改,但不能更改、删除或覆盖现有数据。 (此权限仅适用于文件。)
  • 删除:用户可以删除文件或文件夹。 (如果用户没有对文件或文件夹的“删除”权限,但如果他们对父文件夹具有“删除子文件夹和文件”权限,他们仍然可以删除它。)
  • 读取权限:用户可以读取文件或文件夹的权限,例如“完全控制”、“读取”和“写入”。
  • 更改权限:用户可以更改文件或文件夹的权限。
  • 取得所有权:用户可以取得文件或文件夹的所有权。文件或文件夹的所有者始终可以更改其权限,无论保护该文件或文件夹的现有权限如何。
  • 同步:用户可以使用该对象进行同步。这使得线程能够等待,直到对象处于有信号状态。 ACL 编辑器中不提供此权限。你可以在这里读更多关于它的内容。

您可以通过运行以下 PowerShell 脚本找到所有这些用户权限:

[system.enum]::getnames([System.Security.AccessControl.FileSystemRights])

NTFS 权限可以是显式的,也可以是继承的。显式权限是单独配置的权限,而继承权限是从父文件夹继承的权限。权限的层次结构如下:

  • 明确拒绝
  • 显式允许
  • 继承拒绝
  • 继承允许

现在我们知道了 NTFS 权限,让我们探讨一下如何管理它们。

获取文件和文件夹的 ACL

第一个用于管理文件和文件夹权限的 PowerShell cmdlet 是“get-acl”;它列出了所有对象权限。例如,让我们获取对象路径为“\fs1sharedsales”的文件夹的所有权限列表:

get-acl \fs1sharedsales | fl

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

如果您想通过 PowerShell 获取完整的 NTFS 权限报告,您可以按照有关将 NTFS 权限导出到 CSV 的简单操作方法进行操作。

复制文件和文件夹权限

要复制权限,用户必须同时拥有源文件夹和目标文件夹。以下命令会将权限从“Accounting”文件夹复制到“Sales”文件夹:

get-acl \fs1sharedaccounting | Set-Acl \fs1sharedsales

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

从权限复制前后“get-acl”命令的输出可以看出,“Sales”共享文件夹权限已更改。

设置文件和文件夹权限

PowerShell“set-acl”cmdlet用于更改指定项目的安全描述符,例如文件、文件夹或注册表项;换句话说,它用于修改文件或文件夹的权限。以下脚本将用户“ENTERPRISET.Simpson”对文件夹“Sales”的“FullControl”权限设置为“Allow”:

$acl = Get-Acl \fs1sharedsales

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISET.Simpson","FullControl","Allow")

$acl.SetAccessRule($AccessRule)

$acl | Set-Acl \fs1sharedsales

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

如果您想为用户或安全组设置其他权限,请从下表中选择:

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

还有可以应用的基本访问权限的权限集:

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

删除用户权限

要删除权限,请使用“RemoveAccessRule”参数。让我们删除 T.Simpson 对“Sales”文件夹的“Allow FullControl”权限:

$acl = Get-Acl \fs1sharedsales

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("ENTERPRISET.Simpson","FullControl","Allow")

$acl.RemoveAccessRule($AccessRule)

$acl | Set-Acl \fs1sharedsales

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

请注意,T.Simpson 仍然具有“拒绝 FullControl”权限。要删除它,我们使用命令“PurgeAccessRules”,这将完全擦除 T.Simpson 对“Sales”文件夹的权限:

$acl = Get-Acl \fs1sharedsales

$usersid = New-Object System.Security.Principal.Ntaccount ("ENTERPRISET.Simpson")

$acl.PurgeAccessRules($usersid)

$acl | Set-Acl \fs1sharedsales

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

请注意,“PurgeAccessRules”不适用于字符串用户名;它仅适用于 SID。因此,我们使用“Ntaccount”类将用户帐户名从字符串转换为SID。另请注意,“PurgeAccessRules”仅适用于明确的权限;它不会清除遗传的。

禁用或启用权限继承

为了管理继承,我们使用“SetAccessRuleProtection”方法。它有两个参数:

  • 第一个参数负责阻止从父文件夹继承。它有两种状态:“$true”和“$false”。
  • 第二个参数确定当前继承的权限是保留还是删除。它具有相同的两个状态:“$true”和“$false”。

让我们禁用“Sales”文件夹的继承并删除所有继承的权限:

$acl = Get-Acl \fs1sharedsales

$acl.SetAccessRuleProtection($true,$false)

$acl | Set-Acl \fs1sharedsales

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

现在我们只剩下一个访问权限(因为它是显式添加的);所有继承的权限都被删除。

让我们恢复此更改并再次启用文件夹“Sales”的继承:

$acl = Get-Acl \fs1sharedsales

$acl.SetAccessRuleProtection($false,$true)

$acl | Set-Acl \fs1sharedsales

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

更改文件和文件夹所有权

如果要为文件夹设置所有者,则需要运行“SetOwner”方法。让我们将“ENTERPRISEJ.Carter”设为“Sales”文件夹的所有者:

$acl = Get-Acl \fs1sharedsales

$object = New-Object System.Security.Principal.Ntaccount("ENTERPRISEJ.Carter")

$acl.SetOwner($object)

$acl | Set-Acl \fs1sharedsales

[玩转系统] 如何使用 PowerShell 脚本管理文件系统 ACL

请注意,我们再次使用“Ntaccount”类将用户帐户名从字符串转换为 SID。

请注意,“SetOwner”方法不允许您将所有者更改为您想要的任何帐户;该帐户必须具有“取得所有权”、“读取”和“更改权限”权限。

正如您所看到的,使用 PowerShell 管理 NTFS 权限非常容易。但也不要忘记审核 NTFS 权限 - 跟踪对文件服务器所做的所有更改对于安全至关重要,以减少数据泄漏并应对内部威胁和其他 IT 安全风险。以下是有关如何使用 PowerShell 审核 NTFS 权限的基本指南。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯