试图阻止安全组应用于其他 folders/files
Trying to prevent a security group from applying to other folders/files
我正在努力做到 $ADNameRO
和 $ADNameRW
(我在下面创建的)不会应用到它下面的文件夹,但让其余权限遗传。
我已经尝试更改这两个字符串的传播标志,以便它仅应用于添加到的文件夹和文件,但它仍然被添加到子文件和文件夹...
我认为我可能需要将这两个字符串的 InheritanceFlags 更改为 Object
,但是当我手动更改它时(通过 Windows GUI)它似乎无法正常工作...
如有任何帮助,我们将不胜感激。
function New-Ace {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true, Position=0)]
[Security.Principal.NTAccount]$Account,
[Parameter(Mandatory=$false, Position=1)]
[Security.AccessControl.FileSystemRights]$Permissions = 'ReadAndExecute',
[Parameter(Mandatory=$false, Position=2)]
[Security.AccessControl.InheritanceFlags]$InheritanceFlags = 'ContainerInherit,ObjectInherit',
[Parameter(Mandatory=$false, Position=3)]
[Security.AccessControl.PropagationFlags]$PropagationFlags = 'None',
[Parameter(Mandatory=$false, Position=4)]
[Security.AccessControl.AccessControlType]$Type = 'Allow'
)
New-Object Security.AccessControl.FileSystemAccessRule(
$Account, $Permissions, $InheritanceFlags, $PropagationFlags, $Type
)
}
$domain = 'ESG.INTL'
$administrators = ([wmi]"Win32_Sid.Sid='S-1-5-32-544'").AccountName
$ADDomainUsers = "$domain\Domain Users"
$acl = Get-Acl $path
$administrators, "$domain\Domain Admins" | ForEach-Object {
$acl.AddAccessRule((New-Ace $_ 'FullControl'))
}
$acl.AddAccessRule((New-Ace $ADNameRW 'Modify'))
$acl.AddAccessRule((New-Ace $ADNameRO 'ReadAndExecute'))
$acl.AddAccessRule((New-Ace $ADDomainUsers 'ReadAndExecute'))
在不继承的情况下设置对文件夹和文件的访问权限需要两个 ACE:一个用于 "this folder only",一个用于 "files only"。对于前者,将继承和传播标志都设置为 None
,对于后者,将继承标志设置为 ObjectInherit
,将传播标志设置为 InheritOnly
:
$acl.AddAccessRule((New-Ace $ADNameRW 'Modify' 'None'))
$acl.AddAccessRule((New-Ace $ADNameRW 'Modify' 'ObjectInherit' 'InheritOnly'))
$acl.AddAccessRule((New-Ace $ADNameRO 'ReadAndExecute' 'None'))
$acl.AddAccessRule((New-Ace $ADNameRO 'ReadAndExecute' 'ObjectInherit' 'InheritOnly'))
我正在努力做到 $ADNameRO
和 $ADNameRW
(我在下面创建的)不会应用到它下面的文件夹,但让其余权限遗传。
我已经尝试更改这两个字符串的传播标志,以便它仅应用于添加到的文件夹和文件,但它仍然被添加到子文件和文件夹...
我认为我可能需要将这两个字符串的 InheritanceFlags 更改为 Object
,但是当我手动更改它时(通过 Windows GUI)它似乎无法正常工作...
如有任何帮助,我们将不胜感激。
function New-Ace {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true, Position=0)]
[Security.Principal.NTAccount]$Account,
[Parameter(Mandatory=$false, Position=1)]
[Security.AccessControl.FileSystemRights]$Permissions = 'ReadAndExecute',
[Parameter(Mandatory=$false, Position=2)]
[Security.AccessControl.InheritanceFlags]$InheritanceFlags = 'ContainerInherit,ObjectInherit',
[Parameter(Mandatory=$false, Position=3)]
[Security.AccessControl.PropagationFlags]$PropagationFlags = 'None',
[Parameter(Mandatory=$false, Position=4)]
[Security.AccessControl.AccessControlType]$Type = 'Allow'
)
New-Object Security.AccessControl.FileSystemAccessRule(
$Account, $Permissions, $InheritanceFlags, $PropagationFlags, $Type
)
}
$domain = 'ESG.INTL'
$administrators = ([wmi]"Win32_Sid.Sid='S-1-5-32-544'").AccountName
$ADDomainUsers = "$domain\Domain Users"
$acl = Get-Acl $path
$administrators, "$domain\Domain Admins" | ForEach-Object {
$acl.AddAccessRule((New-Ace $_ 'FullControl'))
}
$acl.AddAccessRule((New-Ace $ADNameRW 'Modify'))
$acl.AddAccessRule((New-Ace $ADNameRO 'ReadAndExecute'))
$acl.AddAccessRule((New-Ace $ADDomainUsers 'ReadAndExecute'))
在不继承的情况下设置对文件夹和文件的访问权限需要两个 ACE:一个用于 "this folder only",一个用于 "files only"。对于前者,将继承和传播标志都设置为 None
,对于后者,将继承标志设置为 ObjectInherit
,将传播标志设置为 InheritOnly
:
$acl.AddAccessRule((New-Ace $ADNameRW 'Modify' 'None'))
$acl.AddAccessRule((New-Ace $ADNameRW 'Modify' 'ObjectInherit' 'InheritOnly'))
$acl.AddAccessRule((New-Ace $ADNameRO 'ReadAndExecute' 'None'))
$acl.AddAccessRule((New-Ace $ADNameRO 'ReadAndExecute' 'ObjectInherit' 'InheritOnly'))