De acordo com a documentação do DFS ABE , os seguintes duas condições precisam ser atendidas:
- O ABE precisa estar habilitado para a raiz do Dfs em questão Os links
- 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.