Почему в Active Directory компьютеры имеют класс объекта "user"?
При работе с Active Directory (AD) часто возникает вопрос: почему компьютерные учетные записи имеют такой же objectClass:user, как и обычные пользователи? Разберёмся, что стоит за этим явлением и как отличить именно пользовательские учетные записи от компьютерных.
Пример LDAP-запроса для получения учетных записей пользователей и компьютеров
Для начала посмотрим на пример LDAP-запроса к AD, который возвращает все объекты с классом 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"
Результатом запроса становятся как учетные записи пользователей (например, Administrator, Guest), так и учетные записи компьютеров (например, computer1, computer2). Все они содержат атрибут objectClass:user.
Почему компьютеры считаются "пользователями"?
Основная причина в том, что в Active Directory класс computer является подклассом user. Это значит, что компьютерные учетные записи наследуют свойства пользовательских учетных записей:
- Имеют пароли и ключи Kerberos для аутентификации,
- Имеют SID — уникальный идентификатор безопасности,
- Могут состоять в группах безопасности, как и обычные пользователи.
Исторически компьютеры были "особым типом пользователей" ещё в эпоху доменов WinNT и NetBIOS, где для них существовала специальная метка — "workstation trust account". При переходе на Active Directory архитекторы системы сохранили эту логику для обратной совместимости.
Таким образом, компьютеры — это, по сути, специальные учетные записи пользователей с дополнительными признаками.
Как отличить компьютерные учетные записи от пользовательских?
Для фильтрации только обычных пользователей в LDAP-запросах можно использовать следующий фильтр по атрибуту userAccountControl:
ldap
(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=512))
Значение 512 соответствует флагу NORMAL_ACCOUNT, который указывает на обычные пользовательские аккаунты.
Для компьютеров используются другие значения:
WORKSTATION_TRUST_ACCOUNT(4096) — для учетных записей рабочих станций,SERVER_TRUST_ACCOUNT(8192) — для контроллеров домена.
Таким образом, анализ значения userAccountControl позволит точно разделять компьютеры и пользователей.
Почему нельзя просто использовать фильтр по objectCategory=person?
В некоторых случаях рекомендуют использовать фильтр (objectCategory=person) для поиска пользователей, но этот метод менее точный. Например, в AD могут существовать междоменные учётные записи доверия (inter-domain trust accounts), которые тоже имеют objectCategory=person.
Поэтому лучше полагаться на userAccountControl для более корректного разделения объектов.
Заключение
В Active Directory компьютерные учетные записи являются наследниками класса user, что объясняется историей развития систем Windows и необходимостью обеспечить обратную совместимость с доменами WinNT. Чтобы корректно работать с пользователями и компьютерами, важно использовать фильтры на основе userAccountControl, а не только на основе objectClass или objectCategory.
Это знание поможет системным администраторам создавать более точные LDAP-запросы, избегать путаницы и лучше управлять учетными записями в AD.
Ключевые слова для SEO
Active Directory, LDAP запрос, objectClass user, учетные записи компьютеров в AD, userAccountControl, NORMAL_ACCOUNT, WORKSTATION_TRUST_ACCOUNT, LDAP фильтр для пользователей, отличие компьютеров и пользователей в AD, управление учетными записями в Active Directory.



