O Active Directory (AD) é utilizado por muitas organizações para gestão de usuários e serviços de autenticação. Entender a expiração da senha das contas de usuário do AD é importante para manter a segurança. Usando o PowerShell, essa tarefa pode ser automatizada, facilitando a gestão. Este artigo explicará como verificar a expiração da senha das contas de usuário do AD usando o PowerShell, passo a passo.
Comando para Verificar a Expiração da Senha
Para verificar a expiração da senha de uma conta de usuário do Active Directory, combine o cmdlet Get-ADUser do PowerShell com vários atributos. Abaixo está o comando básico para verificar a expiração da senha para um usuário específico.
# Verificar a expiração da senha do usuário
Get-ADUser -Identity "username" -Properties "PasswordLastSet", "PasswordNeverExpires" | Select-Object -Property Name, PasswordLastSet, PasswordNeverExpires, @{Name="PasswordExpires"; Expression={if ($_.PasswordNeverExpires -eq $false) { $_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays) } else {"Never Expires"}}}
Este comando recupera o “PasswordLastSet” (a última vez que a senha foi definida), se a senha está configurada para nunca expirar “PasswordNeverExpires”, e se a senha tem uma expiração, calcula e exibe quando essa data de expiração é.
Comentários
- O cmdlet
Get-ADUser
é usado para recuperar informações do usuário do AD. - O parâmetro
-Identity
especifica o nome de usuário alvo. - Com o parâmetro
-Properties
, você especifica quais atributos deseja recuperar. Por padrão, nem todos os atributos são recuperados. - Use o cmdlet
Select-Object
para escolher as informações que deseja exibir e adicionar propriedades personalizadas.
Exemplo de Script 1: Listando Usuários com Senhas Expiradas
Um script para identificar e listar usuários cujas senhas expiraram entre todos os usuários do Active Directory pode ajudar a verificar a conformidade com as políticas de segurança organizacionais e automatizar tarefas de gestão de contas.
O seguinte script do PowerShell detecta usuários cujas senhas expiraram comparando a data atual e produz uma lista desses usuários.
# Listar usuários expirados
Import-Module ActiveDirectory
$today = (Get-Date)
Get-ADUser -Filter * -Properties PasswordLastSet, PasswordNeverExpires | Where-Object {
$_.PasswordNeverExpires -eq $false -and
($_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays)) -lt $today
} | Select-Object Name, PasswordLastSet, @{Name="PasswordExpires"; Expression={$_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays)}}
Comentários
Import-Module ActiveDirectory
torna os cmdlets relacionados ao Active Directory disponíveis. Esta linha é sempre necessária antes de executar scripts relacionados ao AD.- O cmdlet
Get-Date
é usado para obter a data atual, que serve como base para determinar a expiração da senha. Get-ADUser -Filter *
tem como alvo todos os usuários no Active Directory.- O cmdlet
Where-Object
filtra usuários cujas senhas não são permanentemente válidas e cuja data de definição da senha mais o período máximo válido definido pela política de senha do domínio é anterior à data de hoje. - Use o cmdlet
Select-Object
para selecionar apenas as informações necessárias e adicionar a propriedade personalizadaPasswordExpires
para calcular e exibir a data de expiração da senha.
Este script facilita a gestão de usuários expirados, contribuindo para manter a segurança.
Exemplo de Script 2: E-mails de Notificação Automática Antes da Expiração
Notificar usuários dentro da organização de que sua senha está prestes a expirar pode melhorar a experiência do usuário e reforçar a segurança. O seguinte script do PowerShell detecta usuários cujas senhas expirarão dentro de um número específico de dias e envia automaticamente e-mails de notificação para esses usuários.
# Enviando e-mails de notificação antes da expiração
Import-Module ActiveDirectory
$notificationPeriod = 14 # Número de dias antes de enviar a notificação
$smtpServer = "smtp.example.com" # Endereço do servidor SMTP
$fromEmail = "admin@example.com" # Endereço de e-mail do remetente
$subject = "Sua senha expirará em breve" # Assunto do e-mail
$users = Get-ADUser -Filter * -Properties EmailAddress, PasswordLastSet, PasswordNeverExpires | Where-Object {
$_.PasswordNeverExpires -eq $false -and
($_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays - $notificationPeriod)) -lt (Get-Date)
}
foreach ($user in $users) {
$toEmail = $user.EmailAddress
$body = "Prezado(a) $($user.Name),\n\nSua senha expirará em menos de $notificationPeriod dias. Por favor, altere sua senha o quanto antes.\n\nAtenciosamente,\nSua equipe de TI"
Send-MailMessage -SmtpServer $smtpServer -From $fromEmail -To $toEmail -Subject $subject -Body $body
}
Comentários
- Este script usa a variável
$notificationPeriod
para definir quando começar a notificar os usuários, definido para 14 dias de antecedência neste exemplo. - O cmdlet
Get-ADUser
recupera informações do usuário, incluindo os atributosEmailAddress
,PasswordLastSet
ePasswordNeverExpires
. - O cmdlet
Where-Object
filtra os usuários cuja expiração da senha está se aproximando. - O loop
foreach
é usado para enviar um e-mail para cada usuário relevante usando o cmdletSend-MailMessage
.
Ao executar este script regularmente, os usuários podem tomar medidas apropriadas antes que suas senhas expirem, ajudando a manter a segurança da conta e reduzir o número de tickets de suporte.
Exemplo de Script 3: Desativação Automática de Contas de Usuários Expiradas
Como medida de segurança, desativar automaticamente contas de usuários cujas senhas expiraram pode reduzir o risco de acesso não autorizado. O seguinte script do PowerShell detecta contas de usuário com senhas expiradas e desativa automaticamente essas contas.
# Desativando automaticamente usuários expirados
Import-Module ActiveDirectory
$today = (Get-Date)
$expiredUsers = Get-ADUser -Filter * -Properties PasswordLastSet, PasswordNeverExpires | Where-Object {
$_.PasswordNeverExpires -eq $false -and
($_.PasswordLastSet.AddDays((Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.TotalDays)) -lt $today
}
foreach ($user in $expiredUsers) {
# Desativando a conta do usuário
Disable-ADAccount -Identity $user.SamAccountName
Write-Output "Conta desativada: $($user.Name)"
}
Comentários
Import-Module ActiveDirectory
importa o módulo Active Directory, permitindo o uso de cmdlets relacionados ao AD.- O cmdlet
Get-ADUser
recupera todas as informações do usuário e usaWhere-Object
para filtrar por usuários com senhas expiradas. - Dentro do loop
foreach
, o cmdletDisable-ADAccount
é usado para desativar as contas de usuários cujas senhas expiraram. - O script produz uma saída no console quando uma conta de usuário é desativada.
Este script é particularmente útil para gestão de contas em grandes organizações, automatizando a conformidade com políticas de segurança e reduzindo a carga de trabalho administrativa. Executar o script regularmente garante que contas com senhas expiradas sejam desativadas, aumentando a segurança do sistema.
Considerações de Segurança
Ao automatizar a política de senhas e a gestão de contas de usuário, várias considerações de segurança devem ser mantidas em mente. Preste atenção nos seguintes pontos ao implementar e operar esses scripts.
- Aplicar o Princípio do Menor Privilégio: A conta executando o script deve ser concedida com as permissões mínimas necessárias. Por exemplo, se apenas lendo informações de senha do usuário, permissões somente leitura devem ser atribuídas, e apenas as permissões necessárias para desativar contas devem ser concedidas para essas operações.
- Armazenamento Seguro de Scripts: Uma vez que scripts podem conter informações potencialmente sensíveis ou comandos que alteram o sistema, eles devem ser armazenados de forma segura para proteger contra acesso não autorizado.
- Registro e Monitoramento: Mudanças feitas por scripts devem ser devidamente registradas e monitoradas. Isso permite uma resposta rápida a comportamentos inesperados ou incidentes de segurança.
- Manter Mecanismos de Notificação: Especialmente para scripts que notificam usuários sobre a expiração iminente de senhas ou desativam automaticamente contas, é aconselhável ter mecanismos em lugar para notificar administradores ou usuários quando ações são tomadas.
- Revisão e Atualização Regular: Scripts devem ser regularmente revisados e atualizados conforme necessário, em resposta a mudanças nas políticas organizacionais ou atualizações no ambiente do Active Directory.
Adotando estas considerações de segurança, os processos automatizados facilitados por esses scripts podem operar de forma eficiente enquanto mantêm alinhamento com os padrões de segurança organizacionais.
Conclusão
Usar o PowerShell para verificar e gerenciar a expiração de senhas de contas de usuário do Active Directory é essencial para manter a segurança organizacional. Ao utilizar os scripts introduzidos neste artigo, é possível alcançar monitoramento eficiente das expirações de senha das contas de usuário do AD, notificação antes da expiração e desativação automática de contas baseada em políticas de segurança.
É importante que esses processos automatizados suportem e aprimorem as políticas de segurança da organização. No entanto, a automação deve ser acompanhada pela aplicação do princípio do menor privilégio, armazenamento seguro de scripts, registro e monitoramento apropriados, manutenção de mecanismos de notificação e revisão e atualização regulares, entre outras considerações de segurança.
Em última análise, ao combinar adequadamente estas melhores práticas e scripts de automação, a gestão do ambiente Active Directory pode se tornar mais eficiente e segura.