【问题标题】:How to grant directory permissions in a Powershell script如何在 Powershell 脚本中授予目录权限
【发布时间】:2020-08-31 13:29:25
【问题描述】:

我在 IIS 管理器中的站点上单击鼠标右键并选择“编辑权限”,然后单击安全选项卡。在那里,我拥有具有以下权限的用户 IUSR:读取和执行、列出文件夹内容、读取。我还可以在 Powershell 中使用命令 Get-Acl <path> |fl 验证这一点,该命令显示:

访问:NT AUTHORITY\IUSR 允许 ReadAndExecute、同步

现在我完全删除了 IUSR 的 ACL 条目。我想用 Powershell 脚本设置它,使用以下几行:


$path=<path to directory>
$acl = Get-Acl "$path"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\IUSR","ReadAndExecute","Allow")
$acl.SetAccessRule($AccessRule)
$acl | Set-Acl "$path"

再次使用 Get-Acl &lt;path&gt; |fl 进行验证,我显示的信息与预期的完全相同。但是在 IIS 管理器中,没有设置之前检查的权限。而是选中“特殊权限”。当我单击“高级”并从列表中选择 IUSR 时,它显示已授予相同的权限:读取和执行、列出文件夹内容、读取

但我的网站无法运行(浏览器抛出错误:HTTP-Error 401.3 - Unauthorized)。仅当我在权限窗口中手动授予这些权限时,它才有效。如何在 Powershell 脚本中正确设置所需的权限?

【问题讨论】:

  • 目前我没有可以测试的东西。但是,我会仔细查看 Get-ACL 返回的权限,以确保您正确设置它们。查看FileSystemAccessRule 上的 MS Doc。如果我今天找到要测试的东西,我会看看我是否能弄明白。
  • 我的猜测是您还需要为访问规则指定Inheritance and Propagation flags,以便文件夹的子对象继承权限。试试$AccessRule = [System.Security.AccessControl.FileSystemAccessRule]::new("NT AUTHORITY\IUSR","ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow")
  • @Theo 同意。与我所说的类似,他认为他可以更好地了解现有权利,然后使用访问规则,直到他得到真正的匹配。您的示例是否已经考虑到这一点?
  • @Steven @ Theo 你的回答给了我一个有价值的提示,现在我能够确定我的初始手动设置和我的脚本方法之间的区别。脚本中的设置仅适用于“此文件夹”,而它们必须应用于“此文件夹、子文件夹和文件”。现在我只需要了解如何使用 PowerShell 进行设置。
  • @steven 您的回答正是我所需要的。我只需要在我的代码中的“ReadAndExecute”之后插入“ContainerInherit,ObjectInherit”,“None”,就解决了这个问题。让它成为一个答案,我会标记它。谢谢

标签: powershell


【解决方案1】:

将我的评论变成答案,听起来您还需要为访问规则指定Inheritance and Propagation flags,以便文件夹的子对象继承权限。

$AccessRule = [System.Security.AccessControl.FileSystemAccessRule]::new("NT AUTHORITY\IUSR", "ReadAndExecute", "ContainerInherit,ObjectInherit", "None", "Allow")

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 2014-05-02
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2022-08-04
    • 2020-05-07
    • 2014-03-30
    • 2011-02-23
    相关资源
    最近更新 更多