ldapsearch
— утилита для поиска информации в LDAP. Синтаксис:
ldapsearch <параметры> <фильтр> <атрибуты>
ldapsearch
открывает соединение с сервером LDAP, подключается к нему и выполняет поиск с помощью фильтра.
ldapsearch
найдет одну или несколько записей, то значения указанных атрибутов этих записей будут переданы в стандартный поток вывода. Если в этом списке указан знак *, возвращаются все пользовательские атрибуты. Если в этом списке указан знак +, возвращаются все операционные атрибуты. Если атрибуты не указаны, то возвращаются все пользовательские атрибуты.
-L
.
Таблица 6.30. Параметры команды ldapsearch
Параметр
|
Описание
|
---|---|
Параметры поиска
|
|
-a {never|always|search|find}
|
Задает способ преобразования псевдонимов. Может принимать значения: never (по умолчанию), always, search или find, указывающие, соответственно, что псевдонимы не преобразуются, преобразуются всегда, преобразуются при поиске, либо преобразуются только при определении базового объекта для поиска
|
-A
|
Получить только атрибуты (без значений)
|
-b basedn
|
Позволяет переопределить заданную по умолчанию начальную точку поиска
|
-c
|
Режим продолжения операции (не останавливать поиск при ошибках)
|
-E [!]ext[=extparam]
|
Указывает расширения поиска. Знак '!' обозначает критичность расширения.
Общие расширения:
|
-f file
|
Считать серию строк из файла
file и выполнить по одному поиску LDAP для каждой строки. В этом случае заданный в командной строке фильтр filter интерпретируется как шаблон, в котором первое и только первое вхождение %s заменяется строкой из файла file . Любые другие вхождения символа % в шаблоне будут рассматриваться как ошибка. Если требуется, чтобы в поисковом фильтре присутствовал символ %, он должен быть закодирован как \25 (смотрите RFC 4515). Если в качестве значения file указан символ «-», то строки считываются со стандартного ввода.
|
-F prefix
|
URL-префикс для временных файлов (по умолчанию: file://path, где
path либо /tmp/.private/<user> , либо значение, указанное в параметре -T )
|
-l limit
|
Ограничение на время поиска (в секундах). Значение 0 (ноль) или none означает, что ограничений нет. Значение max означает максимальное допустимое протоколом значение (целое число)
|
-L[LL]
|
Управление выводом результатов поиска в формате обмена данными LDAP (LDAP Data Interchange Format):
-L — вывести ответы в формате LDIFv1, -LL — отключить вывод комментариев, -LLL — отключить вывод версии LDIF.
|
-M[M]
|
Включить элемент управления Manage DSA IT.
-MM делает этот элемент управления критичным.
|
-P {2|3}
|
Версия протокола LDAP (по умолчанию 3)
|
-s {base|one|sub|children}
|
Задает область поиска. Может принимать одно из следующих значений: base, one, sub (по умолчанию) или children, что означает поиск только по базовому объекту, на одном уровне, по всему поддереву и по дочерним записям соответственно
|
-S attr
|
Отсортировать возвращаемые записи по атрибуту
attr . По умолчанию возвращаемые записи не сортируются. Если в качестве attr задана строка нулевой длины (""), записи сортируются по компонентам их уникального имени Distinguished Name. По умолчанию ldapsearch выводит записи по мере их получения. При использовании параметра -S все данные сначала получаются, потом сортируются, потом выводятся.
|
-t[t]
|
При указании одного
-t полученные непечатаемые значения записываются в набор временных файлов (полезно при работе со значениями, содержащими несимвольные данные, такими как jpegPhoto или audio). При указании второго -t все полученные значения записываются в файлы.
|
-T path
|
Временные файлы записываются в указанный в
path каталог (по умолчанию /tmp/.private/<user> )
|
-u
|
Включить в вывод форму удобного для пользователя имени (User Friendly Name, UFN) уникального имени (Distinguished Name, DN)
|
-z limit
|
Ограничить количество возвращаемых в результате поиска записей значением
limit . Значение 0 (ноль) или none означает, что ограничений нет. Значение max означает максимальное допустимое протоколом значение (целое число).
|
Общие параметры
|
|
-d debuglevel
|
Установить уровень отладки LDAP
|
-D binddn
|
Использовать указанное в
binddn уникальное имя Distinguished Name при подсоединении к каталогу LDAP. При SASL-подсоединениях сервер будет игнорировать это значение.
|
-e [!]ext[=extparam]
|
Указывает общие расширения. Знак '!' обозначает критичность расширения.
Общие расширения:
|
-h host
|
Сервер LDAP
|
-H URI
|
Указывает URI (возможно, несколько), ссылающийся на LDAP-сервер (серверы). В URI допускаются поля: протокол/хост/порт.
|
-I
|
Использовать интерактивный режим SASL.
|
-n
|
Демонстрируется, что будет сделано, но реальный поиск не выполняется. Используется для отладки совместно с параметром
-v
|
-N
|
Не использовать обратное разрешение DNS для получения канонического имени хоста SASL.
|
-O props
|
Параметры безопасности SASL
|
-o opt[=optparam]
|
Указывает опции общего назначения.
Возможные опции:
|
-p порт
|
Порт, на котором сервер LDAP принимает запросы. Номер порта по умолчанию — 389. Если номер порта не задан, и указан параметр
-Z , то применяется номер порта LDAP SSL по умолчанию, равный 636.
|
-Q
|
Использовать тихий режим SASL. Запросы не выводятся никогда.
|
-R realm
|
Задаёт realm аутентификационного идентификатора для SASL. Форма realm зависит от того, какой механизм аутентификации в действительности используется.
|
-U authcid
|
Идентификатор аутентификации SASL. Форма идентификатора зависит от того, какой механизм аутентификации в действительности используется.
|
-v
|
Запустить в подробном режиме (диагностические сообщения посылаются в стандартный вывод)
|
-V[V]
|
Вывести информацию о версии. При указании
-VV , после вывода информации о версии осуществляется выход. При указании -V , после вывода информации о версии выполняется поиск согласно заданным критериям.
|
-w passwd
|
Использовать указанное значение
passwd в качестве пароля для простой аутентификации.
|
-W
|
Запрашивать ввод пароля для простой аутентификации (используется для того, чтобы не указывать пароль в командной строке).
|
-x
|
Использовать простую аутентификацию
|
-X authzid
|
Идентификатор авторизации SASL ("dn:<dn>" или "u:<user>")
|
-y file
|
Считать пароль из файла
file .
В качестве пароля используется всё содержимое файла. Поэтому файл не должен содержать символа переноса строки.
|
-Y mech
|
Задаёт механизм SASL, который будет использоваться для аутентификации. Если параметр не указан, программа выберет лучший из известных серверу механизмов.
|
-Z[Z]
|
Запустить запрос TLS (
-ZZ для запроса успешного ответа)
|
<Атрибут><оператор сравнения><значение>Вместо имени атрибута можно использовать его идентификатор (Attribute-Id). Тело фильтра должно быть заключено в скобки.
Таблица 6.31. Примеры LDAP-фильтров
Запрос
|
LDAP фильтр
|
---|---|
Все пользователи:
|
(sAMAccountType=805306368)
|
Отключенные (Disabled) пользователи:
|
(&(sAMAccountType=805306368)(useraccountcontrol:1.2.840.113556.1.4.803:=2))
|
Заблокированные (Locked) пользователи:
|
(&(sAMAccountType=805306368)(badPwdCount>=4))
|
Пользователи, у которых в настройках указано «Пароль никогда не истекает»
|
(&(objectCategory=person)(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=65536))
|
Пользователи которые не меняли пароль с 5 мая 2023 года (см. https://www.epochconverter.com/ldap для преобразования даты во временную метку Windows)
|
(&(objectCategory=person)(pwdLastSet<=133278047990000000))
|
Пользователи с незаполненным полем mail
|
(&(objectCategory=group)(!(mail=*)))
|
Пользователи, которые должны сменить пароль при следующем входе в систему
|
(&(sAMAccountType=805306368)(pwdLastSet=0))
|
Пользователи с ограниченным сроком действия учетной записи
|
(&(sAMAccountType=805306368)(accountExpires>=1)(accountExpires<=9223372036854775806))
|
Пользователи, созданные за определенный период (формат даты: YYYY MM DD HH mm ss.s Z)
|
(&(sAMAccountType=805306368)(whenCreated>=20230401000000.0Z<=20230701000000.0Z))
|
Все компьютеры
|
(objectCategory=computer)
|
Все контроллеры домена
|
(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))
|
Контроллеры домена, доступные только для чтения
|
(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=67108864))
|
Группы, в которых нет пользователей
|
(&(objectCategory=group)(!(member=*)))
|
Группы, с ключевым словом admin в имени
|
(&(objectCategory=group)(samaccountname=*admin*))
|
Все группы безопасности (Security)
|
(&(objectCategory=group)(groupType:1.2.840.113556.1.4.803:=2147483648))
|
Все члены группы Sales (без учёта вложенности)
|
(memberOf=CN=Sales,CN=Users,DC=test,DC=alt)
|
Все члены группы Sales (с учётом вложенности)
|
(memberOf:1.2.840.113556.1.4.1941:=CN=Sales,CN=Users,DC=test,DC=alt)
|
Все группы, в которые входит пользователь testldap
|
(&(objectCategory=group)(member=CN=testldap,CN=Users,DC=test,DC=alt)))
|
Все подразделения (OU)
|
(objectCategory=organizationalUnit)
|
Все объекты групповой политики
|
(objectCategory=groupPolicyContainer)
|
Все отношения доверия
|
(objectClass=trustedDomain)
|
Объекты связанные с ролями FSMO
|
(fsMORoleOwner=*)
|
PDC Emulator
|
(&(objectClass=domainDNS)(fSMORoleOwner=*))
|
RID Master
|
(&(objectClass=rIDManager)(fSMORoleOwner=*))
|
Объект AD с определенным SID
|
(objectSID=S-1-5-21-1723588197-2340999690-1379671080-1105)
|
Отличительное имя (DN) имя_атрибута: значение имя_атрибута: значение имя_атрибута: значение …Записи разделяются пустыми строками.
-t
вместо реальных значений атрибутов будут выводиться URI временных файлов, в которые эти значения помещаются. Если задан параметр -A
будут выводиться только имена атрибутов.
Примечание
имя_атрибута:: base64_значение_атрибутаНапример:
dn:: Q0490JfQsNC50YbQtdCy0LAg0J7Qu9GM0LPQsCxDTj1Vc2VycyxEQz10ZXN0LERDPWFsdA==
cn:: 0JfQsNC50YbQtdCy0LAg0J7Qu9GM0LPQsA==
…
$ echo "0JfQsNC50YbQtdCy0LAg0J7Qu9GM0LPQsA==" | base64 -d
Зайцева Ольга
$ ldapsearch
-LLL -D testldap@test.alt -x -W | perl -MMIME::Base64 -MEncode=decode -n -00 -e 's/\n
+//g;s/(?<=:: )(\S+)/decode("UTF-8",decode_base64($1))/eg;print'
$ ldapsearch
-LLL -H ldap://192.168.0.122:389 \
-D testldap@test.alt -b "dc=test,dc=alt" \
-x -W "(&(sAMAccountName=*)(sn=К*))" cn sn
где:
-H ldap://192.168.0.122:389
— сервер LDAP;
-D testldap@test.alt
— пользователь с правом чтения в каталоге LDAP;
-b "dc=test,dc=alt"
— контейнер AD, в котором будет выполняться поиск;
-x
— использовать простую аутентификацию;
-W
— спросить пароль;
"(&(sAMAccountName=*)(sn=К*))"
— выражение, по которому будут отфильтрованы результаты;
cn sn
— поля, которые необходимо вывести.
/etc/openldap/ldap.conf
, например:
BASE dc=test,dc=alt URI ldap://dc1.test.altКоманда с использованием базы поиска и URI по умолчанию:
$ ldapsearch
-LLL -D testldap@test.alt \
-x -W "(&(sAMAccountName=*)(sn=К*))" cn sn
$ ldapsearch
-LLL -H ldap://192.168.0.122:389 \
-D testldap@test.alt -b "ou=OU,dc=test,dc=alt" -s one \
-x -W "(&(sAMAccountName=*)(mail=К*))" sn mail
В данном примере не будут выведены записи только из подразделения OU, но не из его дочерних подразделений.
new.filter
и выполнить функцию поиска LDAP для каждой строки:
$ ldapsearch -H ldap://192.168.0.122:389 \ -D testldap@test.alt -b "dc=test,dc=alt" -x -W -f new.filter "(samaccountname=%s)" cn
Содержимое файла new.filter
:
z* ivanov k* *kКоманда выполняет поиск по поддереву для каждого фильтра, начиная с samaccountname=z*. Когда этот поиск завершается, начинается поиск для фильтра cn=ivanov и т.д. Пример вывода вышеуказанной команды с параметром
-n
:
LDAPv3 # base <dc=test,dc=alt> with scope subtree # filter pattern: (samaccountname=%s) # requesting: dn # # # filter: (samaccountname=z*) # # # filter: (samaccountname=ivanov) # # # filter: (samaccountname=k*) # # # filter: (samaccountname=*k) #