Неверная информация ACL в PowerShell

У меня проблема с получением списка доступа для общих папок (не разрешений NTFS!) Через PowerShell в Windows7. Я предоставил общий доступ к папке для списка пользователей, но для одного из них (us10151) я запретил доступ через диалоговое окно общего доступа к файлам и разрешил доступ через диалоговое окно разрешений NTFS. Пользователь не может открыть эту папку, все в порядке. Но когда я попытался прочитать разрешение для этой папки, я не нашел записей с запретом доступа. Итак, ищите это (у меня тоже есть скриншот, но я не могу его добавить):

**icacls.exe \\pc00001\intel**
\\pc00001\intel NT AUTHORITY\SYSTEM:(OI)(CI)(F)
                tstdmn\us00001:(OI)(CI)(RX)
                tstdmn\Domain Users:(OI)(CI)(M)
                tstdmn\us10151:(OI)(CI)(RX)
                tstdmn\us00002:(OI)(CI)(F)
                BUILTIN\Administrators:(OI)(CI)(F)

**cacls.exe \\pc00001\intel**
 c:\Intel NT AUTHORITY\SYSTEM:(OI)(CI)F 
          tstdmn\us00001:(OI)(CI)R 
          tstdmn\Domain Users:(OI)(CI)C 
          tstdmn\us10151:(OI)(CI)R 
          tstdmn\us00002:(OI)(CI)F 
          BUILTIN\Administrators:(OI)(CI)F

**Get-Acl \\pc00001\intel**
Path   : Microsoft.PowerShell.Core\FileSystem::\\pc00001\intel
Owner  : BUILTIN\Administrators
Group  : pc00001\None
Access : NT AUTHORITY\SYSTEM Allow  FullControl
         BUILTIN\Administrators Allow  FullControl
         tstdmn\Domain Users Allow  Modify, Synchronize
         tstdmn\us00001 Allow  ReadAndExecute, Synchronize
         tstdmn\us10151 Allow  ReadAndExecute, Synchronize
         tstdmn\us00002 Allow  FullControl
Audit  : 
Sddl   : <...>

Что случилось?


person user3443419    schedule 20.03.2014    source источник


Ответы (2)


Общие ACL определяются для общего ресурса, а не для папки. icacls, cacls и Get-Acl возвращают разрешения на последний. Используйте WMI для перечисления разрешений общего доступа:

$permissions = @{
  2032127 = 'F'
  1245631 = 'M'
  1179817 = 'RX'
}

$type = @{
  0 = 'Allow'
  1 = 'Deny'
  2 = 'Audit'
}

gwmi Win32_Share -Filter 'Type=0' | % {
  "{0}:`t{1}" -f $_.Name, $_.Path
  gwmi Win32_LogicalShareSecuritySetting -Filter "Name='$($_.Name)'" | % {
    $_.GetSecurityDescriptor().Descriptor.DACL | % {
      "`t{0} {1} {2}" -f $_.Trustee.Name, $type[[int]$_.AceType],
        $permissions[[int]$_.AccessMask]
    }
  }
}

Фильтр Type=0 подавляет административные ресурсы.

person Ansgar Wiechers    schedule 20.03.2014
comment
Не работает :( Intel: C:\Intel us10151 F Все F Администраторы F - person user3443419; 21.03.2014
comment
@user3443419 user3443419 Работает просто отлично. Я просто не включил тип ACE в вывод. - person Ansgar Wiechers; 21.03.2014
comment
О, да! Вот и все! Работает отлично! - person user3443419; 21.03.2014

Все три команды показывают вам разрешения NTFS для файла, на который указывает общий ресурс, вам нужен инструмент, чтобы показать вам ACL самого общего ресурса.

Одним из таких инструментов является SubinACL.

.\subinacl.exe /share \\pc00001\intel /display
person Peter Hahndorf    schedule 20.03.2014
comment
Спасибо, это работает, но я не хочу использовать какие-либо внешние компоненты программного обеспечения. А как ловить выходные данные? - person user3443419; 21.03.2014