Содержание статьи

Для администраторов LDAP важно уметь быстро получать список учетных записей из каталога без обращения к графическим панелям. Командные инструменты ldapsearch, ldapwhoami и вспомогательные утилиты OpenLDAP позволяют вывести нужные записи, фильтровать их по атрибутам и проверять корректность настроек доступа.
В практике ежедневно используются фильтры по атрибутам uid, cn, ou и objectClass. Например, запрос с фильтром «(objectClass=person)» возвращает только пользовательские записи, а указание базового DN вида dc=example,dc=com дает четкие границы поиска. Такие операции помогают проверять наполнение каталога после массовых изменений или импорта данных.
Проверка соединения с LDAP с помощью ldapwhoami
Команда ldapwhoami возвращает DN, под которым выполняется bind, что позволяет определить доступность сервера и корректность учетных данных. Запрос без аутентификации помогает проверить базовое соединение:
ldapwhoami -H ldap://ldap.example.com
Для проверки привязки под конкретным DN выполняется простой bind с паролем:
ldapwhoami -H ldap://ldap.example.com -D "cn=admin,dc=example,dc=com" -W
При использовании защищенного канала применяется LDAPS или StartTLS. LDAPS задается так:
ldapwhoami -H ldaps://ldap.example.com -D "cn=admin,dc=example,dc=com" -W
Для StartTLS необходимо добавить -ZZ:
ldapwhoami -H ldap://ldap.example.com -ZZ -D "cn=admin,dc=example,dc=com" -W
Ответ вида dn:cn=admin,dc=example,dc=com подтверждает успешный bind. Сообщения Invalid credentials или Can't contact LDAP server указывают на ошибочный пароль, некорректный DN или сетевую недоступность. Для анализа цепочки запросов используется параметр -d 1, позволяющий увидеть детали процесса аутентификации.
Получение списка пользователей с использованием ldapsearch

Пример запроса к ветке ou=People,dc=example,dc=com:
ldapsearch -x -LLL -H ldaps://ldap.example.com -D «cn=admin,dc=example,dc=com» -W -b «ou=People,dc=example,dc=com» «(objectClass=posixAccount)» uid cn mail
Если в каталоге используется Active Directory, подходящий фильтр – (objectCategory=person) в сочетании с (objectClass=user). Пример:
ldapsearch -x -LLL -H ldap://ad.example.com -D «administrator@example.com» -W -b «dc=example,dc=com» «(&(objectCategory=person)(objectClass=user))» sAMAccountName displayName mail
При работе с большим числом записей полезно добавить контроль размера выдачи с помощью параметра -E pr=200/noprompt, который позволяет постранично получать данные от сервера. Это снижает риск прерывания запроса при больших объемах каталога.
Для диагностики структуры каталога рекомендуется предварительно выполнить запрос только с атрибутом dn, чтобы убедиться в корректности базового DN и фильтра. Это помогает избежать неверных результатов и уменьшает время на подбор параметров.
Фильтрация результатов поиска по атрибутам uid и cn
Поиск по uid и cn позволяет получать точные совпадения без выборки лишних объектов. Команда ldapsearch поддерживает формат RFC-4515, поэтому фильтры можно комбинировать и уточнять.
Для выборки пользователя по точному совпадению uid:
- Пример запроса:
ldapsearch -x -LLL -b "dc=example,dc=com" "(uid=j.smirnov)" cn mail uidNumber - Фильтр возвращает одну запись при условии, что uid уникален в каталоге.
Для поиска по cn с частичным совпадением используется подстановочный символ *:
ldapsearch -x -LLL -b "dc=example,dc=com" "(cn=Иван*)" uid cn sn- Запрос удобен при анализе групповых структур или неполной информации о пользователе.
Для уменьшения количества нерелевантных объектов фильтры комбинируются оператором AND:
ldapsearch -x -LLL -b "dc=example,dc=com" "(&(uid=i.petrov)(cn=Иван Петров))" dn uid cn- Такой вызов исключает совпадения с одинаковым cn, но другим uid.
Для ускорения выборки рекомендуется:
- указывать минимальный набор атрибутов – это снижает нагрузку на контроллер домена;
- использовать правильный base DN: запрос на уровне
ou=People,dc=example,dc=comвозвращает результат быстрее, чем поиск по корню каталога; - проверять индексацию uid и cn в конфигурации сервера, так как отсутствие индексов замедляет фильтрацию.
Просмотр атрибутов конкретного пользователя по DN

Для выборочного получения атрибутов одного пользователя применяется запрос ldapsearch с указанием полного DN. Такой подход исключает побочные результаты и ускоряет обработку на сервере.
Базовая команда выглядит так:
ldapsearch -x -LLL -H ldap://localhost \
-D "cn=admin,dc=example,dc=com" -w secret \
-b "uid=user1,ou=people,dc=example,dc=com"
Параметры запроса:
-b– DN конкретного объекта, напримерuid=user1,ou=people,dc=example,dc=com.-x– простая аутентификация.-H– URL LDAP-сервера.
Если требуется вывести только выбранные поля, указываются атрибуты после DN:
ldapsearch -x -LLL -H ldap://localhost \
-D "cn=admin,dc=example,dc=com" -w secret \
-b "uid=user1,ou=people,dc=example,dc=com" \
uid cn mail loginShell
Для диагностики полезно проверять наличие обязательных полей. Например, отсутствие uidNumber или gidNumber часто указывает на некорректную запись POSIX-профиля. Проверка выполняется через фильтр:
ldapsearch -x -LLL -H ldap://localhost \
-D "cn=admin,dc=example,dc=com" -w secret \
-b "uid=user1,ou=people,dc=example,dc=com" \
"(!(uidNumber=*))"
Для ускорения работы на больших каталогах рекомендуется использовать LDAPS или StartTLS, чтобы сервер мог применять оптимизации без отключения шифрования. Также важно запрашивать только необходимые атрибуты, чтобы уменьшить нагрузку на канал и сервер.
ldapsearch -x -LLL -D "cn=admin,dc=example,dc=com" -W -b "dc=example,dc=com" "(uid=jdoe)" cn mail
Результат будет содержать только значения cn и mail для пользователя jdoe, без лишней информации.
Если необходимо получить несколько пользователей с минимальными данными, достаточно добавить фильтр поиска и указать нужные атрибуты. Например:
ldapsearch -x -LLL -b "dc=example,dc=com" "(objectClass=person)" uid cn
Использование фильтров по группе для выборки участников

Для выборки пользователей по группам в LDAP применяется параметр фильтрации в формате ldapsearch. Фильтр задаётся через атрибут, который связывает пользователя с группой, например, memberOf или uniqueMember.
Пример команды для выборки всех участников группы «Developers»:
ldapsearch -x -LLL -b "dc=example,dc=com" "(&(objectClass=person)(memberOf=cn=Developers,ou=Groups,dc=example,dc=com))" cn mail
В данном примере:
-x– простой аутентифицированный доступ без SASL;-b– базовый DN для поиска;
Для поиска участников нескольких групп используют логический оператор OR:
ldapsearch -x -LLL -b "dc=example,dc=com" "(&(objectClass=person)(|(memberOf=cn=Developers,ou=Groups,dc=example,dc=com)(memberOf=cn=Designers,ou=Groups,dc=example,dc=com)))" cn mail
При сложных структурах LDAP можно применять фильтры по nested groups, но для этого необходимо учитывать схему атрибутов группы и использовать рекурсивный поиск или специализированные утилиты.
Аутентификация при запросах с помощью параметра -x

Параметр -x в утилите ldapsearch указывает использование простого метода аутентификации (Simple Bind) вместо SASL. Это позволяет выполнять запросы к LDAP-серверу с минимальной конфигурацией, используя логин и пароль.
Простейший пример запроса с аутентификацией:
ldapsearch -x -D "cn=admin,dc=example,dc=com" -W -b "dc=example,dc=com" "(objectClass=person)"
Где:
| Параметр | Назначение |
|---|---|
| -x | Простая аутентификация (Simple Bind) |
| -D «cn=admin,dc=example,dc=com» | DN пользователя, под которым выполняется запрос |
| -W | Запрос пароля у пользователя при выполнении команды |
| -b «dc=example,dc=com» | Базовый DN для поиска |
| «(objectClass=person)» | Фильтр LDAP для выборки объектов |
Для автоматизации запросов можно использовать параметр -w для передачи пароля напрямую, однако это снижает безопасность:
ldapsearch -x -D "cn=admin,dc=example,dc=com" -w "пароль" -b "dc=example,dc=com" "(uid=jdoe)"
Рекомендации при использовании -x:
| Совет | Описание |
|---|---|
| Использовать защищённое соединение | Применять -ZZ для StartTLS или ldaps:// для шифрования |
| Минимизировать права пользователя | Аутентифицироваться под учетной записью с минимальными необходимыми правами для поиска |
| Избегать передачи пароля в командной строке | Использовать -W вместо -w для повышения безопасности |
| Проверять DN и фильтр | Убедиться, что DN и фильтры точно соответствуют целевой выборке, чтобы избежать избыточных запросов |
Проверка структуры каталога через поиск по базовому DN

Для анализа структуры LDAP рекомендуется начинать с поиска по базовому DN (Distinguished Name). Это позволяет увидеть верхний уровень иерархии и определить организационные единицы, подкаталоги и группы.
Пример запроса с использованием ldapsearch:
ldapsearch -x -b "dc=example,dc=com" "(objectClass=*)" dn
Параметр -x обеспечивает простую аутентификацию без SASL, -b задаёт базовый DN для поиска, а фильтр (objectClass=*) возвращает все объекты под указанным DN.
Для ограничения выдачи по типу объектов можно использовать конкретные objectClass, например:
ldapsearch -x -b "dc=example,dc=com" "(objectClass=organizationalUnit)" dn
Этот запрос покажет только организационные единицы, что позволяет быстро оценить структуру каталога.
Если необходимо получить подробную информацию о каждом уровне, можно добавить атрибуты, такие как ou, cn, description:
ldapsearch -x -b "dc=example,dc=com" "(objectClass=organizationalUnit)" ou cn description
Регулярная проверка структуры по базовому DN помогает поддерживать каталог в актуальном состоянии, выявлять лишние или неиспользуемые элементы и упрощает дальнейший поиск пользователей и групп.
Вопрос-ответ:
Как получить полный список пользователей в LDAP с помощью ldapsearch?
Для получения списка всех пользователей в LDAP можно использовать команду ldapsearch с указанием базового DN и фильтра, который выбирает объекты типа «user» или «posixAccount». Пример команды: ldapsearch -x -b "dc=example,dc=com" "(objectClass=posixAccount)". Параметр -x обеспечивает простую аутентификацию, а -b задаёт точку начала поиска. В выводе будут перечислены все найденные записи с полями, доступными в каталоге.
Можно ли просматривать конкретные атрибуты пользователя, а не всю запись?
Да, с помощью ldapsearch можно ограничить вывод только нужными атрибутами. Для этого после фильтра поиска указываются имена атрибутов. Например, команда ldapsearch -x -b "dc=example,dc=com" "(uid=jdoe)" cn mail вернёт только полное имя и адрес электронной почты пользователя jdoe, без остальных полей. Это удобно для быстрого получения конкретной информации без лишнего шума в выводе.
Как проверить, правильно ли настроено соединение с LDAP?
Для проверки соединения и авторизации можно использовать утилиту ldapwhoami. Простая команда ldapwhoami -x -H ldap://ldap.example.com возвращает идентификатор пользователя, под которым выполняется подключение. Если соединение не установлено, инструмент выдаст сообщение об ошибке. Этот метод помогает убедиться, что сервер доступен и учётные данные действительны.
Каким образом можно фильтровать пользователей по группам?
Фильтрация по группам выполняется с помощью поиска по атрибуту, который хранит членов группы, например memberOf. Команда может выглядеть так: ldapsearch -x -b "dc=example,dc=com" "(memberOf=cn=admins,ou=groups,dc=example,dc=com)". Она вернёт всех пользователей, которые состоят в группе «admins». Такой подход удобен для выборки сотрудников по отделам или ролям без просмотра всего каталога.
Что делает параметр -LLL и когда его стоит использовать?
Параметр -LLL отключает вывод служебной информации, такой как dn и комментарии LDAP, оставляя только запрошенные атрибуты. Это делает вывод более чистым и подходит для сценариев, где данные нужно передать в скрипт или сохранить в файл для обработки. Например: ldapsearch -x -LLL -b "dc=example,dc=com" "(uid=jdoe)" cn mail покажет только cn и mail без лишних строк.
