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

[玩转系统] 如何使用PowerShell管理NTFS权限?

作者:精品下载站 日期:2024-12-14 20:08:04 浏览:16 分类:玩电脑

如何使用PowerShell管理NTFS权限?


为了管理对 Windows 中文件或文件夹的访问,将特殊的 ACL(访问控制列表)分配给 NTFS 文件系统对象(文件或文件夹)。对象的 ACL 定义用户或组可以对文件系统对象执行的可用操作(权限)。在大多数情况下,Windows 管理员使用文件资源管理器图形界面(文件/文件夹属性 -> 安全选项卡)或 icacls 控制台工具来管理文件或文件夹的 NTFS 权限。在本文中,我们将了解如何使用 PowerShell cmdlet 管理 NTFS 对象的权限。您可以在脚本中使用这些命令,或者自动管理 Windows 文件服务器和工作站上的 NTFS 访问权限。

[玩转系统] 如何使用PowerShell管理NTFS权限?

Get-Acl 和 Set-Acl:用于管理 NTFS ACL 的内置 PowerShell Cmdlet

在 PowerShell v5 (Windows 10/Windows Server 2016) 中,有两个单独的内置 cmdlet 来管理 ACL(Microsoft.PowerShell.Security 模块的一部分):

  • Get-Acl — 允许获取 NTFS 文件系统上特定对象的当前 ACL;

  • Set-Acl - 用于添加/更改当前对象 ACL。

我们不会详细考虑这些内置 cmdlet,因为它们的功能在大多数情况下不足以在实际任务中管理 NTFS 权限。让我们详细讨论一些典型的用例。

要获取文件夹(文件)的当前所有者以及分配的 NTFS 权限列表,请运行以下命令:

get-acl C:\docs\ |fl

[玩转系统] 如何使用PowerShell管理NTFS权限?

Path : Microsoft.PowerShell.Core\FileSystem::C:\docs\
Owner : CORP\asmith
Group : CORP\Domain Users
Access : PC-7L7JAK6\root Allow ReadAndExecute, Synchronize
BUILTIN\Administrators Allow FullControl
NT AUTHORITY\SYSTEM Allow FullControl
BUILTIN\Users Allow ReadAndExecute, Synchronize
NT AUTHORITY\Authenticated Users Allow Modify, Synchronize
NT AUTHORITY\Authenticated Users Allow -536805376
Audit :
Sddl : O:S-1-5-21-2950832418-2342342341-4040681116-234234G:DUD:AI(A;OICI;0x1200a9;;;S-1-5-21-2601781602-2342342341-6543210895-1001)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;SY)(A;OICIID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)

正如您所看到的,当前权限也显示为 SDDl 字符串 - 我们在设置 Windows 服务权限一文中简要介绍了这种访问描述格式。

您只能以更清晰的格式显示 NTFS 权限列表:

(get-acl C:\docs\).access

[玩转系统] 如何使用PowerShell管理NTFS权限?

您可以从一个 NTFS 文件夹(对象)复制当前的 NTFS 权限并将其应用到另一个 NTFS 文件夹(对象):

Get-Acl e:\old_docs | Set-Acl C:\docs

为此,该帐户必须是对象的所有者并具有“取得所有权”权限。

使用 Set-ACL 的主要问题是 cmdlet 总是尝试更改资源所有者,即使您只需要更改 NTFS 权限也是如此。因此,要添加对象的权限,您必须使用以下复杂的脚本:


$path = "c:\docs "
$user = "corp\DSullivan"
$Permiss = "Read, ReadAndExecute, ListDirectory"
$InheritSettings = "Containerinherit, ObjectInherit"
$PropogationSettings = "None"
$RuleType = "Allow"
$acl = Get-Acl $path
$perm = $user, $Permiss, $InheritSettings, $PropogationSettings, $RuleType
$rule = New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList $perm
$acl.SetAccessRule($rule)
$acl | Set-Acl -Path $path

要删除用户或组访问文件夹的 NTFS 权限:

$path = "c:\docs"
$acl = Get-Acl $path
$rules = $acl.Access | where IsInherited -eq $false
$targetrule = $rules | where IdentityReference -eq "corp\DSullivan"
$acl.RemoveAccessRule($targetrule)
$acl | Set-Acl -Path $path

要从 PowerShell 禁用文件夹继承:

$path = 'C:\docs
$acl = Get-ACL -Path $path
$acl.SetAccessRuleProtection($True, $True) # the first $True shows if the folder is protected, the second $True specifies if the current NTFS permissions have to be copied
Set-Acl -Path $path -AclObject $acl

此外,使用 Get-Acl 和 Set-Acl,您可以管理对象的 NTFS 审核设置(请参阅文章跟踪谁从共享文件夹中删除了文件)或有关 AD 中当前 OU 委派权限的文章。

使用 NTFSSecurity PowerShell 模块管理文件权限

正如我已经说过的,内置的 PowerShell cmdlet 来管理文件系统对象不是很方便。要管理 Windows 中文件和文件夹的 NTFS 权限,您最好使用 PowerShell 库中的单独模块 - NTFSSecurity。您可以使用以下命令安装最新版本的 NTFSSecurity 模块(当前为 4.2.6)

Install-Module -Name NTFSSecurity

命令或手动下载(链接)。手动安装时,只需将模块存档解压到

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\NTFSSecurity 

(不要忘记解锁下载的文件)。

将 NTFSSecurity 模块导入到您的 PowerShell 会话中:

Import-Module NTFSSecurity

显示模块中可用命令的列表(36 个 cmdlet):

Get-Command -Module NTFSSecurity

[玩转系统] 如何使用PowerShell管理NTFS权限?

列出文件夹当前的 NTFS 权限:

Get-Item 'c:\docs' | Get-NTFSAccess

如您所见,当前权限以更方便的形式显示。

[玩转系统] 如何使用PowerShell管理NTFS权限?

要授予用户或组对特定文件夹的完全控制权限,请运行以下命令:

Add-NTFSAccess -Path C:\docs -Account 'CORP\RShelby','BUILTIN\Administrators' -AccessRights 'Fullcontrol' -PassThru

提示。默认情况下,NTFSSecurity cmdlet 不返回任何数据。使用-PassThru参数使命令在执行后显示新的ACL。

要仅在顶级文件夹级别授予权限而不更改嵌套对象(仅限文件夹)的权限,请使用以下命令:

Add-NTFSAccess c:\docs\public -Account corp\LMurkowski -AccessRights Modify -AppliesTo ThisFolderOnly

要删除分配的 NTFS 权限:

Remove-NTFSAccess -Path C:\DOCS -Account 'corp\LMurkowski' -AccessRights FullControl -PassThru

下一个命令将删除给定帐户的文件夹中所有嵌套对象的权限(将跳过继承的权限):

Get-ChildItem -Path C:\docs -Recurse | Get-NTFSAccess -Account 'corp\LMurkowski' -ExcludeInherited |Remove-NTFSAccess -PassThru

使用以下命令,您可以使管理员帐户成为文件夹中所有嵌套对象的所有者:

Get-ChildItem -Path C:\docs -Recurse -Force | Set-NTFSOwner -Account 'Administrator'

要手动清除分配给文件夹对象的所有权限(继承的权限不会被删除):

Get-ChildItem -Path C:\docs -Recurse -Force | Clear-NTFSAccess

要为文件夹中的所有对象启用 NTFS 继承:

Get-ChildItem -Path C:\docs -Recurse -Force | Enable-NTFSAccessInheritance

要显示除继承的权限之外的所有手动分配的权限:

dir C:\docs | Get-NTFSAccess -ExcludeInherited

您可以显示分配给特定帐户的权限(不要将其与有效权限混淆,我们稍后会讨论):

dir C:\docs | Get-NTFSAccess -Account a-d\RShelby

如何使用PowerShell查看NTFS有效权限?

您可以使用以下命令查看特定文件或文件夹的有效 NTFS 权限

Get-EffectiveAccess

cmdlet。假设您已向多个 AD 安全组授予对某个文件夹的访问权限,并且您想知道特定用户帐户(或 SID)是否可以访问该文件夹。如果不列出用户帐户所属的 AD 组的所有成员,如何做到这一点?在这种情况下,查看有效的 NTFS 权限非常有用。例如,您需要查看域帐户confroom对文件夹中所有嵌套目录的有效权限。

Get-ChildItem -Path c:\docs -Recurse -Directory | Get-NTFSEffectiveAccess -Account 'corp\confroom’ | select Account, AccessControlType, AccessRights, FullName

或者可以查看某个文件的有效权限:

Get-Item -Path 'C:\docs\annual_report2019.xlsx' | Get-NTFSEffectiveAccess -Account 'corp\confroom' | Format-List

[玩转系统] 如何使用PowerShell管理NTFS权限?

文件系统对象的当前有效用户权限在AccessRights字段中指定。

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

取消回复欢迎 发表评论:

关灯