【发布时间】: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 <path> |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