Set-Acl 在 PowerShell v5 中无法按预期工作

Posted

技术标签:

【中文标题】Set-Acl 在 PowerShell v5 中无法按预期工作【英文标题】:Set-Acl not working as expected with PowerShell v5 【发布时间】:2020-01-15 05:49:20 【问题描述】:

长时间的听众,第一次来电????我正在尝试使用 PowerShell 设置文件夹的权限,但收效甚微。我首先按照此页面上标识的说明进行操作。 https://blog.netwrix.com/2018/04/18/how-to-manage-file-system-acls-with-powershell-scripts/ 我还阅读了在 *** 上可以找到的尽可能多的帖子,但我似乎没有遇到其他人遇到的相同问题。 所以首先,这是我正在使用的代码

$myPath = 'C:\inetpub\website'
# get actual Acl entry
$myAcl = Get-Acl "$myPath"
$myAclEntry = "NT AUTHORITY\NETWORK SERVICE","FullControl","Allow"
$myAccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($myAclEntry)
# prepare new Acl
$myAcl.SetAccessRule($myAccessRule)
$myAcl | Set-Acl "$MyPath"
# check if added entry present
Get-Acl "$myPath" | fl

结果是用户被添加到文件夹中,如下所示,但没有设置任何实际权限。 screenshot of folder permissions

看起来它实际上可能正在尝试设置特殊权限,但这很难证明,因为特殊权限选项不可用。

Get-Acl "$myPath" | fl 产生以下结果

Path   : Microsoft.PowerShell.Core\FileSystem::C:\inetpub\website
Owner  : BUILTIN\Administrators
Group  : DESKTOP-UKROSU8\None
Access : NT AUTHORITY\NETWORK SERVICE Allow  FullControl
         NT SERVICE\TrustedInstaller Allow  FullControl
         NT SERVICE\TrustedInstaller Allow  268435456
         NT AUTHORITY\SYSTEM Allow  FullControl
         NT AUTHORITY\SYSTEM Allow  268435456
         BUILTIN\Administrators Allow  FullControl
         BUILTIN\Administrators Allow  268435456
         BUILTIN\Users Allow  ReadAndExecute, Synchronize
         BUILTIN\Users Allow  -1610612736
         CREATOR OWNER Allow  268435456
Audit  : 
Sddl   : O:BAG:S-1-5-21-3999251487-2837792945-2014217647-513D:AI(A;;FA;;;NS)(A;ID;FA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464)(A;OICIIOID;GA;;;S-1-5-80-956008885-3418
         522649-1831038044-1853292631-2271478464)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)(A;OICIIOID;GA;;;CO)

请注意,我在虚拟 Windows 10 机器上执行此操作是为了测试目的,所以那些觉得有必要告诉我我冒着风险发布 Get-Acl 输出的人,我认为风险很小在这种情况下。

我读到这个问题可能是由“NT AUTHORITY”域选项被截断引起的,并且首先查找用户可能是有价值的。但我还没有弄清楚如何在 PowerShell 中做到这一点。任何提示将非常感谢。

【问题讨论】:

【参考方案1】:

据我所知,权限已设置。我从来没有遇到过任何问题,我做了很多。它设置了特殊权限(您可以在屏幕截图中向下滚动以查看复选框已选中)。

如果您提前点击屏幕截图,您将看到他对该目录具有完全控制权。在您的 get-acl 中,您还可以看到他对该目录具有完全控制权。

在 Windows 中,我不会太相信 GUI。如果 PowerShell get-acl 说他拥有完全控制权,那么他应该拥有完全控制权。

这里作为一个例子,我对 Guest / Gast 做了同样的事情(它是德语,但应该没那么重要)

    左侧的图像与您向我们展示的图像相同。访客除了特殊权限集外没有任何权限。

    如果您单击前进 (Erweitert),您会看到右上角的图片。如您所见,Guest 拥有 FullControl (Vollzugriff)。

    如果我们单击编辑 (Bearbeiten),您会看到右下角的图像。正如您在此处看到的,每个复选框都按预期进行了检查。

我不确定为什么第一个窗口没有更新,或者只是设置了特殊权限,但在我的经验中,第一个窗口不应该被信任,第二个窗口有更多的细节和信息,还有更多的配置选项。

对于您的问题:它可以正常工作,但您在第一个窗口中看不到它。为什么?不确定,但那是 Windows……我相信 get-acl 命令和第二个窗口。

【讨论】:

感谢您的帮助。我已经离开了这个项目,我从来没有让它工作

以上是关于Set-Acl 在 PowerShell v5 中无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 powershell 更改权限不会传播给孩子

为啥驱动器根目录上的 Set-Acl 会尝试设置“对象”的所有权?

如何在 Powershell 中模拟 Active Directory 用户?

无法使用 Powershell 2.0 压缩文件

SNS社区产品:近乎 V5.0-V5.2安装及问题解决思路

redux-react-route v4/v5 push() 在 thunk 动作中不起作用