gpt4 book ai didi

PowerShell设置高级NTFS权限

转载 作者:行者123 更新时间:2023-12-04 13:19:14 25 4
gpt4 key购买 nike

我正在尝试应用Windows安全设置的“高级”选项卡中定义的NTFS权限。一个ACL $Rule用于This folder only,另一个ACL用于Subfolders and files only

权限已被大量修改,如下所示:

(Get-Acl 'L:\Test\Beez\RAPJOUR\Appels List\Correct').Access

FileSystemRights : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited : False
InheritanceFlags : ContainerInherit, ObjectInherit
PropagationFlags : None

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

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

  • 一切正常,除了:完全控制,写属性,写扩展属性,删除,更改权限和取得所有权。


  • 除了:完全控制,更改权限和获得所有权之外,所有其他功能均处于打开状态。

  • 这是我用来应用权限的一部分代码。在这种情况下,必须在 Change部分中定义:
     $f = 'L:\Test\Beez\RAPJOUR\Appels List\Wrong'
    $ADobject = 'Domain\User'
    $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", "ContainerInherit, ObjectInherit", "Synchronize", "Allow DeleteSubdirectoriesAndFiles")
    $acl.AddAccessRule($rule)
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$ADobject", "AppendData", "ContainerInherit, ObjectInherit", "ReadAndExecute","Synchronize", "Allow CreateFiles","DeleteSubdirectoriesAndFiles")
    }

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

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

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

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

    我似乎语法不正确。.谢谢您的帮助。

    由于有了 post,我已经找到了以下部件:
  • '仅子文件夹和文件':"ContainerInherit, ObjectInherit", "InheritOnly"
  • “仅此文件夹”:"None", "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 'DOMAIN\user',
    'ListDirectory', 'ContainerInherit, ObjectInherit', 'InheritOnly',
    'Allow'
    $acl.AddAccessRule($ace1)
    $ace2 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
    'ReadAttributes', 'ContainerInherit, ObjectInherit', 'InheritOnly',
    'Allow'
    $acl.AddAccessRule($ace2)
    ...

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

    $acl = Get-Acl $path
    $ace = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
    'ListDirectory, ReadAttributes, ...', 'ContainerInherit, ObjectInherit',
    'InheritOnly', 'Allow'
    $acl.AddAccessRule($ace)

    但是请注意,您不能使用相同的ACE授予和拒绝权限。如果要拒绝特定的访问权限,则需要使用单独的ACE:

    $acl  = Get-Acl $path
    $ace1 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
    'Modify', 'ContainerInherit, ObjectInherit', 'InheritOnly',
    'Allow'
    $acl.AddAccessRule($ace1)
    $ace2 = New-Object Security.AccessControl.FileSystemAccessRule 'DOMAIN\user',
    'CreateDirectories', 'ContainerInherit, ObjectInherit', 'InheritOnly',
    'Deny'
    $acl.AddAccessRule($ace2)
    ...

    还要注意,显式权限优先于继承的权限, Deny优先于 Allow

    关于PowerShell设置高级NTFS权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26543127/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com