2

Можно ли перечислить все папки / файлы, на которые у данной группы есть явные разрешения, для машины под управлением Windows Server 2003? Если так, то как? Было бы неплохо увидеть и унаследованные разрешения, но я мог бы сделать это только с явными разрешениями.

Немного предыстории: я пытаюсь обновить группы / разрешения на тестовом сервере. Одна из групп, Devs , не была правильно реализована при ее создании, и моя цель - удалить ее из системы. Его заменили LeadDevelopers , у которого есть разрешения на многие - но, естественно, не на все - одни и те же папки. Я хочу , чтобы убедиться , что я не случайно сиротой любых папок или вызвать какие - либо другие вопросы , когда я удалить Devs У него были некоторые права администратора.

РЕДАКТИРОВАТЬ: ответы до сих пор - по крайней мере *cacls и AccessEnum - предоставляют способ выяснить, какие группы / пользователи имеют разрешения на известные каталоги / файлы. Я на самом деле хочу обратное поведение: я знаю группу, и я ищу каталоги / файлы, для которых у группы есть разрешения. Кроме того , как я отметил в комментарии, группа Devs сама по себе не является членом какой - либо другой группы.

4 ответа4

2

Похоже, для этого нет простого инструмента. Я в конечном итоге происходит с комбинацией получения отчета из DumpSec и поиска Devs с Findstr.

И да, я знаю, что существуют десятки одинаково хороших решений, но это были инструменты, о которых я думал, когда решил отказаться от поиска одношаговой стратегии.

1

AccessEnum от Sysinternals может помочь сделать то, что вы хотите. Он будет перечислять разрешения для ваших каталогов. Он точно не показывает, являются ли разрешения явными или унаследованными, но он покажет вам все каталоги (и файлы), чьи разрешения отличаются от родительских. Это, вероятно, дает вам ту же информацию. Он также может перечислять ключи реестра прав доступа таким же образом.

Вы также можете быть заинтересованы в AccessChk (командная строка) и ShareEnum (например, AccessEnum для общих файловых ресурсов).

1

Я нашел запись на форуме, которая может помочь.

Вот выдержка:

if (($args.Count) -eq 2) {
 $dir = $args[0]
 if ((Test-Path $dir) -eq $true) {
  $script:FoldersFound = New-Object System.Collections.ArrayList
  $GroupName = $args[1]
  $folders = Get-ChildItem $dir -Recurse | Where-Object {$_.PSIsContainer}

  foreach($folder in $folders) {
   $ACL = Get-Acl -Path $folder.FullName
   foreach($ACE in $ACL.access) {
    if (($ACE.IdentityReference) -like "*\$GroupName") {
     if (($ACE.IsInherited) -eq $false) {
      $FoldersFound.Add($folder.FullName) | Out-Null
      break
     }
    }
   }
  }

  $FoldersFound.Sort()
  foreach($folder in $FoldersFound) {
   Write-Host $folder
  }
 }
} else {
 Write-Host "Syntax:" $MyInvocation.MyCommand.Name """path""" """Group Name"""
}

Сохраните приведенный выше код как <filename>.ps1 и запустите его из командной строки PowerShell с двумя аргументами: "Путь к папке" и "имя группы".

Пример. Перейдите в папку, в которой вы сохранили сценарий, и введите следующее, где <filename> (очевидно) - это имя, которое вы дали файлу, и замените путь и имя группы своим собственным:

.\<filename>.ps1 "C:\Users" "Administrators"

Теперь учтите, что в скрипте нет обработки ошибок, поэтому он, например, не учитывает ошибки, связанные с отказом в доступе, или слишком длинные имена путей.

Кредит идет Андреасу Хултгрену, MCTS, MCITP.

0

Попробуйте cacls.exe или xcacls.exe или icacls.exe или даже SetACL. Это не только перечислит разрешения, включая наследование, но и позволит вам редактировать или заменять их.

Cacls /xcalcs и icacls не очень хороши для отображения разрешений для конкретного пользователя или группы, но SetACL, кажется, обладает такой функциональностью, но имеет сложный, но мощный синтаксис.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .