Wichtigste Erkenntnisse
- Richtlinien zum Ablauf von Passwörtern sind entscheidend für die Verbesserung der IT-Sicherheit und die Förderung einer guten Cyber-Hygiene.
- Das mitgelieferte PowerShell-Skript passt das maximale Kennwortalter für Domänen- oder Nicht-Domänencomputer effizient an.
- Das Skript erfordert PowerShell Version 5.1 und die RSAT-Funktion für Active Directory.
- Je nach den angegebenen Parametern ändert das Skript die Active Directory-Standarddomänenkennwortrichtlinie oder die Richtlinie des lokalen Computers.
- PowerShell-Skripts bieten im Vergleich zu herkömmlichen GUI-basierten Tools für IT-Aufgaben Skalierbarkeit und Effizienz.
- Sichern Sie stets die Konfigurationen, informieren Sie die Benutzer:innen über Änderungen und überprüfen Sie die Auswirkungen von Richtlinienänderungen.
- Ein ausgewogenes Verhältnis zwischen der Häufigkeit der Passwortänderungen ist wichtig, um potenzielle Sicherheitslücken zu vermeiden.
- NinjaOne hilft IT-Experten mit Skripten wie diesen, komplexe digitale Umgebungen nahtlos zu verwalten.
Mit der ständigen Zunahme von Cyber-Bedrohungen war die effiziente Verwaltung von Passwortrichtlinien in der IT-Welt noch nie so wichtig wie heute. Eine ordnungsgemäße Passwortverwaltung gewährleistet nicht nur eine solide Verteidigung gegen potenzielle Verstöße, sondern fördert auch eine gute Cyberhygiene unter den Benutzer:innen. Eine dieser wichtigen Richtlinien ist die Konfiguration des Ablaufs von Kennwörtern. Heute werden wir ein PowerShell-Skript besprechen, mit dem Sie das maximale Kennwortalter ändern können, das den Ablaufzeitraum für Domänen- oder Nichtdomänencomputer vorgibt.
Hintergrund
Das bereitgestellte Skript zielt darauf ab, den Prozess der Änderung von Richtlinien zum Ablauf von Kennwörtern zu rationalisieren. Da IT-Umgebungen wachsen und sich weiterentwickeln, wird der Bedarf an zentralen, effizienten und skalierbaren Methoden zur Verwaltung von Benutzeranmeldeinformationen immer größer. IT-Experten und Managed Service Provider (MSPs ) müssen oft mit verschiedenen Systemen, Richtlinien und Benutzeranforderungen jonglieren. Mit PowerShell, einem leistungsstarken Framework zur Aufgabenautomatisierung, ist es möglich, etwas so Wichtiges wie den Ablauf von Kennwörtern über mehrere Systeme hinweg anzupassen.
Das Skript
#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 } }
Zugriff auf über 300 Skripte im NinjaOne Dojo
Detailansicht
Schauen wir uns die Funktionsweise des Skripts im Detail an:
- Voraussetzungen: Das Skript erfordert PowerShell Version 5.1 und die Funktion Remote Server Administration Tools (RSAT) für Active Directory.
- Parameter: Es können zwei Hauptparameter übergeben werden: MaxPasswordAge, der die maximale Anzahl von Tagen angibt, bevor das Kennwort abläuft, und Domain, der die Domain angibt, für die die Kennwortrichtlinie angepasst werden muss.
- Funktionen: Das Skript enthält Hilfsfunktionen wie Test-IsElevated, um zu prüfen, ob das Skript mit Administratorrechten ausgeführt wird, und Get-LocalPasswordPolicy, um die aktuelle Kennwortrichtlinie des lokalen Computers abzurufen.
- Ausführungsablauf: Je nachdem, ob eine Domäne angegeben wird, passt das Skript die Active Directory-Standarddomänenkennwortrichtlinie oder die Kennwortrichtlinie des lokalen Computers an.
Potenzielle Anwendungsfälle
Fallstudie: Stellen Sie sich einen MSP vor, der den IT-Betrieb für ein Unternehmen mit einer wachsenden Belegschaft überwacht. Neue Cybersicherheitsvorschriften verlangen, dass alle Mitarbeiterpasswörter ablaufen und alle 60 Tage erneuert werden müssen. Mithilfe des mitgelieferten Skripts kann der MSP das maximale Kennwortalter für alle Computer in der Domäne effizient anpassen und so die Einhaltung der Vorschriften sicherstellen, ohne jedes System manuell bearbeiten zu müssen.
Vergleiche
Traditionell erforderte die Anpassung von Kennwortrichtlinien, insbesondere in größeren Netzwerken, die Navigation durch GUI-basierte Tools wie die Group Policy Management Console. Diese Methoden sind zwar wirksam, lassen sich aber möglicherweise nicht effizient skalieren. Mit dem PowerShell-Ansatz können IT-Experten Änderungen schnell auf mehrere Systeme anwenden und so Konsistenz und Zeitersparnis gewährleisten.
FAQs
- Kann ich dieses Skript auf jedem Windows-Computer verwenden?
Das Skript ist für Windows 10, Windows Server 2016 und nachfolgende Versionen konzipiert.
- Was passiert, wenn ich keinen MaxPasswordAge-Wert angebe?
Die Gültigkeitsdauer des Kennworts wird auf “unbegrenzt” gesetzt, wodurch die Gültigkeitsdauer im Wesentlichen deaktiviert wird.
Auswirkungen
Das Festlegen der richtigen Passwortablaufrichtlinien ist ein zweischneidiges Schwert. Häufige Änderungen können zwar die Sicherheit erhöhen, indem sie die Gültigkeitsdauer eines kompromittierten Kennworts begrenzen, aber sie können auch dazu führen, dass die Benutzer:innen einfachere Kennwörter wählen oder sie notieren, was die Sicherheit insgesamt verringert. Dieses Skript hilft IT-Teams, das richtige Gleichgewicht zu finden und es in ihrer gesamten Infrastruktur konsequent anzuwenden.
Empfehlungen
- Sichern Sie immer die aktuellen Konfigurationen, bevor Sie Änderungen vornehmen.
- Es ist ratsam, die Benutzer:innen über bevorstehende Änderungen der Passwortrichtlinien zu informieren.
- Überwachung und Prüfung der Auswirkungen von Änderungen der Kennwortrichtlinien, um sicherzustellen, dass keine unbeabsichtigten Folgen eintreten.
Abschließende Überlegungen
Da sich Cyber-Bedrohungen ständig weiterentwickeln, bieten Tools wie NinjaOne IT-Experten unschätzbare Lösungen, mit denen sie potenziellen Herausforderungen immer einen Schritt voraus sein können. Durch die Integration von Skripten wie dem hier beschriebenen bietet NinjaOne eine umfassende Plattform, die verschiedene IT-Management-Anforderungen erfüllen kann, von der Anpassung von Passwortrichtlinien bis hin zu komplexeren Systemkonfigurationen. Da sich die digitale Landschaft weiter wandelt, sind Tools, die IT-Teams unterstützen, entscheidend für die Gewährleistung von Betriebseffizienz und Sicherheit.