Добавление групп объявлений безопасности в разрешение папки без разрешения наследования

#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. Вы не сможете, не отключив наследование для каждой вашей папки.