Configurar la caducidad de las contraseñas con PowerShell

Configurar la caducidad de las contraseñas: puntos clave

  • Las políticas de caducidad de contraseñas son fundamentales para mejorar la seguridad informática y promover una buena ciberhigiene.
  • El script PowerShell que analizaremos hoy sirve para configurar la caducidad de las contraseñas en equipos con o sin dominio.
  • El script requiere la versión 5.1 de PowerShell y la función RSAT para Active Directory.
  • Dependiendo de los parámetros proporcionados, el script modifica la política de contraseñas de dominio predeterminada de Active Directory o la política del equipo local.
  • Los scripts de PowerShell ofrecen escalabilidad y eficacia en comparación con las herramientas tradicionales basadas en GUI para tareas de TI.
  • Haz siempre copias de seguridad de las configuraciones, informa a los usuarios de los cambios y audita los efectos de las modificaciones de las políticas.
  • Equilibrar la frecuencia de los cambios de contraseña es vital para evitar posibles problemas de seguridad.
  • NinjaOne, con scripts como estos, ayuda a los profesionales de TI a gestionar entornos digitales complejos sin problemas.

Con el continuo aumento de las ciberamenazas, la gestión eficaz de las políticas de contraseñas nunca ha sido tan crítica en el mundo de las TI. Una gestión adecuada de las contraseñas no sólo garantiza una sólida defensa frente a posibles infracciones, sino que también fomenta una buena ciberhigiene entre los usuarios. Una de estas políticas esenciales es la configurar la caducidad de las contraseñas. Hoy hablaremos de un script de PowerShell que permite cambiar la antigüedad máxima de una contraseña, que dicta el plazo de caducidad para equipos con dominio o sin él.

Antecedentes

El script proporcionado pretende agilizar el proceso de configurar la caducidad de las contraseñas. A medida que los entornos informáticos crecen y evolucionan, la necesidad de métodos centralizados, eficientes y escalables para gestionar las credenciales de los usuarios se convierte en algo primordial. Los profesionales de TI y los proveedores de servicios gestionados (MSP) se encuentran a menudo haciendo malabarismos con diversos sistemas, políticas y requisitos de los usuarios. Con PowerShell, un potente marco de automatización de tareas, ajustar algo tan vital como la caducidad de contraseñas en varios sistemas se convierte en algo factible.

El script para configurar la caducidad de las contraseñas

#Requires -Version 5.1

<#
.SYNOPSIS
    Changes the Maximum Password Age(Expiry) for the domain or a non-domain computer.
.DESCRIPTION
    Changes the Maximum Password Age(Expiry) for the domain or a non-domain computer.
.EXAMPLE
     -MaxPasswordAge 90
    Set MaximumPasswordAge on the computer this script runs on to 90 days.
.EXAMPLE
     No param needed
    Disables MaximumPasswordAge on the computer this script runs on.
.EXAMPLE
     -MaxPasswordAge 90 -Domain "test.consto.com"
    Enables MaximumPasswordAge in Active Directory for the Default Domain Password Policy to 90 days.
.EXAMPLE
    PS C:> .Set-Password-Complexity.ps1 -MaxPasswordAge 90 -Domain "test.consto.com"
    Enables MaximumPasswordAge in Active Directory for the Default Domain Password Policy to 90 days.
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    The RSAT feature for Active Directory needs to be installed on the computer this runs on.
    Release Notes:
    Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
.COMPONENT
    ManageUsers
#>

[CmdletBinding()]
param (
    [Parameter(Mandatory = $false)]
    [int]
    $MaxPasswordAge,
    [Parameter(Mandatory = $false)]
    [String]
    $Domain
)

function Test-IsElevated {
    $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
    $p = New-Object System.Security.Principal.WindowsPrincipal($id)
    if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
    { Write-Output $true }
    else
    { Write-Output $false }
}
function Get-LocalPasswordPolicy {
    param ()
    $Result = [PSCustomObject]@{
        MinimumLength = 0
        MaximumAge    = 0
        MinimumAge    = 0
    }
    $(net.exe accounts) -split "n" | ForEach-Object {
        $Line = $_ -split ":"
        if ($_ -like "Minimum password length*") {
            $Result.MinimumLength = "$($Line[1])".Trim(' ')
        }
        if ($_ -like "Maximum password age (days)*") {
            $Result.MaximumAge = "$($Line[1])".Trim(' ')
        }
        if ($_ -like "Minimum password age (days)*") {
            $Result.MinimumAge = "$($Line[1])".Trim(' ')
        }
    }
    $Result
}

if (-not (Test-IsElevated)) {
    Write-Error -Message "Access Denied. Please run with Administrator privileges."
    exit 1
}
$NetExeError = $false

$MaxAge = ""
if ($PSBoundParameters.ContainsKey("MaxPasswordAge")) {
    $MaxAge = $MaxPasswordAge
}
else {
    # If $MaxPasswordAge isn't used or is set to 0.
    $MaxAge = 0
}
if ($Domain -and [string]::IsNullOrEmpty($Domain) -and [string]::IsNullOrWhiteSpace($Domain)) {
    # Active Directory
    # Check if the ActiveDirectory module is installed
    if ((Get-Module -Name ActiveDirectory -ListAvailable -ErrorAction SilentlyContinue)) {
        try {
            # Try to import the ActiveDirectory module
            Import-Module -Name ActiveDirectory
        }
        catch {
            Write-Error -Message "Ninja Agent could not access AD, either RSAT was not installed or that the agent does not have permissions to add and remove users from groups."
            exit 5 # Access Denied exit code
        }
        # Set MaxPasswordAge to what was passed into $MaxPasswordAge
        Set-ADDefaultDomainPasswordPolicy -Identity $Domain -MaxPasswordAge $([TimeSpan]"$MaxPasswordAge.00:00:00") -Confirm:$false
        # Sleep a little while, just in case Get-ADDefaultDomainPasswordPolicy connect to a different AD server and replication is slow
        Start-Sleep -Seconds 60
        # Check if the MaxPasswordAge policy was applied correctly
        $Results = Get-ADDefaultDomainPasswordPolicy -Identity $Domain
        # Check that the policy matches what was requested
        if ($Results -and $Results.MaxPasswordAge.Days -eq $MaxPasswordAge) {
            exit 0
        }
        else {
            # The policy was not set for some reason
            exit 1
        }
    }
    else {
        Write-Error -Message "Ninja Agent could not access AD, RSAT was not installed."
        Write-Output "RSAT install documentation: https://docs.microsoft.com/en-us/troubleshoot/windows-server/system-management-components/remote-server-administration-tools"
        Write-Output "Windows Server install command: Install-WindowsFeature RSAT"
        Write-Output "Windows 10/11 install command: Add-WindowsCapability -Name RSAT* -Online"
        exit 5 # Access Denied exit code
    }
}
else {
    # Get Current localhost password policy settings
    $CurrentSettings = Get-LocalPasswordPolicy
    Write-Host "Changing Maximum Password Age from $($CurrentSettings.MaximumAge) to $MaxAge"
    if ($MaxAge -ge 1 -and $MaxAge -is [int]) {
        net.exe accounts /maxpwage:$MaxAge
    }
    else {
        net.exe accounts /maxpwage:unlimited
    }

    # Get New localhost password policy settings and check if anything changed
    $NewSettings = Get-LocalPasswordPolicy
    
    if ($MaxAge -notlike $(if ($NewSettings.MaximumAge -like "unlimited") { 0 }else { $NewSettings.MaximumAge })) {
        $NetExeError = $true
        Write-Host "Maximum Age was not set correctly."
    }
    if ($NetExeError) {
        exit 1
    }
}

 

Accede a más de 300 scripts en el Dojo de NinjaOne

Obtén acceso

Análisis detallado del script para configurar la caducidad de las contraseñas

Veamos en detalle cómo funciona el script:

  • Requisitos previos: el script requiere la versión 5.1 PowerShell y la función Herramientas de administración remota de servidores (RSAT) para Active Directory.
  • Parámetros: se pueden pasar dos parámetros principales: MaxPasswordAge, que define el número máximo de días antes de que caduque la contraseña, y Domain, que especifica el dominio para el que se debe ajustar la política de contraseñas.
  • Funciones: el script incluye funciones de ayuda como Test-IsElevated para comprobar si el script se está ejecutando con derechos de administrador y Get-LocalPasswordPolicy para recuperar la política de contraseñas actual del equipo local.
  • Flujo de ejecución: dependiendo de si se proporciona un dominio, el script ajusta la política de contraseñas de dominio predeterminada de Active Directory o la política de contraseñas del equipo local.

Posibles casos de uso

Estudio de caso: Imagina a un MSP encargado de supervisar las operaciones de TI de una empresa con una plantilla en crecimiento. Las nuevas normas de ciberseguridad exigen que todas las contraseñas de los empleados caduquen y se renueven cada 60 días. Utilizando el script proporcionado para configurar la caducidad de las contraseñas, el MSP puede ajustar eficazmente la antigüedad máxima de la contraseña para todos los equipos del dominio, garantizando el cumplimiento sin necesidad de manejar manualmente cada sistema.

Comparaciones

Tradicionalmente, el ajuste de las políticas de contraseñas, especialmente en redes grandes, requería navegar a través de herramientas basadas en GUI como la Consola de Administración de Políticas de Grupo. Aunque eficaces, estos métodos pueden no ser eficaces a gran escala. Con el enfoque PowerShell, los profesionales de TI pueden aplicar los cambios rápidamente en varios sistemas, garantizando la coherencia y ahorrando tiempo.

FAQ

  • ¿Puedo utilizar este script en cualquier ordenador con Windows? 
    El script está diseñado para Windows 10, Windows Server 2016 y versiones posteriores.
  • ¿Qué ocurre si no introduzco el valor MaxPasswordAge? 
    La caducidad de la contraseña se establecerá en «ilimitada», esencialmente desactivando la caducidad.

Implicaciones

Establecer políticas adecuadas de caducidad de contraseñas es un arma de doble filo. Aunque los cambios frecuentes pueden mejorar la seguridad al limitar el tiempo de validez de una contraseña comprometida, también podrían animar a los usuarios a optar por contraseñas más sencillas o a anotarlas, lo que reduciría la seguridad general. Este script para configurar la caducidad de las contraseñas ayuda a los equipos de TI a encontrar el equilibrio adecuado y aplicarlo de forma coherente en toda su infraestructura.

Recomendaciones

  • Haz siempre una copia de seguridad de las configuraciones actuales antes de realizar cambios.
  • Es aconsejable informar a los usuarios de los cambios inminentes en las políticas de contraseñas.
  • Supervisa y audita los efectos de los cambios en la política de contraseñas para garantizar que no se produzcan consecuencias no deseadas.

Reflexiones finales

A medida que evolucionan las ciberamenazas, herramientas como NinjaOne proporcionan soluciones inestimables a los profesionales de TI, permitiéndoles adelantarse a los posibles retos. Mediante la integración de scripts como el que hemos analizado, destinado a configurar la caducidad de las contraseñas , NinjaOne ofrece una plataforma completa que puede abordar diversas necesidades de gestión de TI, desde ajustes de la política de contraseñas hasta configuraciones más intrincadas del sistema. Con un panorama digital en plena transformación, contar con herramientas que capaciten a los equipos de TI será crucial para garantizar la eficacia operativa y la seguridad.

Próximos pasos

La creación de un equipo de TI próspero y eficaz requiere contar con una solución centralizada que se convierta en tu principal herramienta de prestación de servicios. NinjaOne permite a los equipos de TI supervisar, gestionar, proteger y dar soporte a todos sus dispositivos, estén donde estén, sin necesidad de complejas infraestructuras locales.

Obtén más información sobre NinjaOne Endpoint Management, echa un vistazo a un tour en vivoo tu prueba gratuita de la plataforma NinjaOne.

Quizá también te interese…

Ver demo×
×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón «Acepto» que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona «tal cual» y «según disponibilidad», sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).