none
Аудит доступов к папкам с помощью posh RRS feed

  • Вопрос

  • Хотелось бы вытащить доступа на папки в каком либо виде посредством posh. Попробовал с помощью команды get-acl, но никак не могу отформатировать список в нужном виде, такое ощущение что его вообще никак не отформатируешь, и ещё одна небольшая проблема хотелось бы видеть в доступах не только группы но и пользователей в них, было бы супер если можно было экспортировать в удобночитаемый формат xls, ну или хоть xml.

    Как можно реализовать данную задачу?

     

    Спасибо за ваши ответы.

    14 июня 2011 г. 12:42

Ответы

  • Для получения разрешений сетевого ресурса:
    function SharePermissions () {
    param(
    		[string]$computer,
    		[string]$share
    		)
        
    $ShareS = Get-WmiObject -Class Win32_LogicalShareSecuritySetting -ComputerName $computer | Where {$_.Name -eq $share}
    $SecurityDescriptor = $ShareS.GetSecurityDescriptor()
    $InfoShare = @()
      ForEach ($DACL in $SecurityDescriptor.Descriptor.DACL){
          $Object = "" | Select Domain, ID, AccessMask, AceType
          $Object.Domain = $DACL.Trustee.Domain
          $Object.ID = $DACL.Trustee.Name
          Switch ($DACL.AccessMask){
              2032127 {$AccessMask = "FullControl"}
              1179785 {$AccessMask = "Read"}
              1180063 {$AccessMask = "Read, Write"}
              1179817 {$AccessMask = "ReadAndExecute"}
              -1610612736 {$AccessMask = "ReadAndExecuteExtended"}
              1245631 {$AccessMask = "ReadAndExecute, Modify, Write"}
              1180095 {$AccessMask = "ReadAndExecute, Write"}
              268435456 {$AccessMask = "FullControl (Sub Only)"}
              default {$AccessMask = $DACL.AccessMask}
          }
          $Object.AccessMask = $AccessMask
          Switch ($DACL.AceType){
              0 {$AceType = "Allow"}
              1 {$AceType = "Deny"}
              2 {$AceType = "Audit"}
          }
          $Object.AceType = $AceType
    		Clear-Variable AccessMask -ErrorAction SilentlyContinue
    		Clear-Variable AceType -ErrorAction SilentlyContinue
    		$InfoShare += $Object
    	}
    Return $InfoShare
    }

    Пример:

    SharePermissions -computer localhost -share obmen
    Для получения разрешений NTFS :
    function ShareACL () {
    param(
    $computer,
    $share
    )
    $AclInfo = @()
    $ACL = @()
    $ACL = get-acl \\$computer\$share -ErrorAction SilentlyContinue | select @{e={$_.access};n='Access'}
    $AclInfo += $ACL.Access | % {
    $_ | select @{e={$computer};n='Computer'},`
    			@{e={$share};n='ShareName'},@{e={$_.identityreference};n='Login'},@{e={$_.filesystemrights};n='AccessMask'}
    }
    $AclInfo
    }

    Пример:

    ShareACL -computer localhost -share obmen
    19 июля 2011 г. 4:30

Все ответы

  • 1) Какой конечный вид хотелось бы видеть?

    2) Группы локальные или из AD?

    3) Если из AD,то используется ли стандартный модуль Active Directory или модуль от Quest Software,а может только использование ADSI?

    14 июня 2011 г. 12:53
    Отвечающий
  • Вид типа папка, юзеры, доступа на каждого, группы, доступа на каждую группу.

    Группы только из AD

    Используется стандартный модуль AD

     

    Заранее спасибо

    14 июня 2011 г. 15:32
  • Вид типа папка, юзеры, доступа на каждого, группы, доступа на каждую группу.

    Группы только из AD

    Используется стандартный модуль AD

     

    Заранее спасибо

    Мде.. задачка видимо сложноватая получилась(
    17 июня 2011 г. 5:48
  • Для получения разрешений сетевого ресурса:
    function SharePermissions () {
    param(
    		[string]$computer,
    		[string]$share
    		)
        
    $ShareS = Get-WmiObject -Class Win32_LogicalShareSecuritySetting -ComputerName $computer | Where {$_.Name -eq $share}
    $SecurityDescriptor = $ShareS.GetSecurityDescriptor()
    $InfoShare = @()
      ForEach ($DACL in $SecurityDescriptor.Descriptor.DACL){
          $Object = "" | Select Domain, ID, AccessMask, AceType
          $Object.Domain = $DACL.Trustee.Domain
          $Object.ID = $DACL.Trustee.Name
          Switch ($DACL.AccessMask){
              2032127 {$AccessMask = "FullControl"}
              1179785 {$AccessMask = "Read"}
              1180063 {$AccessMask = "Read, Write"}
              1179817 {$AccessMask = "ReadAndExecute"}
              -1610612736 {$AccessMask = "ReadAndExecuteExtended"}
              1245631 {$AccessMask = "ReadAndExecute, Modify, Write"}
              1180095 {$AccessMask = "ReadAndExecute, Write"}
              268435456 {$AccessMask = "FullControl (Sub Only)"}
              default {$AccessMask = $DACL.AccessMask}
          }
          $Object.AccessMask = $AccessMask
          Switch ($DACL.AceType){
              0 {$AceType = "Allow"}
              1 {$AceType = "Deny"}
              2 {$AceType = "Audit"}
          }
          $Object.AceType = $AceType
    		Clear-Variable AccessMask -ErrorAction SilentlyContinue
    		Clear-Variable AceType -ErrorAction SilentlyContinue
    		$InfoShare += $Object
    	}
    Return $InfoShare
    }

    Пример:

    SharePermissions -computer localhost -share obmen
    Для получения разрешений NTFS :
    function ShareACL () {
    param(
    $computer,
    $share
    )
    $AclInfo = @()
    $ACL = @()
    $ACL = get-acl \\$computer\$share -ErrorAction SilentlyContinue | select @{e={$_.access};n='Access'}
    $AclInfo += $ACL.Access | % {
    $_ | select @{e={$computer};n='Computer'},`
    			@{e={$share};n='ShareName'},@{e={$_.identityreference};n='Login'},@{e={$_.filesystemrights};n='AccessMask'}
    }
    $AclInfo
    }

    Пример:

    ShareACL -computer localhost -share obmen
    19 июля 2011 г. 4:30