Поделиться через


Приложения, использующие NetUserGetInfo и аналогичные API, используют доступ на чтение к определенным объектам AD.

В этой статье рассматривается проблема, из-за которой приложения, использующие API нижнего уровня класса NetUser или NetGroup, например NetUserGetInfo или NetGroupGetInfo сбой с ошибкой ACCESS DENIED.

Исходный номер базы знаний: 2281774

Итоги

У вас есть приложение, использующее API нижнего уровня класса NetUser или NetGroup, например NetUserGetInfo, , NetUserEnumNetUserSetInfo, NetGroupSetInfoNetGroupEnumNetLocalGroupGetInfoNetGroupGetInfoNetLocalGroupSetInfoи .NetLocalGroupEnum В этой схеме API класса NetUser также используются для управления учетной записью компьютера.

Те же API используются при вызове поставщика ADSI WINNT.

Эти API могут завершиться ошибкой с ПОМОЩЬЮ ACCESS DENIED, хотя у учетной записи вызова есть достаточные разрешения для целевых учетных записей. Причиной этого является то, что реализация API на стороне клиента не имеет связи 1:1 с API RPC диспетчера учетных записей безопасности (SAM). Клиентская сторона выполняет дополнительные проверки и подготовку этих вызовов, требующих дополнительных разрешений в Active Directory.

Одно приложение, использующее эти API, — это служба кластера, а в журнале службы кластера вы увидите следующее:

00000a78.000021b8::2010/06/15-00:00:47.911 WARN [RES] Network Name <cluster-resource1>: не удалось определить, отключен ли кластер-ресурс учетной записи компьютера. состояние 5

Другим признаком этого эффекта может быть чрезмерная запись аудита в журнале событий безопасности для этих вызовов API и объектов, приведенных ниже, если включен аудит доступа к вызову или сбою доступа к учетной записи вызова.

Дополнительная информация

Реализация API использует несколько вызовов RPC, направленных на контроллер домена, для настройки сеанса и проверки домена. Он обращается к следующим объектам с доступом на чтение:

  • Корневой объект домена: он ищет основной домен контроллера домена и открывает домен для чтения, который, в свою очередь, открывает объект AD для домена, например DC=contoso,dc=com.

  • Встроенный контейнер: это корневой объект встроенного домена. Он открыт, как вызывающий хочет проверить его существование. Таким образом вызывающий объект должен иметь доступ на чтение к контейнеру CN=Builtin,DC=contoso,dc=com.

  • Объект сервера SAM: этот объект сохраняет общие разрешения для общего доступа к учетной записи SAM и перечисления. Он будет использоваться только для определенных вызовов. Имя объекта — cn=server,cn=system,DC=contoso,dc=com.

В большинстве доменов Active Directory разрешения для этих объектов предоставляются на основе членства в универсальных группах, таких как прошедшие проверку подлинности, все или группа доступа, совместимая с Windows 2000. Изменение триггера проблемы, возможно, было, что пользователь был удален из последней группы (возможно, вместе с всеми, и /или разрешения для перечисленных объектов были удалены в переходе для защиты разрешений Active Directory.

Подходы к устранению проблемы — предоставить необходимые разрешения на чтение или изменить приложение на использование LDAP вместо старых API или поставщика ADSI WINNT. LDAP не будет касаться указанных выше объектов, и он также будет поддерживать детализированные разрешения, которые вы могли задать в целевом объекте.

Чрезмерное аудит

Если вы включили аудит этих объектов, вы увидите до трех записей аудита для объектов выше для открытия и закрытия объектов, а также фактического доступа к целевому объекту. Если события регистрируются чрезмерно, рекомендуется удалить записи в списке ACL аудита, чтобы эти универсальные типы доступа больше не регистрировались. Проблема заключается в том, что корневой объект домена и встроенный контейнер наследуются многим подчиненным объектам.

Чтобы решить эту проблему, необходимо разбить наследование на встроенном контейнере и переопределить acEs, наследуемые только к этому объекту. Кроме того, необходимо коснуться acES в корневом объекте домена, чтобы проблемы SACEs больше не применялись к корневому объекту домена. Точные шаги зависят от фактических параметров SACL, которые применяются в вашей среде.