Грешна 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 Работи добре. Просто не бях включил типа 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