加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

PowerShell设置高级NTFS权限

发布时间:2020-12-14 02:10:07 所属栏目:Windows 来源:网络整理
导读:我正在尝试应用在 Windows安全设置的“高级”选项卡中定义的NTFS权限.一个ACL $规则仅适用于此文件夹,另一个仅适用于子文件夹和文件. 权限经过大量修改,如下所示: (Get-Acl 'L:TestBeezRAPJOURAppels ListCorrect').AccessFileSystemRights : FullCont
我正在尝试应用在 Windows安全设置的“高级”选项卡中定义的NTFS权限.一个ACL $规则仅适用于此文件夹,另一个仅适用于子文件夹和文件.

权限经过大量修改,如下所示:

(Get-Acl 'L:TestBeezRAPJOURAppels ListCorrect').Access

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTINAdministrators
IsInherited       : False
InheritanceFlags  : ContainerInherit,ObjectInherit
PropagationFlags  : None

FileSystemRights  : CreateFiles,AppendData,DeleteSubdirectoriesAndFiles,ReadAndExecute,Synchronize
AccessControlType : Allow
IdentityReference : DomainDirk
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : DeleteSubdirectoriesAndFiles,Modify,Synchronize
AccessControlType : Allow
IdentityReference : DomainDirk
IsInherited       : False
InheritanceFlags  : ContainerInherit,ObjectInherit
PropagationFlags  : InheritOnly

>除了以下内容外,其他所有内容均已启用:完全控制,写入属性,写入扩展属性,删除,更改权限和获取所有权.

>一切都在开启,除了:完全控制,更改权限和获得所有权.

这是我用来应用权限的一段代码.在这种情况下,必须在更改部分中定义:

$f = 'L:TestBeezRAPJOURAppels ListWrong'
 $ADobject = 'DomainUser'
 $acl = Get-Acl $f

 $Grant = 'Change'
    # Remove user/group first
    $rule = New-Object system.security.AccessControl.FileSystemAccessRule("$ADobject","Read","Allow")
    $acl.RemoveAccessRuleAll($rule)

    # Add read permissions
    if ($Grant -eq 'ReadAndExecute') {
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject","ReadAndExecute","ContainerInherit,ObjectInherit","None","Allow")
    }

    if ($Grant -eq 'Change') {
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject","Modify","Synchronize","Allow  DeleteSubdirectoriesAndFiles")
        $acl.AddAccessRule($rule)
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject","AppendData","Allow  CreateFiles","DeleteSubdirectoriesAndFiles")
    }

    if ($Grant -eq 'Modify') {
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject","Allow")
    }

    if ($Grant -eq 'FullControl') {
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject","FullControl","Allow")
    }

    if ($Grant -eq 'ListFolderContents') {
        $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject","ContainerInherit","Allow")
    }

$acl.AddAccessRule($rule)
Set-Acl $f $acl

我似乎无法正确的语法..谢谢你的帮助.

多亏了这个post,我已经找到了这个部分:

>’仅限子文件夹和文件’:“ContainerInherit,ObjectInherit”,“InheritOnly”
>’仅限此文件夹’:“无”,“继承仅限”

解决方法

Windows中的对象访问权限通过 Access Control Lists(ACL)控制,其基本上由 Access Control Entries(ACE)列表组成.每个ACE都是一组属性,用于控制是授予还是拒绝访问,ACE应用于谁,ACE是否从父对象继承,以及是否应由子对象继承.

如果你看一下FileSystemAccessRule类的文档,你会发现“完整”构造函数有5个参数:

> IdentityReference / String:标识ACE适用的受托者(用户,组,计算机……)的对象或字符串.
> FileSystemRights:要授予或拒绝的实际permissions.
> InheritanceFlags:用于控制哪些对象类型从此对象继承权限的标志(容器,叶对象或无).
> PropagationFlags:用于控制权限propagation的标志.标志InheritOnly会使当前对象免于接收ACE.标志NoPropagateInherit将继承限制为直接子对象.
> AccessControlType:ACE的type(允许或拒绝).

现在,如果要为给定的受托者分配多个访问权限,您可以使用单个ACE执行此操作:

$acl  = Get-Acl $path
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAINuser','ListDirectory','ContainerInherit,ObjectInherit','InheritOnly','Allow'
$acl.AddAccessRule($ace1)
$ace2 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAINuser','ReadAttributes','Allow'
$acl.AddAccessRule($ace2)
...

或者通过以逗号分隔的字符串提供权限:

$acl = Get-Acl $path
$ace = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAINuser','ListDirectory,ReadAttributes,...','Allow'
$acl.AddAccessRule($ace)

但请注意,您无法使用相同的ACE授予和拒绝权限.如果要拒绝特定的访问权限,则需要使用单独的ACE执行此操作:

$acl  = Get-Acl $path
$ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAINuser','Modify','Allow'
$acl.AddAccessRule($ace1)
$ace2 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAINuser','CreateDirectories','Deny'
$acl.AddAccessRule($ace2)
...

另请注意,显式权限优先于继承权限,Deny优先于Allow.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读