Почему в 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.