Microsoft Azure AD Connect Sync Fehler „permission-issue“ mit „Connected data source error code: 5“

Wir hatten einen spannenden AADConnect (Entra ID Connect) Fehler zu suchen. Manche Microsoft 365 Gruppen wurden nicht (mehr) korrekt in das lokale AD zurückgeschrieben. Der Fehler lautete, natürlich ohne weitere Details, „Zugriff verweigert“ (permission-issue). Der Hinweis der „Connected data source error code: 5“ ist zwar ein Indiz, aber keine Lösung.

Lösung

Was die Ursache dazu war, ist nicht bekannt. Aber es sind die AD-Berechtigungen für das Synchronisationskonto auf den betroffenen Objekten. In diesem Fall „Generisches Lesen/Schreiben“ von allen Attributen einer Objekttypgruppe (und von deren Unterobjekten).

Auf dem AADConnect-Server in einer PowerShell (als Administrator) ist der Fehler schnell behoben:

# AAD Connect PS-Modul importieren
Import-Module "C:\Program Files\Microsoft Azure Active Directory Connect\AdSyncConfig\AdSyncConfig.psm1"

# Sync-Account-Namen besorgen
Get-ADSyncADConnectorAccount
# (den "ADConnectorAccountName" kopieren)

# Berechtigungen schreiben
Set-ADSyncUnifiedGroupWritebackPermissions -ADConnectorAccountName "<ADConnectorAccountName>" -ADConnectorAccountDomain EXAMPLE.LOCAL

Beispiel:

Set-ADSyncUnifiedGroupWritebackPermissions -ADConnectorAccountName "MSOL_1111aaaa1111" -ADConnectorAccountDomain mydomain.local

FSLogix automatisch aktualisieren (FSLogix autp Update) [UPDATE]

Update: Im FSLogix-Paket haben sich Pfade geändert, die unnötige Fehlermeldung zu Beginn ist entfernt und die Pfade sind angepasst.

Leider ist FSLogix nicht in Windows-Update(s) enthalten. Der Admin einer RDS-Farm muss also selbstständig für seine Updates sorgen.

Da es aber in der Tat häufiger mal Updates für FSLogix gibt (Siehe Hotfix-Liste), die beispielsweise Fehler mit der Microsoft Office 365 Aktivierung beheben, lohnt es sich diese auch wirklich zu installieren. Man kann das Setup in derselben Version auch mehrfach ausführen, es wird nur installiert, wenn wirklich etwas Neues dabei ist.

Der Vorgang ist prinzipiell einfach: Neue Version herunterladen, ZIP-Datei auspacken, App-Installer ausführen und Server neu starten. Wäre das nicht toll, wenn das auch automatisch geht?

Lösung

Bei dem letzten Einsatz, der das Problem „Leeres Microsoft 365 Anmeldefenster“ behebt, ist ein PowerShell Script das selbiges tut entstanden. Einsatz auf eigene Gefahr ☺️

# Update FSLogix to "latest"
# B.Stromberg@data-systems.de
#
# Achtung: BOOTET bei Erfolg den Server neu, ohne Rueckfrage!

# Aktuelle FSLogix-Version liegt hier
$FslogixUrl= "https://aka.ms/fslogix_download"

# Download landet hier
if ( Test-Path "C:\Windows\Temp\fslogix\install" ) { Remove-Item "C:\Windows\Temp\fslogix\install" -Force -Recurse }
mkdir "C:\Windows\Temp\fslogix\install" -Force | Out-Null
Write-Host "Download von" $FslogixUrl "... (180Mbyte)"
# Ausblenden der ProgressBar macht den Download 5x schneller
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri $FslogixUrl -OutFile "C:\Windows\Temp\fslogix\install\FSLogixAppsSetup.zip" -UseBasicParsing

# Auspacken
Write-Host "Auspacken von C:\Windows\Temp\fslogix\install\FSLogixAppsSetup.zip ..."
Expand-Archive -LiteralPath "C:\Windows\Temp\fslogix\install\FSLogixAppsSetup.zip" -DestinationPath "C:\Windows\Temp\fslogix\install" -Force -Verbose
Set-Location "C:\Windows\Temp\fslogix\install\x64\release"

# Installieren + Neustart
Start-Process "FSLogixAppsSetup.exe" -ArgumentList "/install /quiet" -Wait -Passthru

Kennwortänderung für alle Benutzer in Microsoft 365 erzwingen

Free digital security background“/ CC0 1.0

Das Erzwingen einer „selbstständigen“ Kennwortänderung kommt schon mal vor – vor allem, wenn ein Admin mit viel Wissen ein Unternehmen verlässt. Das ist in Microsoft 365 im GUI leider nicht möglich, aber natürlich an der PowerShell.

So zwingt man einen (oder mehrere) Benutzer, das eigene Kennwort bei der nächsten Anmeldung zu ändern – ohne das Kennwort zu kennen.

Lösung

Nach dem Obligatorischen Connect-MsolService:

Set-MsolUserPassword -UserPrincipalName user@EXAMPLE.COM -ForceChangePasswordOnly $true -ForceChangePassword $true

Das lässt sich nun weiterverarbeiten.

Zum Beispiel, um alle Microsoft 365 Benutzer „auf einmal“ zu zwingen, ihr Kennwort zu ändern:

Get-MsolUser -All | Set-MsolUserPassword -ForceChangePasswordOnly $true -ForceChangePassword $true

So filtert man (zum Beispiel) eine Gruppe von Benutzern und erzwingt die Änderung:

Get-MsolUser -All | ? { $_.Country -eq "Hessen"} | Set-MsolUserPassword -ForceChangePasswordOnly $true -ForceChangePassword $true

Wichtig: Man muss sowohl den Parameter ForceChangePassword als auch ForceChangePasswordOnly setzen. Wenn man ForceChangePasswordOnly überspringt, wird nur ein neues Kennwort für den Benutzer (automatisch) generiert und man muss selbiges manuell verteilen (Stichwort „Initialkennwort“).

Ältere HP-Switches (ProCurve) „Unable to negotiate with <DEVICE> port 22: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1“

Ältere HP Switches oder andere embedded-Systeme sprechen schon mal kein aktuelles SSH und aus Sicherheitsgründen lehnt der Default SSH-Client die Verbindung ab. Es gibt eine ganze Menge Key-Exchange-Methoden, die mittlerweile veraltet sind oder als unsicher gelten.

Der entscheidende Teil ist dabei der Letzte, der Angibt, welche Verfahren der Server anbietet:

Unable to negotiate with SWITCH.EXAMPLE.COM port 22: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1

Denn man muss seinem SSH-Client nur noch beibringen, dass dieser das für diese Verbindung akzeptieren soll.

Lösung

SSH versteht mit dem Parameter -o die „optionalen“ Verfahren für die Verbindung:

ssh -o KexAlgorithms=diffe-hellman-group14-sha1 administrator@SWITCH.EXAMPLE.COM

Je nach Switch (=SSH-Server) einfach das passende Verfahren benennen, fertig.

Passiert das häufiger, also verbindet man sich öfter mit diesem Gerät, kann (sollte) man die passende Konfiguration in seine ~/.ssh/config eintragen:

Host SWITCH.EXAMPLE.COM
    Ciphers 3des-cbc
    KexAlgorithms +diffie-hellman-group14-sha1
    User administrator

PowerShell „FIND: Parameterformat falsch“

Alte Admins tippen auch an der PowerShell gerne mal das gute alte find anstelle von select-string. Obwohl das Parameterformat nahzu idetisch ist, wird man alte Angewohnheiten ja nicht so schnell los ☺️

Allerdings beschwert sich die PowerShell über die ungewohnten Anführungszeichen:

PS C:\> arp -a | find /i "00"
FIND: Parameterformat falsch

Lösung

Die „korrekte“ PowerShell-Variante nutzt nur select-string oder die Kurzform sls.

Das ist auch gar nicht so schlecht, denn selbiges beherrscht unter anderen auch regex und Simple Pattern Matching. Es ist aber auch die gute alte Form möglich, die nur zusätzlich mit dem Apostoph escaped werden muss:

# Die ausgeschriebene Form
arp -a | Select-String -Pattern "00"

# Verkürzte Form
arp -a | sls "00"

# Wie-von-Batch-gewohnt Form
arp -a | find /i '"00"'