FGPP: Como Configurar Senhas Sem Expiração no Active Directory

O time de operações decidiu que, para contas de serviço e algumas identidades privilegiadas, a troca periódica de senha não acrescenta valor de segurança. Com a Política de Senha Granular (FGPP) do Active Directory é possível impedir a expiração sem abrir mão de comprimento mínimo e complexidade. Veja como implantar o controle de forma sustentada, auditável e alinhada às recomendações modernas.

Índice

Por que evitar a expiração de senhas

A renovação obrigatória a cada 30, 60 ou 90 dias era tida como melhor prática quando o risco principal era o password spraying offline. Hoje, com autenticação federada, MFA e monitoramento de comprometimento em tempo real, obrigar o usuário a lembrar novas senhas complexas tende a aumentar tickets de suporte, reutilização de padrões previsíveis e até anotações inseguras. A Microsoft, o NIST SP 800‑63B e o Centro de Cibersegurança Nacional do Reino Unido já recomendam abolir alterações periódicas — salvo indicação de vazamento. Manter as credenciais estáveis reduz atrito, porém requer controles compensatórios, como autenticação multifator e revisão de privilégios.

Compreendendo a FGPP

Introduzida no Windows Server 2008, a Fine‑Grained Password Policy (FGPP) permite múltiplos conjuntos de requisitos dentro do mesmo domínio. Cada conjunto é um Password Settings Object (PSO) armazenado no contêiner CN=Password Settings Container,CN=System,DC=.... Principais atributos:

  • msDS-MaximumPasswordAge: tempo máximo antes da expiração.
  • msDS-PasswordComplexityEnabled: exige caracteres de classes distintas.
  • msDS-MinimumPasswordLength: número mínimo de caracteres.
  • msDS-PasswordSettingsPrecedence: prioridade — valor menor tem precedência.
  • msDS-PSOAppliesTo: lista de usuários ou grupos aos quais o PSO se aplica.

Quando várias FGPPs disputam um usuário, a de menor precedence vence. Se não houver FGPP, entram em vigor as diretivas herdadas da GPO de domínio.

Configurando uma FGPP sem expiração

Pré‑requisitos

  • Nível funcional de domínio ≥ Windows Server 2008.
  • Conta com direitos Domain Admin ou delegação específica sobre o contêiner System.
  • Módulo RSAT instalado para usar os cmdlets ActiveDirectory.

Criar o PSO pela interface gráfica

No Active Directory Administrative Center (ADAC):

  1. Navegue em System → Password Settings Container e clique em New → Password Settings.
  2. Defina um Name amigável e atribua Precedence coerente (por exemplo, 10).
  3. Marque Password must meet complexity requirements; em Minimum password length, insira 16.
  4. Em Maximum password age, a UI impede o valor zero; insira temporariamente 1 dia ou deixe em branco e salve.

Até aqui o PSO existe mas ainda não impede a expiração. É necessário ajustar o atributo msDS-MaximumPasswordAge para 0 via PowerShell ou ADSI Edit, pois o valor “não definido” não é interpretado como infinito.

Ajustar MaxPasswordAge via PowerShell

# Abrir sessão elevada
Import-Module ActiveDirectory

Alterar MaxPasswordAge para zero (TimeSpan 0.00:00:00)

Set-ADFineGrainedPasswordPolicy `    -Identity "FGPP_SemExpiracao"`
-MaxPasswordAge 0.0:0:0 

O cmdlet aceita o formato dd.hh:mm:ss. A sequência 0.0:0:0 equivale a um TimeSpan de zero, efetivamente desativando a expiração.

Vincular o PSO aos alvos

O atributo msDS-PSOAppliesTo recebe DNs de usuários ou grupos de segurança globais. Prática recomendada: criar um grupo dedicado, adicionar os usuários e vincular o PSO ao grupo — facilita auditoria e remoção.

Add-ADGroupMember -Identity "GRPSenhaSemExpirar" -Members svcsql,svc_iis
Set-ADFineGrainedPasswordPolicy -Identity "FGPP_SemExpiracao" `
    -AppliesTo "CN=GRP_SenhaSemExpirar,OU=ServiceAccounts,DC=contoso,DC=local"

A partir daí, a alteração replica para todos os controladores de domínio. Para forçar aplicação em estações e servidores, rode klist purge seguido de gpupdate /force ou simplesmente peça logoff/logon.

Validar a configuração

Use Get-ADUser e verifique o PSO resultante:

Get-ADUser svc_sql -Properties msDS-ResultantPSO `
| Select-Object DistinguishedName,msDS-ResultantPSO

Outra verificação é rodar net user <conta> /domain e confirmar a linha Password expires como Never.

Alternativa com “Password never expires”

Em um cenário de urgência, marque manualmente a caixa Password never expires na guia Account de cada usuário. Apesar de rápido, deixa a lógica dispersa em várias contas, prejudicando governança. Com FGPP, o controle fica centralizado, documentado no AD e versionável via scripts.

Comparativo entre abordagens

CritérioFGPPAtributo de conta
EscalabilidadeAlvo por grupo; muda centenas de contas em uma linhaAlteração individual ou script customizado
AudiçãoCmdlet único lista quem recebe o PSONecessário enumerar todas as contas
e filtrar por flag
Compatível com Políticas de ComplexidadeSim, no mesmo objetoDepende de GPO separada; pode haver conflito
Gerência de ciclo de vidaVersão, backup e delegação via ACLPropenso a erro manual, difícil de rastrear

Boas práticas de segurança moderna

  • Ative MFA para todas as contas persistentes, mitigando o impacto de senhas que não expiram.
  • Monitore tentativas de logon anômalas com Azure AD Identity Protection ou SIEM.
  • Use senhas únicas e longas. Com 16 caracteres, um ataque de força bruta online é inviável sob políticas de bloqueio.
  • Faça revisões periódicas de privilégio. A conta que não expira, mas mantém acesso além do necessário, vira alvo valioso.
  • Combine com senha protegida por hardware (PSK) ou credenciais gerenciadas (gMSA) quando possível.

Perguntas frequentes

A FGPP afeta controladores de domínio?
Não diretamente. Os DCs herdam a política de senha do domínio. Para contas de computador, use configurações de “Default Domain Policy” ou fine‑grained apenas para objetos de usuário.

É seguro definir MaxPasswordAge 0?
Se houver MFA e detecção de ameaça, sim. O valor zero apenas impede expiração automática; o administrador ainda pode forçar reset quando necessário, por exemplo após suspeita de vazamento.

Posso combinar FGPP com políticas de bloqueio de conta?
Sim. A FGPP também expõe atributos de Lockout. Ajuste msDS-LockoutThreshold e msDS-LockoutObservationWindow conforme a superfície de ataque.

Qual o impacto em ambientes híbridos?
Para contas sincronizadas com Azure AD, respeita-se a expiração local; portanto, se o AD on‑prem não expira, o Azure AD também não expirará. Use políticas de senha na nuvem apenas para contas nativas de nuvem.

Script de implantação completo

# Variáveis de conveniência
$PSOName   = "FGPP_SemExpiracao"
$GrpName   = "GRP_SenhaSemExpirar"
$MinSize   = 16
$Prec      = 10

Criar grupo se não existir

if (-not (Get-ADGroup -Filter "Name -eq '\$GrpName'")) {
New-ADGroup -Name \$GrpName -GroupScope Global `        -Path "OU=ServiceAccounts,DC=contoso,DC=local"`
-Description "Contas cujas senhas não expiram"
}

Criar FGPP

if (-not (Get-ADFineGrainedPasswordPolicy -Filter "Name -eq '\$PSOName'")) {
New-ADFineGrainedPasswordPolicy `        -Name $PSOName`
-Precedence \$Prec `        -MinPasswordLength $MinSize`
-PasswordComplexityEnabled \$true `        -MaxPasswordAge ([TimeSpan]::Zero)`
-AppliesTo \$GrpName
} else {
Set-ADFineGrainedPasswordPolicy -Identity \$PSOName `        -MinPasswordLength $MinSize`
-PasswordComplexityEnabled \$true `        -MaxPasswordAge 0.0:0:0`
-AppliesTo \$GrpName
}

Adicionar contas de serviço ao grupo

\$svcAccounts = "svc\sql","svc\iis","svc\_backup"
\$svcAccounts | ForEach-Object {
Add-ADGroupMember -Identity \$GrpName -Members $\_
} 

Checklist rápido

  • Confirme o nível funcional ≥ 2008.
  • Crie grupo de destino.
  • Configure FGPP com complexidade e 16+ caracteres.
  • Ajuste MaxPasswordAge para zero via PowerShell.
  • Vincule grupo ao PSO.
  • Valide com Get-ADUser -Property msDS-ResultantPSO.
  • Implemente MFA e monitoramento.
  • Documente a mudança para auditoria.

Adotando a FGPP sem expiração, você preserva a robustez das senhas e elimina trocas forçadas que já não ampliam a segurança. Combine com controles modernos e mantenha registros claros para passar por auditorias sem percalços.

Índice