Benutzername lokaler Admins ändern für LAPS
Hallo zusammen,
wir haben seit geraumer Zeit verschiedene Benutzernamen für die lokalen Adminkonten auf unseren Clients im Einsatz.
Zur Absicherung nutzen wir erfolgreich LAPS. Jedoch kann ich nur einen Benutzernamen in der LAPS Policy angeben.
Microsoft hat anscheinend die GPOs zum ersetzen und erstellen lokaler Adminkonten eingeschränkt, da man dort Passwörter im Klartext übermittelte mit dem CPassword Attribut übermittelte.
Nun zur Frage, habt ihr eine Möglichkeit gefunden zentralisiert alle Namen der local Admins zu standardisieren ohne die Rechner manuell alle anpacken zu müssen?
Gibt es eine Möglichkeit dies mit PowerShell zu realisieren?
Aktuell sehen wir nur ca 1/3 der lokalen Passwörter mit LAPS wegen dieser Einschränkung.
Meine Idee wäre sonst RemotePowershell:
Enter-PSSession PCXXX
Rename-LocalUser -Name "XXX" -NewName "XXX"
Allerdings müsste der erste String eindeutig sein. Wir haben jedoch unterschiedliche Namen. Also nur durch ausprobieren und nicht bei allen Rechnern gleichzeitig möglich?
wir haben seit geraumer Zeit verschiedene Benutzernamen für die lokalen Adminkonten auf unseren Clients im Einsatz.
Zur Absicherung nutzen wir erfolgreich LAPS. Jedoch kann ich nur einen Benutzernamen in der LAPS Policy angeben.
Microsoft hat anscheinend die GPOs zum ersetzen und erstellen lokaler Adminkonten eingeschränkt, da man dort Passwörter im Klartext übermittelte mit dem CPassword Attribut übermittelte.
Nun zur Frage, habt ihr eine Möglichkeit gefunden zentralisiert alle Namen der local Admins zu standardisieren ohne die Rechner manuell alle anpacken zu müssen?
Gibt es eine Möglichkeit dies mit PowerShell zu realisieren?
Aktuell sehen wir nur ca 1/3 der lokalen Passwörter mit LAPS wegen dieser Einschränkung.
Meine Idee wäre sonst RemotePowershell:
Enter-PSSession PCXXX
Rename-LocalUser -Name "XXX" -NewName "XXX"
Allerdings müsste der erste String eindeutig sein. Wir haben jedoch unterschiedliche Namen. Also nur durch ausprobieren und nicht bei allen Rechnern gleichzeitig möglich?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 5227776222
Url: https://administrator.de/contentid/5227776222
Ausgedruckt am: 25.11.2024 um 01:11 Uhr
11 Kommentare
Neuester Kommentar
Hmm
Meines Wissens geht auch die Nachforschung (mittels Powershell AD Abfrage) ob der Benutzer Admin Rechte hat.
Oder zB der Weg den Ich gelesen habe:
https://devblogs.microsoft.com/powershell-community/is-a-user-a-local-ad ...
[..]
The Microsoft.PowerShell.LocalAccounts module
In PowerShell 7 for Windows, you can use the Microsoft.PowerShell.LocalAccounts module to manage local users and group. This module is a Windows PowerShell module which PowerShell 7 loads from C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.LocalAccounts.
As you can tell, these cmdlets allow you to add, remove, change, enable and disable a local user or local group And they allow you to add, remove and get the local group’s members. These cmdlets are broadly similar to the ActiveDirectory cmdlets, but work on local users. And as noted above, you can use domain users/groups as a member of a local group should you wish or need to.
You use the Get-LocalGroupMember command to view the members of a local group [..]
Meines Wissens geht auch die Nachforschung (mittels Powershell AD Abfrage) ob der Benutzer Admin Rechte hat.
Oder zB der Weg den Ich gelesen habe:
https://devblogs.microsoft.com/powershell-community/is-a-user-a-local-ad ...
[..]
The Microsoft.PowerShell.LocalAccounts module
In PowerShell 7 for Windows, you can use the Microsoft.PowerShell.LocalAccounts module to manage local users and group. This module is a Windows PowerShell module which PowerShell 7 loads from C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.LocalAccounts.
As you can tell, these cmdlets allow you to add, remove, change, enable and disable a local user or local group And they allow you to add, remove and get the local group’s members. These cmdlets are broadly similar to the ActiveDirectory cmdlets, but work on local users. And as noted above, you can use domain users/groups as a member of a local group should you wish or need to.
You use the Get-LocalGroupMember command to view the members of a local group [..]
Moin,
Hier die Lösung per PS. Das kannst Du eine Weile als Start-Skript laufen lassen, bis es alle Stationen haben. Mit LAPS wird dann das Standardpasswort im Skript geändert (einmal täglich).
(nicht getestet)
hth
Erik
Zitat von @crypt0r:
Enter-PSSession PCXXX
Rename-LocalUser -Name "XXX" -NewName "XXX"
Allerdings müsste der erste String eindeutig sein. Wir haben jedoch unterschiedliche Namen. Also nur durch ausprobieren und nicht bei allen Rechnern gleichzeitig möglich?
Rename-LocalUser -Name "XXX" -NewName "XXX"
Allerdings müsste der erste String eindeutig sein. Wir haben jedoch unterschiedliche Namen. Also nur durch ausprobieren und nicht bei allen Rechnern gleichzeitig möglich?
Hier die Lösung per PS. Das kannst Du eine Weile als Start-Skript laufen lassen, bis es alle Stationen haben. Mit LAPS wird dann das Standardpasswort im Skript geändert (einmal täglich).
Get-LocalGroupMember -Group Administratoren | ?{$_.ObjectClass -eq "Benutzer"} | ?{$_.Name -ne "$env:computername\admin"} | %{Disable-LocalUser -SID $_.SID}
if(-not $(get-localuser admin)) {
$UserPassword = convertto-securestring -string "kennwort" -asplaintext -force
New-LocalUser -name "admin"
Set-LocalUser -Name admin -Password $UserPassword
Add-LocalGroupMember -Group "Administratoren" -Member "admin"
}
hth
Erik
Zitat von @DerWoWusste:
Um Gottes Willen. Das Kennwort lesbar für alle im Startskript? Bitte alles nur das nicht.
Um Gottes Willen. Das Kennwort lesbar für alle im Startskript? Bitte alles nur das nicht.
Lesen.
Mit LAPS wird dann das Standardpasswort im Skript geändert (einmal täglich).
Ansonsten hast Du ja recht.
<edit>Man könnte am Ende des Skripts auch noch ein
Reset-AdmPwdPassword
absetzen, sofern man das Modul auf alle Maschinen verteilt hat.
</edit>
Erik, du tust das leichtfertig ab. Es wäre per Skript ein Leichtes, das Kennwort bei allen unterschiedlich per Zufallsgenerator zu setzen und sich somit keine Sorgen machen zu müssen.
Bei allen Clients ein KW gleich zu setzen, es im Skript zugänglich für alle zu haben und dann ist es auch noch das Adminkennwort... das ist nun außerordentlich leichtsinnig, selbst wenn man plant, es noch am selben Tag oder (wie Du zuletzt schreibst) im selben Skript schon zu ändern. Das riskiert man einfach nicht.
Startskripte werden von internen Angreifern, die nicht ganz dumm sind, regelmäßig auf solche Konfigurationsfehler hin untersucht - es gibt sehr viele Admins, die auf ähnliche Weise schon böse Eigentore geschossen haben.
Bei allen Clients ein KW gleich zu setzen, es im Skript zugänglich für alle zu haben und dann ist es auch noch das Adminkennwort... das ist nun außerordentlich leichtsinnig, selbst wenn man plant, es noch am selben Tag oder (wie Du zuletzt schreibst) im selben Skript schon zu ändern. Das riskiert man einfach nicht.
Startskripte werden von internen Angreifern, die nicht ganz dumm sind, regelmäßig auf solche Konfigurationsfehler hin untersucht - es gibt sehr viele Admins, die auf ähnliche Weise schon böse Eigentore geschossen haben.
Moin,
Das ist eine gute Idee. Danke. Du hast ja recht.
Liebe Grüße
Erik
Zitat von @DerWoWusste:
Erik, du tust das leichtfertig ab. Es wäre per Skript ein Leichtes, das Kennwort bei allen unterschiedlich per Zufallsgenerator zu setzen und sich somit keine Sorgen machen zu müssen.
Erik, du tust das leichtfertig ab. Es wäre per Skript ein Leichtes, das Kennwort bei allen unterschiedlich per Zufallsgenerator zu setzen und sich somit keine Sorgen machen zu müssen.
Das ist eine gute Idee. Danke. Du hast ja recht.
Liebe Grüße
Erik
Moin,
da ich das als Funktion habe, hier das Skript mit zufälligem Passwort:
Liebe Grüße
Erik
da ich das als Funktion habe, hier das Skript mit zufälligem Passwort:
function get-randomstring {
PARAM (
[int]$chars = 16
)
<#
.Synopsis
Function to get a random string to be used in the profile.
.Description
The function creates a random string which contains only chars of the german keyboard. That for there is the array $arr_char which can be changed to a list of chars of other languages. Just delete the german umlaute and ß at the end of the array and insert others like ñ.
.Parameter chars
The length of the random string.
.Example
get-randomstring 10
This will create a random string of the length of 10 chars. The output would be like this: KG*4öM?uäu
#>
#$obj_randompass = new-object System.Random
$arr_char = @("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","!","`"","§","$","%","&","/","(",")","=","?","+","*","#","-",",","<",">","Ä","Ö","Ü","ä","ö","ü","ß")
$str_random = ""
$i=1
while($i-le $chars) {
$str_random = $str_random + $(get-random -inputobject $arr_char)
$i++
}
return $str_random
}
$password = get-randomstring 32
Get-LocalGroupMember -Group Administratoren | ?{$_.ObjectClass -eq "Benutzer"} | ?{$_.Name -ne "$env:computername\admin"} | %{Disable-LocalUser -SID $_.SID}
if(-not $(get-localuser admin)) {
$UserPassword = convertto-securestring -string $password -asplaintext -force
New-LocalUser -name "admin"
Set-LocalUser -Name admin -Password $UserPassword
Add-LocalGroupMember -Group "Administratoren" -Member "admin"
}
Liebe Grüße
Erik