Configurare la scadenza delle password con PowerShell

Punti chiave

  • I criteri per configurare la scadenza delle password sono fondamentali per migliorare la sicurezza informatica attraverso l’implementazione di pratiche informatiche corrette.
  • Lo script PowerShell  fornito regola in modo efficiente la durata massima della validità delle password per i computer di dominio o non di dominio.
  • Lo script per configurare la scadenza delle password richiede PowerShell versione 5.1 e la funzione RSAT per Active Directory.
  • A seconda dei parametri forniti, lo script modifica il criterio predefinito della password di dominio di Active Directory o il criterio del computer locale.
  • Gli script PowerShell applicati ad attività IT offrono maggiore scalabilità ed efficienza rispetto agli strumenti tradizionali basati su GUI.
  • Esegui sempre il backup delle configurazioni, informa gli utenti delle modifiche e verifica gli effetti delle modifiche ai criteri.
  • Bilanciare la frequenza di modifica delle password è fondamentale per evitare potenziali insidie per la sicurezza.
  • NinjaOne, utilizzato insieme a script come questo per configurare la scadenza delle password, aiuta i professionisti dell’IT a gestire ambienti digitali complessi in modo semplice e senza necessità di interruzioni.

Con il continuo aumento delle minacce informatiche, una gestione efficiente dei criteri per le password non è mai stata così importante nel mondo IT. Una corretta gestione delle password non solo assicura una solida difesa contro potenziali violazioni, ma promuove anche l’implementazione di abitudini informatiche corrette tra gli utenti. Uno di questi criteri essenziali riguarda la possibilità di configurare la scadenza delle password. Oggi analizzeremo uno script PowerShell che consente di modificare la durata massima della validità delle password e che stabilisce la loro scadenza per i computer di dominio o non di dominio.

Background

Lo script per configurare la scadenza delle password mira a semplificare il processo di modifica dei criteri di scadenza delle password. Con la crescita e l’evoluzione degli ambienti IT, la necessità di metodi centralizzati, efficienti e scalabili per gestire le credenziali degli utenti diventa fondamentale. I professionisti IT e i Managed Service Provider (MSP) si trovano spesso a dover operare tra vari sistemi, differenti criteri e requisiti degli utenti. Con PowerShell, un potente framework per l’automazione delle attività, la configurazione di un aspetto vitale come la scadenza delle password su diversi sistemi diventa più semplice.

Lo script per configurare la scadenza delle password

#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
    }
}

 

Accedi a oltre 700 script nel Dojo di NinjaOne

Ottieni l’accesso

Analisi dettagliata

Entriamo nel vivo del funzionamento dello script per configurare la scadenza delle password:

  • Prerequisiti: Lo script per configurare la scadenza delle password richiede PowerShell versione 5.1 e la funzione Remote Server Administration Tools (RSAT) per Active Directory.
  • Parametri: Si possono impostare due parametri principali: MaxPasswordAge, che definisce il numero massimo di giorni prima della scadenza della password, e Domain, che specifica il dominio per il quale è necessario impostare il criterio della password.
  • Funzioni: Lo script per configurare la scadenza delle password include funzioni di aiuto come Test-IsElevated per verificare se lo script è in esecuzione con diritti di amministratore e Get-LocalPasswordPolicy per recuperare il criterio di password corrente del computer locale.
  • Flusso di esecuzione: A seconda che sia stato fornito un dominio o meno, lo script imposta il criterio della password di dominio predefinito di Active Directory o il criterio della password del computer locale.

Casi d’uso potenziali

Caso di studio: Immagina un MSP che supervisiona le operazioni IT di un’azienda con una forza lavoro in crescita. Le nuove normative sulla sicurezza informatica richiedono che tutte le password dei dipendenti scadano e vengano rinnovate ogni 60 giorni. Utilizzando lo script fornito, l’MSP può regolare in modo efficiente la massima durata di validità delle password per tutti i computer del dominio, garantendo la conformità senza dover gestire manualmente ogni sistema.

Confronti

Tradizionalmente, la configurazione dei criteri delle password, soprattutto nelle reti più grandi, richiedeva la navigazione attraverso strumenti basati su GUI come la Group Policy Management Console. Pur essendo efficaci, questi metodi potrebbero non essere scalabili in modo efficiente. Utilizzando PowerShell, i professionisti IT possono applicare rapidamente le modifiche a più sistemi, garantendo coerenza e risparmiando tempo.

Domande frequenti

  • Posso utilizzare questo script per configurare la scadenza delle password su qualsiasi computer Windows? 
    Lo script per configurare la scadenza delle password è progettato per Windows 10, Windows Server 2016 e versioni successive.
  • Cosa succede se non fornisco un valore di MaxPasswordAge? 
    La scadenza della password sarà impostata su “illimitata”, disattivando in sostanza la scadenza.

Implicazioni

L’impostazione dei criteri di scadenza delle password è un’arma a doppio taglio. Se da un lato le modifiche frequenti possono aumentare la sicurezza limitando il tempo di validità di una password compromessa, dall’altro potrebbero incoraggiare gli utenti a scegliere password più semplici o ad annotarle, riducendo la sicurezza complessiva. Questo script per configurare la scadenza delle password aiuta i team IT a trovare il giusto equilibrio e ad applicarlo in modo coerente all’intera infrastruttura.

Raccomandazioni

  • Esegui sempre il backup delle configurazioni attuali prima di apportare modifiche.
  • È consigliabile informare gli utenti delle imminenti modifiche dei criteri delle password.
  • Monitora e verifica gli effetti delle modifiche ai criteri delle password per essere certo che non vi siano conseguenze indesiderate.

Considerazioni finali

Con l’evoluzione delle minacce informatiche, strumenti come NinjaOne forniscono soluzioni preziose ai professionisti IT, consentendo loro di prepararsi in anticipo rispetto alle potenziali sfide. Grazie anche all’integrazione di script come quello descritto per configurare la scadenza delle password, NinjaOne offre una piattaforma completa in grado di rispondere a diverse esigenze di gestione IT, dalla configurazione dei criteri delle password a quelle più complesse di sistema. Con la continua trasformazione del panorama digitale, disporre di strumenti in grado rendere i team IT più efficaci sarà fondamentale per garantire efficienza operativa e sicurezza.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Ti potrebbe interessare anche

Guarda una demo×
×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.