Почему компьютерные аккаунты в Active Directory имеют objectClass:user?
При работе с Active Directory (AD) вы можете заметить, что компьютерные учетные записи отображаются с классом объектов user. Такое поведение может вызвать вопросы, ведь компьютеры и пользователи — разные сущности. Рассмотрим, почему так происходит и как правильно фильтровать записи в LDAP-запросах.
LDAP-запрос к Active Directory для получения пользователей
Пример LDAP-запроса, который позволяет получить объекты с классом user в домене "itdrde.local":
bash
ldapsearch -H ldap://$ad_ip:389 -x -D $ad_user -w $ad_password -b "DC=itdrde,DC=local" \
-s sub -a always -z 1000 "(objectClass=user)" "serviceClassName" "serviceDNSName" "objectClass"
Результатом этого запроса становятся учетные записи пользователей и компьютеров с атрибутом objectClass:user.
Почему компьютеры имеют objectClass:user?
Компьютерные аккаунты в Active Directory ведут себя очень похоже на учетные записи пользователей:
- У них есть пароли и ключи Kerberos, как у обычных пользователей.
- Им присвоены уникальные идентификаторы безопасности (SID).
- Они могут быть членами групп и иметь права доступа, назначаемые в списках контроля доступа (ACL).
Класс объекта computer на самом деле является потомком класса user. Исторически это связано с обратной совместимостью с предыдущими технологиями Windows NT. В доменах Windows NT (NetBIOS) компьютерные учетные записи представлялись как специальные типы пользователей — "workstation trust accounts". В Active Directory это наследие сохранилось и определяется через атрибут userAccountControl.
Атрибут userAccountControl и фильтрация по типу аккаунта
Для разграничения пользователей и компьютеров в LDAP можно использовать фильтрацию по флагам в атрибуте userAccountControl. Основные значения:
512(NORMAL_ACCOUNT) — обычные пользователи.4096(WORKSTATION_TRUST_ACCOUNT) — аккаунты рабочих станций (компьютеров).8192(SERVER_TRUST_ACCOUNT) — контроллеры домена.
Пример фильтра для выбора только обычных пользователей:
ldap
(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=512))
Для выбора компьютерных аккаунтов можно использовать фильтр с флагом 4096.
Особенности фильтрации с использованием objectCategory
Иногда предлагается использовать фильтр по атрибуту objectCategory=person для выбора пользователей, но это не всегда точно. Например, междоменные доверительные аккаунты тоже могут попадать под этот фильтр.
Поэтому наилучший способ точно разделить пользователей и компьютеры — фильтрация по userAccountControl.
Заключение
Ответ на вопрос, почему в Active Directory компьютерные объекты имеют класс user, кроется в исторической совместимости и архитектуре AD. Они по сути являются специализированными учетными записями пользователей с уникальным типом, который определяется через атрибуты, а не через отдельный класс. Для точного разделения объектов рекомендуется использовать фильтры по атрибуту userAccountControl.
Ключевые слова для SEO: Active Directory, LDAP-запрос, objectClass user, userAccountControl, компьютерные аккаунты, фильтрация LDAP, учетные записи пользователей, компьютер в AD, LDAP фильтры, Windows NT, WORKSTATION_TRUST_ACCOUNT.



