# FSMO Roles

> Guia completo sobre as Funções de Operação Mestra Única Flexível (FSMO) no Active Directory, abordando conceitos, responsabilidades, gerenciamento, troubleshooting e melhores práticas.

***

## 🔍 Introdução às FSMO

As **FSMO** (*Flexible Single Master Operations*), também conhecidas como **Operations Masters**, são funções especiais atribuídas a controladores de domínio (DCs) em uma floresta Active Directory. Elas foram introduzidas para resolver as limitações do modelo **multimaster** puro, onde todos os DCs aceitam alterações concorrentes, o que poderia levar a inconsistências em operações críticas.

Cada função FSMO é detida por um único DC por vez, garantindo que operações sensíveis sejam executadas de forma ordenada e consistente em toda a floresta ou domínio.

***

## 🧠 Conceitos Fundamentais

### Por que FSMO?

O Active Directory utiliza um modelo **multimaster** para a maioria das operações: qualquer controlador de domínio pode processar alterações e replicá-las para os demais. No entanto, algumas operações não podem tolerar conflitos ou atrasos de replicação. A solução foi **centralizar** essas operações em funções específicas.

### Características das FSMO

| **Característica**         | **Descrição**                                                           |
| -------------------------- | ----------------------------------------------------------------------- |
| **Única por escopo**       | Apenas um DC na floresta/domínio detém cada função.                     |
| **Transferível**           | Pode ser movida entre DCs de forma planejada.                           |
| **Sequestrável**           | Em caso de falha permanente, pode ser "tomada" por outro DC.            |
| **Crítica para operações** | A ausência de uma função pode impactar ou parar determinadas operações. |

### Hierarquia das Funções

```mermaid
graph TB
    subgraph Floresta
        SM[Schema Master]
        DNM[Domain Naming Master]
    end
    
    subgraph Domínio A
        PDC[PDC Emulator]
        RID[RID Master]
        IM[Infrastructure Master]
    end
    
    subgraph Domínio B
        PDC2[PDC Emulator]
        RID2[RID Master]
        IM2[Infrastructure Master]
    end
    
    SM --> Domínio A
    SM --> Domínio B
    DNM --> Domínio A
    DNM --> Domínio B
```

***

## 🎯 As Cinco Funções FSMO

### 3.1 Funções de Floresta

Estas funções têm escopo em toda a floresta e existem apenas uma vez por floresta.

| **Função**               | **Responsabilidade Principal**                       | **Impacto da Falha**                                              |
| ------------------------ | ---------------------------------------------------- | ----------------------------------------------------------------- |
| **Schema Master**        | Controla todas as alterações no esquema do AD.       | Não é possível estender o esquema (ex.: instalar Exchange, Lync). |
| **Domain Naming Master** | Gerencia a adição e remoção de domínios na floresta. | Não é possível adicionar ou remover domínios.                     |

### 3.2 Funções de Domínio

Estas funções existem uma vez **por domínio** na floresta.

| **Função**                | **Responsabilidade Principal**                                                         | **Impacto da Falha**                                                                      |
| ------------------------- | -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| **PDC Emulator**          | Sincronização de horário, alterações de senha, bloqueio de contas, compatibilidade NT. | Atrasos em autenticação; problemas com alteração de senhas; dessincronização de horário.  |
| **RID Master**            | Aloca pools de RIDs (Relative IDs) para cada DC.                                       | Quando os pools de RIDs dos DCs esgotam, não é possível criar novos objetos de segurança. |
| **Infrastructure Master** | Atualiza referências cruzadas entre domínios (SIDs, GUIDs).                            | Referências a objetos de outros domínios podem ficar inconsistentes.                      |

***

## ⚙️ Detalhamento Técnico

### 1. Schema Master

O esquema do Active Directory define todas as classes e atributos que podem existir no diretório. O Schema Master é o único DC que pode processar **escritas** no esquema.

```powershell
# Verificar versão do esquema
Get-ADObject (Get-ADRootDSE).schemaNamingContext -Property objectVersion
```

**Operações que exigem acesso ao Schema Master:**

* Instalação do Exchange Server
* Instalação do Lync/Skype for Business
* Instalação do System Center
* Extensões personalizadas de esquema
* Atualizações de versão do AD (adprep /forestprep)

**Comportamento em cenários de replicação:**

* As alterações no esquema são replicadas para todos os DCs da floresta.
* Enquanto o Schema Master estiver offline, o esquema torna-se **somente leitura**.

### 2. Domain Naming Master

Responsável por garantir que nomes de domínios sejam únicos na floresta e por gerenciar as partições de diretório.

```powershell
# Listar todos os domínios na floresta
Get-ADForest | Select-Object -ExpandProperty Domains
```

**Operações que exigem acesso ao Domain Naming Master:**

* Criar um novo domínio
* Remover um domínio existente
* Adicionar ou remover partições de aplicação (ex.: partição DNS)
* Renomear um controlador de domínio

### 3. PDC Emulator – A Função Mais Crítica

O **PDC Emulator** é a função mais crítica em um domínio. Suas responsabilidades vão além do que o nome sugere:

| **Responsabilidade**         | **Detalhes**                                                                                                                             |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| **Sincronização de horário** | O PDC Emulator é a fonte de horário para o domínio. DCs sincronizam com ele, e servidores membros e workstations sincronizam com os DCs. |
| **Alterações de senha**      | Processa alterações de senha e replica rapidamente. Falhas de autenticação são encaminhadas ao PDC antes de serem negadas.               |
| **Bloqueio de contas**       | Gerencia o estado de bloqueio de contas em todo o domínio.                                                                               |
| **GPOs**                     | É o repositório padrão para as Políticas de Grupo (SYSVOL).                                                                              |
| **Compatibilidade com NT**   | Emula um PDC para clientes NT 4.0 e aplicações legadas.                                                                                  |
| **Logon com senha expirada** | Permite que usuários com senha expirada realizem logon para alterá-la.                                                                   |

```powershell
# Configurar fonte de horário externa no PDC
w32tm /config /manualpeerlist:"time.windows.com" /syncfromflags:manual /reliable:yes /update
w32tm /resync
```

### 4. RID Master

Cada objeto de segurança no AD possui um **SID (Security Identifier)** único. O SID é composto por:

* **SID de domínio** (comum a todos os objetos do domínio)
* **RID (Relative ID)** (único para cada objeto)

```
Exemplo de SID: S-1-5-21-123456789-123456789-123456789-1234
├── S-1-5-21-123456789-123456789-123456789 (SID do domínio)
└── 1234 (RID)
```

O RID Master aloca **pools de RIDs** para cada DC no domínio:

| **Pool**           | **Tamanho Padrão**                                         |
| ------------------ | ---------------------------------------------------------- |
| Primeiro pool      | 500 RIDs                                                   |
| Pools subsequentes | 500 RIDs (Windows 2000/2003) ou 5.000 RIDs (Windows 2008+) |

```powershell
# Verificar RIDs disponíveis em um DC
Get-ADDomain | Select-Object -ExpandProperty RIDAvailablePool
```

### 5. Infrastructure Master

Mantém a consistência de referências entre domínios. Quando um objeto é renomeado ou movido em um domínio, o Infrastructure Master do domínio que possui referências a esse objeto atualiza os dados.

{% hint style="warning" %}
**Regra Crítica:** Em domínios com múltiplos DCs, o Infrastructure Master **NÃO** deve ser executado em um DC que também seja **Catálogo Global (GC)**. Se ambos estiverem no mesmo servidor, a função não opera corretamente, pois o GC já possui as informações completas de outros domínios.
{% endhint %}

```powershell
# Verificar se um DC é Global Catalog
Get-ADDomainController -Identity DC01 | Select-Object Name, IsGlobalCatalog
```

***

## 🛠️ Gerenciamento de Funções

### 5.1 Visualização

#### Método 1: PowerShell (Recomendado)

```powershell
# Funções de domínio
Get-ADDomain | Format-List PDCEmulator, RIDMaster, InfrastructureMaster

# Funções de floresta
Get-ADForest | Format-List SchemaMaster, DomainNamingMaster

# Visualização detalhada com todos os DCs
Get-ADDomainController -Filter * | ForEach-Object {
    $dc = $_.Name
    $roles = @()
    
    if ((Get-ADDomain).PDCEmulator -eq $dc) { $roles += "PDC" }
    if ((Get-ADDomain).RIDMaster -eq $dc) { $roles += "RID" }
    if ((Get-ADDomain).InfrastructureMaster -eq $dc) { $roles += "Infra" }
    if ((Get-ADForest).SchemaMaster -eq $dc) { $roles += "Schema" }
    if ((Get-ADForest).DomainNamingMaster -eq $dc) { $roles += "DomainNaming" }
    
    [PSCustomObject]@{
        DomainController = $dc
        FSMO_Roles = $roles -join ", "
    }
} | Format-Table -AutoSize
```

#### Método 2: ntdsutil

```cmd
ntdsutil
roles
connections
connect to server %computername%
quit
select operation target
list roles for connected server
```

#### Método 3: NetDOM

```cmd
netdom query fsmo
```

### 5.2 Transferência Planejada

Use transferência quando o DC atual estiver online e acessível.

#### PowerShell

```powershell
# Transferir uma única função
Move-ADDirectoryServerOperationMasterRole -Identity "DC02" -OperationMasterRole PDCEmulator

# Transferir todas as funções de domínio de uma vez
Move-ADDirectoryServerOperationMasterRole -Identity "DC02" -OperationMasterRole PDCEmulator, RIDMaster, InfrastructureMaster

# Transferir funções de floresta
Move-ADDirectoryServerOperationMasterRole -Identity "DC02" -OperationMasterRole SchemaMaster, DomainNamingMaster
```

#### ntdsutil

```cmd
ntdsutil
roles
connections
connect to server DC02.dominio.com.br
quit
transfer PDC
transfer RID
transfer Infrastructure
transfer Schema
transfer DomainNaming
quit
quit
```

### 5.3 Sequestro (Seize) em Emergência

{% hint style="warning" %}
**ATENÇÃO:** O sequestro só deve ser realizado quando o DC original **falhou permanentemente** e **não será recuperado**. Após o sequestro, o DC antigo **NUNCA** deve ser retornado ao domínio.
{% endhint %}

```powershell
# Sequestrar com força (force)
Move-ADDirectoryServerOperationMasterRole -Identity "DC02" -OperationMasterRole PDCEmulator -Force
```

```cmd
# Usando ntdsutil
ntdsutil
roles
connections
connect to server DC02.dominio.com.br
quit
seize PDC
seize RID
seize Infrastructure
seize Schema
seize DomainNaming
quit
quit
```

**Efeitos colaterais do sequestro:**

* Possível inconsistência de USN (Update Sequence Numbers)
* Necessidade de metadata cleanup para remover o DC antigo
* Potencial conflito de RID pools se o DC antigo retornar

***

## 🏗️ Posicionamento e Arquitetura

### Matriz de Recomendações

| **Função**                | **Recomendação de Posicionamento**        | **Justificativa**                                              |
| ------------------------- | ----------------------------------------- | -------------------------------------------------------------- |
| **Schema Master**         | DC raiz da floresta com boa conectividade | Raramente alterado, mas precisa estar acessível para upgrades  |
| **Domain Naming Master**  | DC raiz da floresta                       | Necessário para criar/remover domínios                         |
| **PDC Emulator**          | Site central (hub) com boa conectividade  | Função mais crítica; deve ter baixa latência para todos os DCs |
| **RID Master**            | Mesmo DC que o PDC Emulator (recomendado) | Simplifica gerenciamento e reduz dependências                  |
| **Infrastructure Master** | DC que **NÃO** seja Global Catalog        | Para garantir operação correta em ambientes multi-domínio      |

### Arquitetura Recomendada por Cenário

#### Cenário 1: Pequeno Domínio (1-10 DCs)

```
DC01 (Site Principal)
├── Schema Master
├── Domain Naming Master
├── PDC Emulator
├── RID Master
└── Infrastructure Master

DC02 (Site Secundário)
├── Global Catalog
└── (funções apenas em failover)
```

#### Cenário 2: Médio Domínio (10-50 DCs, múltiplos sites)

```
DC01 (Site Principal)
├── PDC Emulator
├── RID Master
└── Global Catalog

DC02 (Site Principal)
├── Schema Master
├── Domain Naming Master
└── Infrastructure Master (não GC)

DC03 (Site Secundário)
└── Global Catalog

DC04 (Site Remoto)
└── Global Catalog
```

#### Cenário 3: Floresta Multi-Domínio

```
Floresta Root: DOMINIO.COM
├── DC01 (Root)
│   ├── Schema Master
│   ├── Domain Naming Master
│   ├── PDC Emulator (root)
│   ├── RID Master (root)
│   └── Infrastructure Master (root - não GC)
│
Subdomínio: FILIAL.DOMINIO.COM
├── DC01-FILIAL
│   ├── PDC Emulator (filial)
│   ├── RID Master (filial)
│   └── Infrastructure Master (filial - não GC)
```

***

## 📊 Monitoramento e Alertas

### Eventos Críticos a Monitorar

| **Evento ID** | **Fonte**                      | **Descrição**                           |
| ------------- | ------------------------------ | --------------------------------------- |
| 1925          | ActiveDirectory\_DomainService | Tentativa de sequestrar função FSMO     |
| 1926          | ActiveDirectory\_DomainService | Função FSMO transferida com sucesso     |
| 1927          | ActiveDirectory\_DomainService | Função FSMO sequestrada                 |
| 1126          | ActiveDirectory\_DomainService | RID Master não está acessível           |
| 2092          | ActiveDirectory\_DomainService | Domain Naming Master não está acessível |

### Script de Monitoramento PowerShell

```powershell
function Test-FSMORoles {
    $forest = Get-ADForest
    $domain = Get-ADDomain
    $allDCs = Get-ADDomainController -Filter *
    
    $roles = @(
        [PSCustomObject]@{ Role = "Schema Master"; Owner = $forest.SchemaMaster; Scope = "Forest" },
        [PSCustomObject]@{ Role = "Domain Naming Master"; Owner = $forest.DomainNamingMaster; Scope = "Forest" },
        [PSCustomObject]@{ Role = "PDC Emulator"; Owner = $domain.PDCEmulator; Scope = "Domain" },
        [PSCustomObject]@{ Role = "RID Master"; Owner = $domain.RIDMaster; Scope = "Domain" },
        [PSCustomObject]@{ Role = "Infrastructure Master"; Owner = $domain.InfrastructureMaster; Scope = "Domain" }
    )
    
    $results = foreach ($role in $roles) {
        $dcStatus = $allDCs | Where-Object { $_.Name -eq ($role.Owner -replace '\..*$', '') }
        
        [PSCustomObject]@{
            Role = $role.Role
            Owner = $role.Owner
            Scope = $role.Scope
            Status = if ($dcStatus) { "Online" } else { "Offline/Unreachable" }
            LastChecked = Get-Date
        }
    }
    
    # Alertar se alguma função estiver offline
    $offlineRoles = $results | Where-Object { $_.Status -eq "Offline/Unreachable" }
    if ($offlineRoles) {
        Write-Warning "FSMO Roles Offline: $($offlineRoles.Role -join ', ')"
        # Enviar alerta via email, Slack, etc.
    }
    
    return $results
}

# Executar monitoramento
Test-FSMORoles | Format-Table -AutoSize
```

### Configuração de Alertas no SCOM ou Azure Monitor

```powershell
# Criar alerta personalizado no Event Viewer
$AlertAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\Scripts\FSMOAlert.ps1"
$AlertTrigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 5)
Register-ScheduledTask -TaskName "FSMO_Monitor" -Action $AlertAction -Trigger $AlertTrigger
```

***

## 🔧 Troubleshooting

### Problema 1: Falha ao Transferir Função

**Sintoma:**

```
Move-ADDirectoryServerOperationMasterRole : Unable to transfer operation master role
```

**Causas comuns:**

* DC de destino não é um controlador de domínio válido
* Problemas de replicação
* Permissões insuficientes

**Solução:**

```powershell
# Verificar replicação primeiro
repadmin /replsummary
repadmin /syncall /AdeP

# Verificar se o DC de destino está saudável
dcdiag /s:DC02 /v
```

### Problema 2: RID Master com Pool Esgotado

**Sintoma:**

* Erro ao criar novos objetos: "Unable to create a new object because the directory service has exhausted the pool of relative identifiers"

**Solução:**

```powershell
# Verificar RID disponível
Get-ADDomain | Select-Object RIDAvailablePool

# Forçar novo pool (se necessário)
$domainDN = (Get-ADDomain).DistinguishedName
$ridManager = "CN=RID Manager$,CN=System,$domainDN"
Set-ADObject -Identity $ridManager -Replace @{fSMORoleOwner="CN=NTDS Settings,CN=DC02,CN=Servers,CN=Site,CN=Sites,CN=Configuration,DC=dominio,DC=com,DC=br"}
```

### Problema 3: Infrastructure Master em GC

**Sintoma:**

* Referências a objetos de outros domínios inconsistentes
* SIDs antigos aparecem em grupos

**Solução:**

```powershell
# Identificar se Infrastructure Master está em GC
$infraDC = (Get-ADDomain).InfrastructureMaster
$isGC = (Get-ADDomainController -Identity $infraDC).IsGlobalCatalog

if ($isGC) {
    Write-Warning "Infrastructure Master está em um Global Catalog!"
    # Transferir para um DC que não seja GC
    $nonGCDCs = Get-ADDomainController -Filter {IsGlobalCatalog -eq $false} | Where-Object { $_.Name -ne $infraDC }
    if ($nonGCDCs) {
        Move-ADDirectoryServerOperationMasterRole -Identity $nonGCDCs[0].Name -OperationMasterRole InfrastructureMaster
    }
}
```

***

## ✅ Melhores Práticas

### Operacionais

1. **Documente a localização** de todas as funções FSMO em um local centralizado.
2. **Realize transferências planejadas** antes de descomissionar DCs.
3. **Monitore a saúde** das funções diariamente.
4. **Mantenha pelo menos dois DCs** por domínio para redundância.
5. **Configure o PDC Emulator** com fonte de horário externa confiável.

### Segurança

1. **Proteja o acesso** às funções FSMO (apenas administradores autorizados).
2. **Monitore eventos 1925** (tentativas de sequestro não autorizadas).
3. **Isole o Schema Master** em um DC com poucas funções adicionais.

### Recuperação

1. **Documente o processo** de sequestro para cada função.
2. **Teste a recuperação** em ambiente de homologação.
3. **Mantenha backups** do estado do sistema de todos os DCs.

### Checklist de Manutenção Mensal

```powershell
# Verificação mensal de saúde FSMO
Write-Host "=== FSMO Health Check ===" -ForegroundColor Cyan

# 1. Verificar funções online
$fsmoRoles = Test-FSMORoles
$fsmoRoles | Format-Table

# 2. Verificar RID disponível
$ridPool = Get-ADDomain | Select-Object -ExpandProperty RIDAvailablePool
$remainingRIDs = $ridPool -split ":" | Select-Object -Last 1
Write-Host "RIDs disponíveis: $remainingRIDs" -ForegroundColor Yellow

# 3. Verificar sincronização de horário no PDC
$pdc = (Get-ADDomain).PDCEmulator
Write-Host "Sincronização de horário no PDC ($pdc):" -ForegroundColor Yellow
w32tm /monitor /computers:$pdc

# 4. Verificar replicação
Write-Host "Status de replicação:" -ForegroundColor Yellow
repadmin /replsummary
```

***

## 📚 Conclusão

As funções FSMO são componentes críticos para a operação correta do Active Directory. Compreender suas responsabilidades, posicionamento adequado e procedimentos de recuperação é essencial para qualquer administrador de infraestrutura Microsoft.

**Pontos-chave para lembrar:**

* ✅ PDC Emulator é a função mais crítica – monitore constantemente
* ✅ Infrastructure Master não deve estar em um Global Catalog em domínios com múltiplos DCs
* ✅ Use transferência para movimentação planejada; use sequestro apenas em emergências
* ✅ Mantenha documentação atualizada da localização de todas as funções
* ✅ Monitore eventos de segurança relacionados a funções FSMO

***

## 🔗 Referências

* [Microsoft Docs: Planning Operations Master Role Placement](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/planning-operations-master-role-placement)
* [Microsoft Docs: Transferring or Seizing FSMO Roles](https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/manage/ad-ds-operations-master-roles)
* [Microsoft Docs: FSMO Roles in Active Directory](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/fsmo-roles)
* [TechNet: Understanding FSMO Roles](https://technet.microsoft.com/en-us/library/cc978013.aspx)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/ambientes/windows/active-directory-ad/fsmo-roles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
