RD Licensing: Benutzer erhält keine Per-User RDS-CAL

Im Eventlog des Remote Desktop Licensing Servers ist folgende Warnung zu finden:

Log Name: System
Source: Microsoft-Windows-TerminalServices-Licensing
Event ID: 4105
Level: Warning
User: N/A
Computer: <RD-Licensing-Computername>
Description:
The Remote Desktop license server cannot update the license attributes for user <User-Name> in the Active Directory Domain <Domain-Name>. Ensure that the computer acccount for the license server is a member of Terminal Server License Server group in Active Directory domain <Domain-Name>.
If the license server is installed on a domain controller, the Network Service account also needs to be a member of the Terminal Server License Servers group.
If the license server is installed on a domain controller, after you have added the appropriate accounts to the Terminal Server License Server group, you must restart the Terminal Services Licensing service to track or report the usage of RDS Per User CALs.
Win32 error code: 0x80070005

Event ID 4105 tritt in folgenden Fällen auf:

  1. Der RD License Server ist nicht Mitglied der Gruppe Terminal Server License Servers in der Domäne des Benutzers.
  2. Der RD License Server ist auf einem Domain Controller installiert und der Network Service Account ist nicht Mitglied der Gruppe Terminal Server License Servers.
  3. Die Gruppe Terminal Server License Servers hat nicht die Berechtigungen, die Terminal Services Licensing Informationen für das AD-Objekt des Benutzers zu aktualisieren. Dies tritt bei Benutzerkonten auf, die bereits existiert haben, bevor die Domäne auf Functional Level 2003 oder höher migriert wurde. Die Terminal Servier License Servers Gruppe fehlt in diesen Fällen in der Discretionary Access Control List (DACL) des Benutzers oder die Allow-Berechtigungen Read Terminal Server license server und Write Terminal Server license server sind für die Gruppe nicht aktiviert.

Fall 1. und 2. kann gelöst werden, in dem das Computer Objekt des RD Licensing Servers, bzw. das Benutzerobjekt Network Service Account in die Domain Gruppe Terminal Sever License Servers eingetragen wird.

Für Fall 3. muss die DACL der Benutzer im AD angepasst werden. Hierzu kann das Tool dsacls.exe verwendet werden. Wenn nur einzelne Benutzer von dem Problem betroffen sind, reicht es aus, dessen DACL explizit anzupassen. Sind alle Benutzer betroffen, bietet es sich an, die ganze OU der Benutzer zu korrigieren.

Windows Server 2003 Functional Level Schema

User

dsacls "CN=<User-Name>,OU=<User-OU>,DC=<Domain>,DC=<Domain>" /G "BUILTIN\Terminal Server License Servers:WPRP;terminalServer"

OU

dsacls "OU=<User-OU>,DC=<Domain>,DC=<Domain>" /I:S /G "BUILTIN\Terminal Server License Servers:WPRP;terminalServer;user"

Windows Server 2008 (oder höher) Functional Level Schema

User

dsacls "CN=<User-Name>,OU=<User-OU>,DC=<Domain>,DC=<Domain>" /G "BUILTIN\Terminal Server License Servers:WPRP;Terminal Server License Server"

OU

dsacls "OU=<User-OU>,DC=<Domain>,DC=<Domain>" /I:S /G "BUILTIN\Terminal Server License Servers:WPRP;Terminal Server License Server;user"

Ab Windows 2008 lässt sich die DACL auch per PowerShell konfigurieren, allerdings werden hierfür keine Klartext-Bezeichnungen, sondern GUIDs und SIDs verwendet.
In diesem Fall ist das glücklicherweise kein Problem, da die Gruppe Terminal Server License Servers eine AD Standardgruppe ist, inkl. immer gleicher Property-Set-GUID und Well-known SID.

Details dazu siehe hier:
Property-Set-GUID – http://msdn.microsoft.com/en-us/library/cc223204(PROT.10).aspx
Well-Known-SIDs – http://support.microsoft.com/default.aspx?scid=kb;EN-US;243330

Import-Module ActiveDirectory
$OU = "OU=<User-OU>,DC=<Domain>,DC=<Domain>"
ForEach ($user in Get-ADUser -Filter * -SearchBase $OU)
{
  $Path = "AD:/" + $user.DistinguishedName
  $DACL = Get-ACL $User
  $SDDL = $DACL.GetSecurityDescriptorSddlForm([System.Security.AccessControl.AccessControlSections]::Access)
  $SDDL = $SDDL + "(OA;;RPWP;5805bc62-bdc9-4428-a5e2-856a0f4c185e;;S-1-5-32-561)"
  $DACL.SetSecurityDescriptorSddlForm($SDDL)
  Set-ACL -Path $Path $DACL
}

In unserem Skript nutzen wir für die Änderung der Berechtigungen  die SDDL (Security Descriptor Definition Language) Syntax.
SDDL ist hier beschrieben: https://msdn.microsoft.com/en-us/library/aa374928(VS.85).aspx

Die SDDL Syntax sieht demnach wie folgt aus:
ace_type;ace_flags;rights;object_guid_inherit_object_guid;account_sid

Das entspricht in unserem Beispiel:
ace_type  =  OA  (ACCESS_ALLOWED_OBJECT_ACE_TYPE)
ace_flags  =  nicht verwendet
rights  =  RPWP  (RP = ADS_RIGHT_DS_READ_PROP, WP = ADS_RIGHT_DS_WRITE_PROP)
object_guid  =  5805bc62-bdc9-4428-a5e2-856a0f4c185e  (Property-Set-GUID der Terminal Server License Servers Gruppe)
inherit_object_guid  =  nicht verwendet
account_sid  =  S-1-5-32-561  (Well-known SID der Terminal Server License Servers Gruppe)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.