Como trabalhar com a enumeração baseada em acesso no Dfs?

1

Portanto, o DFS do Windows Server aparentemente suporta ABE (Enumeração Baseada em Acesso) no Server 2008. Mas isso não parece funcionar imediatamente - a simples criação de links em uma raiz os torna visíveis para todos em o domínio, independentemente de os usuários terem permissões de leitura no destino ou não.

Então, como faço isso funcionar?

    
por the-wabbit 21.09.2016 / 10:08

1 resposta

0

De acordo com a documentação do DFS ABE , os seguintes duas condições precisam ser atendidas:

  1. O ABE precisa estar habilitado para a raiz do Dfs em questão
  2. Os links
  3. precisam ser atualizados com permissões para usuários e grupos que precisam vê-los

Então, 1. é bastante fácil. Uma simples chamada de

dfsutil property abde enable \<domain>\<DfsRoot>

fará o que for necessário. 2. é mais complicado, pois você provavelmente não desejará configurar permissões de link manualmente. A ideia básica é roteirizar a leitura das permissões dos alvos do link e chamar

dfsutil property acl grant \<domain>\<DfsRoot> <permission list>

com os dados coletados. Powershell é a ferramenta de escolha aqui. Este script que é simples o suficiente para ser listado aqui irá lidar com um nível de links Dfs:

# Dfs-SetLinkACEsToTargetACEs.ps1
# Automation for Access-Based Enumeration on Dfs links
# Call: .\Dfs-SetLinkACEsToTargetACEs.ps1 -DfsRootPath \<Domain>\<DfsRoot>

Param (
        [Parameter(Mandatory=$true)]
        [string]$DfsRootPath 
)


Get-ChildItem $DfsRootPath | ForEach-Object {
    $DfsTargetPath = $_.FullName
    $AccessGrant = @()
    $AccessDeny = @()
    (Get-Acl $DfsTargetPath).Access | ForEach-Object {
        # exclude security principals which do not resolve correctly
        If (-not ($_.IdentityReference.Value -like "S-1-5-21*")) {
            If ($_.AccessControlType -eq "Allow") {
                $AccessGrant += "$($_.IdentityReference):R"
            }
            If ($_.AccessControlType -eq "Deny") {
                $AccessDeny += "$($_.IdentityReference):R"
            }
        }
    }
    If ($AccessGrant.Count -gt 0) {
        dfsutil property acl grant "$DfsTargetPath" $AccessGrant Protect Replace
    }
    If ($AccessDeny.Count -gt 0) {
        dfsutil property acl deny "$DfsTargetPath" $AccessDeny
    }
}

Você obviamente pode automatizar isso para executar com frequência criando uma tarefa agendada em um dos seus servidores.

Observe que você precisará ter pelo menos as "permissões de leitura" diretamente no destino do link e a delegação de gerenciamento na raiz do Dfs para uma execução bem-sucedida.

    
por 21.09.2016 / 10:08