#powershell #inheritance #acl #adgroup
#powershell #наследование #acl #adgroup
Вопрос:
Я добавляю группы AD в разрешения папок (разрешения применяются правильно). Как я могу запретить наследование добавляемых групп AD?
Я перепробовал практически все и варианты I.G.
$InheritanceFlag=[System.Security.AccessControl.InheritanceFlags]@("ContainerInherit,ObjectInherit")
$InheritanceFlag=[System.Security.AccessControl.InheritanceFlags]::"ContainerInherit,ObjectInherit"
$InheritanceFlag=[System.Security.AccessControl.InheritanceFlags]"ContainerInherit,ObjectInherit"
$InheritanceFlag=[System.Security.AccessControl.InheritanceFlags]"ContainerInherit"
$InheritanceFlag=[System.Security.AccessControl.InheritanceFlags]"ObjectInherit"
Также попробовал следующие комбинации с приведенными выше.
$PropagationFlag=[System.Security.AccessControl.PropagationFlags]"None"
$PropagationFlag=[System.Security.AccessControl.PropagationFlags]::None
$PropagationFlag=[System.Security.AccessControl.PropagationFlags]::InheritOnly
$PropagationFlag=[System.Security.AccessControl.PropagationFlags]::NoPropagateInherit
А также с кавычками. В дополнение к:
$ACL.SetAccessRuleProtection($true,$true) |Set-Acl $sFoldPath
$ACL.SetAccessRuleProtection($false,$false) |Set-Acl $sFoldPath
$ACL.SetAccessRuleProtection($true,$false) |Set-Acl $sFoldPath
Я занимаюсь этим уже 4/5 дней и загружаю практически каждую ссылку на первых 2 страницах моих различных результатов поиска. Кроме того, вчера вечером и сегодня изучили все предложения от StackOverflow, прежде чем отправлять сюда за помощью.
Я в полной растерянности относительно того, что я делаю неправильно, и теперь обращаюсь к сообществу за любой помощью или информацией, которую вы могли бы предоставить.
$InheritanceFlag=[System.Security.AccessControl.InheritanceFlags]@("ContainerInherit,ObjectInherit") # "ContainerInherit,ObjectInherit"
$PropagationFlag=[System.Security.AccessControl.PropagationFlags]"None" # "InheritOnly" # NoPropagateInherit # This property is significant only when the value of the InheritanceFlags enumeration is not None.
$AccessControlType=[System.Security.AccessControl.AccessControlType]"Allow "
ForEach ($oCol in $oCSVData){
$sFoldPath=$oCol.'FolderPath'.Trim()
$IdentityReference=$oCol.'GroupNames'.Trim()
If ($IdentityReference.Substring($IdentityReference.Length - 2) -eq '_R') {
$sPermission= ('ReadAndExecute','Read','ListDirectory')
} Else {
$sPermission='Modify'
}
$ACL = Get-Acl $sFoldPath
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($IdentityReference,$sPermission,$InheritanceFlag,$PropagationFlag,'Allow')
$ACL.SetAccessRuleProtection($true,$true)
$ACL.AddAccessRule($AccessRule)
$ACL | Set-Acl $sFoldPath
}
Мои требования заключаются в том, что мне нужно связать группу объявлений с папкой, назначить разрешения и убедиться, что разрешения групп объявлений видны в контекстном окне; и не назначаются как специальные разрешения. Наконец, разрешения групп Ad не наследуются.
Комментарии:
1. Вы хотите, чтобы пользователи в этой группе могли получать доступ к файлам в этой папке или только перечислять содержимое папки?
2. Привет, спасибо, да, они должны иметь доступ к данным в папке.
Ответ №1:
У меня есть скрипт, который делает почти то же самое, о чем вы просите. Вот что я нашел, что работает:
$folderACL = Get-ACL (Pathtofolder)
$inherit = [system.security.accesscontrol.InheritanceFlags]"ContainerInherit, ObjectInherit"
$propagation = [system.security.accesscontrol.PropagationFlags]"None"
$accessRule = New-Object system.security.accesscontrol.filesystemaccessrule("DomainUser","Modify", $inherit, $propagation, "Allow")
$folderACL.SetAccessRule($accessRule)
#Set folder inheritance to off
$folderAcl.SetAccessRuleProtection($True,$false)
Set-Acl (Pathtofolder) -AclObject $folderAcl
Ответ №2:
Если вы хотите, чтобы пользователи могли просматривать содержимое каталога и иметь доступ к файлам в этом каталоге, вам нужен только флаг наследования ObjectInherit и никаких флагов распространения. Похоже, вы просто пытаетесь добавить доступ к определенной папке для определенной группы, поэтому, если вы не пытаетесь удалить унаследованные права (например, вы действительно хотите удалить права для системной учетной записи или администраторов домена?) шаг SetAccessRuleProtection можно пропустить. Я думаю, это должно делать то, что вы хотите:
$InheritanceFlag=[System.Security.AccessControl.InheritanceFlags]"ObjectInherit" # ObjectInherit ensurs only objects are accessable, not subfolders
$PropagationFlag=[System.Security.AccessControl.PropagationFlags]"NoPropagateInherit"
ForEach ($oCol in $oCSVData){
$sFoldPath=$oCol.'FolderPath'.Trim()
$IdentityReference=$oCol.'GroupNames'.Trim()
$sPermission= If ($IdentityReference.Substring($IdentityReference.Length - 2) -eq '_R') {
'ReadAndExecute,ListDirectory'
} Else {
'Modify'
}
$ACL = Get-Acl $sFoldPath
$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($IdentityReference,$sPermission,$InheritanceFlag,$PropagationFlag,'Allow')
$ACL.AddAccessRule($AccessRule)
$ACL | Set-Acl $sFoldPath
}
Комментарии:
1. Привет, Мэд, я согласен с тем, что ты говоришь. Мне нужно сохранить системные, административные и доменные администраторы. Я изменил код в соответствии с вашими рекомендациями (ObjectInherit и оставить «SetAccessRuleProtection»). В результате больше групп наследуют доступ к папкам. Я сохранил изображение, вот URL: ibb.co/G9swLsS
2. Верно, я облажался с флагами распространения. Так и должно быть
NoPropagateInherate
. Я обновлю свой ответ, чтобы отразить это.3. Спасибо, я добавил «NoPropagateInherate», все работало, но в контекстном меню разрешения отображаются как специальные ( ibb.co/HCtFhp2 ). Мне нужно, чтобы разрешения были заполнены в контекстном меню ( ibb.co/v33ZcP1 ). Любые другие предложения или идеи? Заранее спасибо
4. Вы не сможете, не отключив наследование для каждой вашей папки.