Почему компьютерные аккаунты в 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.