Anwendungen, die NetUserGetInfo und ähnliche APIs verwenden, basieren auf Lesezugriff auf bestimmte AD-Objekte
In diesem Artikel wird ein Problem erläutert, bei dem Anwendungen, die apIs der NetUser- oder NetGroup-Klasse verwenden, wie NetUserGetInfo
oder NetGroupGetInfo
mit dem ACCESS DENIED-Fehler fehlschlägt.
Ursprüngliche KB-Nummer: 2281774
Übersicht
Sie verfügen über eine Anwendung, die die apIs der NetUser- oder NetGroup-Klasse wie NetUserGetInfo
, , NetUserSetInfo
, NetUserEnum
, NetGroupGetInfo
NetGroupSetInfo
NetGroupEnum
, , NetLocalGroupGetInfo
und NetLocalGroupSetInfo
NetLocalGroupEnum
. In diesem Schema werden die NetUser-Klassen-APIs auch zum Verwalten des Computerkontos verwendet.
Die gleichen APIs werden verwendet, wenn Sie den ADSI WINNT-Anbieter aufrufen.
Diese APIs können mit ACCESS VERWEIGERT fehlschlagen, obwohl das aufrufende Konto über ausreichende Berechtigungen für die Zielkonten verfügt. Der Grund dafür ist, dass die clientseitige API-Implementierung keine 1:1-Beziehung mit SAM-RPC-APIs (Security Account Manager) hat. Die Clientseite führt zusätzliche Überprüfungen und Vorbereitungen für diese Aufrufe durch, die zusätzliche Berechtigungen in Active Directory erfordern.
Eine Anwendung, die diese APIs verwendet, ist der Clusterdienst, und im Clusterdienstprotokoll wird Folgendes angezeigt:
00000a78.000021b8::2010/06/15-00:00:47.911 WARN [RES] Netzwerkname <Clusterressource1>: Konnte nicht ermitteln, ob computerkonto cluster-resource1 bereits deaktiviert ist. Status 5
Ein weiteres Symptom dieses Effekts kann übermäßige Überwachungsdatensätze im Security Eventlog Ihrer DCs für diese API-Aufrufe und die unten aufgeführten Objekte sein, wenn die Überwachung des Erfolgreichen oder Fehlerzugriffs für das aufrufende Konto aktiviert ist.
Weitere Informationen
Die Implementierung der APIs verwendet mehrere RPC-Aufrufe, die an den Domänencontroller geleitet werden, um die Sitzung einzurichten und die Domäne zu überprüfen. Er greift auf die folgenden Objekte mit Lesezugriff zu:
Domain Root Object: It looks up the primary domain of the Domain Controller and opens the domain for reading, which in turn opens the AD object for the domain, like DC=contoso,dc=com.
Integrierter Container: Dies ist das Stammobjekt der integrierten Domäne. Er wird geöffnet, da der Anrufer sein Vorhandensein überprüfen möchte. Daher benötigt der Aufrufer Lesezugriff auf den Container CN=Builtin,DC=contoso,dc=com.
SAM-Serverobjekt: Dieses Objekt speichert allgemeine Berechtigungen für den allgemeinen SAM-Kontozugriff und die Enumeration. Sie wird nur für bestimmte Anrufe verwendet. Der Objektname lautet cn=server,cn=system,DC=contoso,dc=com.
In den meisten Active Directory-Domänen werden Berechtigungen für diese Objekte basierend auf der Mitgliedschaft in generischen Gruppen wie authentifizierten Benutzern, Jeder oder der Gruppe "Pre-Windows 2000 Compatible Access" gewährt. Die Änderung zum Auslösen des Problems war möglicherweise, dass der Benutzer aus der letzten Gruppe entfernt wurde (möglicherweise zusammen mit "Jeder" und/oder die Berechtigungen für die aufgelisteten Objekte wurden in einer Verschiebung entfernt, um die Active Directory-Berechtigungen zu erhärten.
Die Ansätze zum Beheben des Problems sind entweder das Erteilen der erforderlichen Leseberechtigungen oder das Ändern der Anwendung zur Verwendung von LDAP anstelle der älteren APIs oder des ADSI WINNT-Anbieters. LDAP berührt die oben genannten Objekte nicht und unterstützt auch die granularen Berechtigungen, die Sie möglicherweise für das Zielobjekt festgelegt haben.
Übermäßige Überwachung
Wenn Sie die Überwachung für diese Objekte aktiviert haben, werden bis zu drei Überwachungsdatensätze für die oben genannten Objekte angezeigt, um die Objekte sowohl zu öffnen als auch zu schließen, sowie den tatsächlichen Zielobjektzugriff. Wenn die Ereignisse übermäßig protokolliert werden, ist es sinnvoll, die Einträge in der Überwachungs-ACL zu entfernen, damit diese generischen Zugriffstypen nicht mehr protokolliert werden. Das Problem besteht darin, dass das Domain Root-Objekt und der Builtin-Container an viele untergeordnete Objekte erben.
Um dies zu lösen, müssen Sie die Vererbung im integrierten Container unterbrechen und die ACEs neu definieren, die nur für dieses Objekt gelten. Sie müssen auch die ACEs im Domain Root-Objekt berühren, damit das Problem SACEs nicht mehr auf das Domänenstammobjekt angewendet wird. Die genauen Schritte hängen von den tatsächlichen SACL-Einstellungen ab, die in Ihrer Umgebung wirksam sind.