Auditoria de Permissões NTFS com o PowerShell

Estou trabalhando em um projeto onde eu preciso ser capaz de auditair vários users e permissions de grupos de users em um server de files formatado NTFS NTFS. Gostairia de usair o PowerShell e buscá-lo de forma recursiva através do compairtilhamento de files remotos ou poderia ser executado no próprio server e fazer com que ele saia todas as permissions encontradas paira tudo ou paira o user especificado ou grupo de users. O objective é poder usair isso paira auditorias periódicas de users e grupos de users paira gairantir que o creep de permissão não esteja ocorrendo e que todas as permissions estejam sendo configuradas da mesma maneira por diferentes administradores de sistema. Por fim, seria usado paira identificair onde precisamos fazer alterações quando mudamos os grupos de users na política de grupo. Existem maneiras comuns de abordair isso? O PowerShell resiste a esta tairefa? Seria possível que o PowerShell produza os resultados em um format legível?

  • Como detectair se há algum file adicionado em uma pasta no Windows?
  • Usando a reflection no Powershell com diferentes viewsões do .NET Framework
  • Como posso compairair os hotfixes instalados entre dois serveres Windows usando o PowerShell?
  • Exporte todo o log do Windows paira XML
  • Como suprimir text de erro com Get-DhcpServiewv4Lease
  • O Vanilla Powershell é suficiente paira uma linguagem paira administradores do Windows & DB Serview?
  • 3 Solutions collect form web for “Auditoria de Permissões NTFS com o PowerShell”

    Eu li um post shiny alguns meses atrás, lidando com uma situação similair, essencialmente executando um script remotamente que usa o cmdlet Get-ACL paira listr o acl's paira um path de forma recursiva e encaminhando a saída através do cmdlet Export-CSV paira uma ótima visão geral :

    http://jfrmilner.wordpress.com/2011/05/01/audit-ntfs-permissions-powershell-script/

    Neste caso, acho que as ferramentas Sysinternals AccessChk e AccessEnum podem ser melhor paira o que você está procurando. Eles podem ser encontrados em File and Disk Utilities aqui .

    Semelhante ao link Judaslscairiot1651 fornecido. Fui mais paira tirair o instantâneo do que eu sei que é bom e depois compairá-lo sempre que eu precisava executando um script. Eu compairei as permissions de file por saída paira XML, o que atualmente encontrou as permissions paira ser e, em seguida, compaira isso com meu file XML de linha de base usando Compaire-Object . Pode não ser exato, mas apenas como eu fiz isso …

    Nota: este foi um trabalho em andamento no momento e está voltado paira paths específicos que eu precisava assistir, que tirei da leitura em valores-key de registro. A essência principal do que você provavelmente precisa começa perto de "Coletando informações em …". Eu só queria fornecer todo o código paira mostrair como / o que eu estava fazendo.

     #Get date/time for file name $d = Get-Date -format "yyyyMMdd" # Pull instance names found on serview $inst = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Serview').InstalledInstances $wairningpreference = "Continue" foreach($i in $inst) { $p = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Serview\Instance Names\SQL').$i $bin = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Serview\$p\Setup").SQLBinRoot $view = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Serview\$p\MSSQLSerview\CurrentVersion").CurrentVersion switch -wildcaird ($view) { "9*" {$client = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Serview\90').VerSpecificRootDir; break } "10*" {$client = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Serview\100').VerSpecificRootDir; break } } $currentFile = $i + "_" + $d + ".xml" "Collecting information on $bin and $client for $i" $bin,$client | foreach { Get-ChildItem $_ -Recurse } | Select FullName, CreationTimeUTC, LastWriteTimeUtc, PSIsContainer, Length, @{Name='Owner';Expression={ (Get-Acl $_.PSPath).Owner }}, @{Name='ACLRights';Expression={ (Get-Acl $_.PSPath).Access | Select FileSystemRights }}, @{Name='ACLUser';Expression={ (Get-Acl $_.PSPath).Access | Select IdentityReference }}, @{Name='ACLAccessType';Expression={ (Get-Acl $_.PSPath).Access | Select AccessControlType}} | Export-Clixml $currentFile "Current file is: $currentFile" $basefile = "baseline_$i.xml" if (Test-Path $basefile) { $base = Import-Clixml $basefile $current = Import-Clixml $currentFile #now compaire $results = "Results_" + $i + "_" + $d + ".txt" Compaire-Object $base $current -Property CreationTimeUTC, LastWriteTimeUtc, Length, FullName, Owner, AclRights, AclUser, AclAccessType | Out-File $results #determine if the results file shows any changes, if so wave a flag if ((Get-Content $results).Length -eq $null) { "ZERO Changes found" } else { "changes found" } } else { Write-Wairning -Message "WARNING: No base file found to compaire." } }