Поиск по сайту:

Как управлять серверами LDAP и использовать их с помощью утилит OpenLDAP


Введение

Системы LDAP могут показаться сложными в управлении, если вы плохо разбираетесь в доступных инструментах, а также в информации и методах, которые требуются для LDAP. В этом руководстве мы покажем, как использовать инструменты LDAP, разработанные командой OpenLDAP, для взаимодействия с сервером каталогов LDAP.

Предпосылки

Для начала у вас должен быть доступ к системе с установленным и настроенным OpenLDAP. Вы можете узнать, как настроить сервер OpenLDAP. Это руководство можно использовать для более подробного ознакомления с этими темами.

Установка инструментов

Приведенные выше предварительные требования предполагают, что у вас уже есть доступ к системе LDAP, но у вас могут быть еще не установлены инструменты OpenLDAP, описанные в этом руководстве.

В системе Ubuntu или Debian вы можете установить эти инструменты через репозитории apt. Обновите локальный индекс пакетов и установите, набрав:

  1. sudo apt-get update
  2. sudo apt-get install ldap-utils

В CentOS или Fedora вы можете получить соответствующие файлы с помощью yum. Установите их, набрав:

  1. sudo yum install openldap-clients

После того, как вы установили правильные пакеты, продолжайте ниже.

Подключение к экземпляру LDAP

Большинство инструментов OpenLDAP чрезвычайно гибки, жертвуя краткой структурой команд ради возможности взаимодействия с системами в нескольких различных ролях. Из-за этого пользователь должен выбрать множество аргументов только для того, чтобы выразить минимум, необходимый для подключения к серверу LDAP.

В этом разделе мы сосредоточимся на построении аргументов, необходимых для связи с сервером, в зависимости от типа операции, которую вы хотите выполнить. Обсуждаемые здесь аргументы будут использоваться в различных инструментах, но мы будем использовать ldapsearch для демонстрационных целей.

Указание сервера

Инструменты OpenLDAP требуют, чтобы вы указали метод аутентификации и расположение сервера для каждой операции. Чтобы указать сервер, используйте флаг -H, за которым следует протокол и сетевое расположение рассматриваемого сервера.

Для базовой незашифрованной связи схема протокола будет выглядеть следующим образом: ldap://:

  1. ldapsearch -H ldap://server_domain_or_IP . . .

Если вы взаимодействуете с локальным сервером, вы можете не указывать доменное имя или IP-адрес сервера (схему все равно нужно указать).

Если вы используете LDAP через SSL для подключения к серверу LDAP, вместо этого вы захотите использовать схему ldaps:// (обратите внимание, что это устаревший метод. Проект OpenLDAP рекомендует использовать обновление STARTTLS). на обычном порту LDAP. Узнайте, как это настроить здесь):

  1. ldapsearch -H ldaps://server_domain_or_IP . . .

Эти протоколы предполагают порт по умолчанию (389 для обычного LDAP и 636 для LDAP через SSL). Если вы используете нестандартный порт, вам нужно добавить его в конец с двоеточием и номером порта.

Чтобы подключиться к каталогу LDAP на сервере, из которого вы запрашиваете через Linux IPC (межпроцессное взаимодействие), вы можете использовать протокол ldapi://. Это более безопасно и необходимо для некоторых задач администрирования:

  1. ldapsearch -H ldapi:// . . .

Поскольку схема ldapi требует локального подключения, нам никогда не придется указывать здесь имя сервера. Однако, если вы изменили местоположение файла сокета в конфигурации сервера LDAP, вам нужно будет указать новое местоположение сокета как часть адреса.

Анонимная привязка

LDAP требует, чтобы клиенты идентифицировали себя, чтобы сервер мог определить уровень доступа для предоставления запросов. Это работает с использованием механизма LDAP, который называется «связывание», что в основном представляет собой просто термин для связывания вашего запроса с известным объектом безопасности. Существует три отдельных типа аутентификации, которые понимает LDAP.

Наиболее общий тип аутентификации, который может использовать клиент, — это «анонимная» привязка. Это практически отсутствие аутентификации. Серверы LDAP могут классифицировать определенные операции как доступные для всех (обычно по умолчанию общедоступным DIT является настроен как доступный только для чтения для анонимных пользователей).Если вы используете анонимную привязку, эти операции будут вам доступны.

Инструменты OpenLDAP предполагают аутентификацию SASL (мы сейчас обсудим это) по умолчанию, поэтому, чтобы разрешить анонимную привязку, мы должны указать аргумент -x. В сочетании со спецификацией сервера это будет выглядеть примерно так:

  1. ldapsearch -H ldap://server_domain_or_IP -x

Если вы введете это без дополнительных аргументов, вы должны получить что-то вроде этого:

# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

Это говорит о том, что инструмент не нашел то, что мы искали. Поскольку мы не предоставили параметры запроса, это ожидаемо, но это показывает нам, что наша анонимная привязка была принята сервером.

Простая аутентификация

Второй метод аутентификации на сервере LDAP — простая привязка. Простая привязка использует запись на сервере LDAP для аутентификации запроса. DN (отличительное имя) записи функционирует как имя пользователя для аутентификации. Внутри записи атрибут определяет пароль, который необходимо указать во время запроса.

Поиск корневой записи DIT и привязки RootDN

Для аутентификации с использованием простой аутентификации вам необходимо знать родительский элемент наверху иерархии DIT, называемый корневой, базовой или суффиксной записью, под которым размещаются все остальные записи. Вам также необходимо знать DN для привязки.

Обычно во время установки сервера LDAP создается и настраивается начальное DIT с административной записью, называемой rootDN, и паролем. При запуске это будет единственное DN, настроенное для привязки.

Если вам неизвестна корневая запись сервера LDAP, к которому вы подключаетесь, вы можете запросить специальную «мета»-запись вне обычного DIT LDAP для получения информации о том, какие корневые записи DIT ему известны (это называется корневой DSE). ).Вы можете запросить эту запись для имен DIT, набрав:

  1. ldapsearch -H ldap://server_domain_or_IP -x -LLL -s base -b "" namingContexts

Сервер LDAP должен вернуть известные ему корневые записи, которые будут выглядеть примерно так:

dn:
namingContexts: dc=example,dc=com

Выделенная область является корнем DIT. Мы можем использовать это для поиска записи для привязки. Запись администратора обычно использует объектный класс simpleSecurityObject, чтобы получить возможность установить пароль в записи. Мы можем использовать это для поиска записей с этим классом:

  1. ldapsearch -H ldap://server_domain_or_IP -x -LLL -b "dc=example,dc=com" "(objectClass=simpleSecurityObject)" dn

Это даст вам список записей, которые используют этот класс. Обычно есть только один:

dn: cn=admin,dc=example,dc=com

Это учетная запись rootDN, к которой мы можем привязаться. Вы должны были настроить пароль для этой учетной записи во время установки сервера. Если вы не знаете пароль, вы можете следовать этому руководству, чтобы сбросить пароль.

Выполнение привязки

Когда у вас есть запись и пароль, вы можете выполнить простую привязку во время вашего запроса, чтобы аутентифицировать себя на сервере LDAP.

Опять же, нам нужно будет указать местоположение сервера LDAP и предоставить флаг -x, чтобы указать, что мы не хотим использовать аутентификацию SASL. Чтобы выполнить фактическую привязку, нам нужно будет использовать флаг -D, чтобы указать DN для привязки, и указать пароль, используя -w или - Команда W. Параметр -w позволяет указать пароль как часть команды, а параметр -W предложит вам ввести пароль.

Пример привязки запроса к rootDN будет выглядеть так:

  1. ldapsearch -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W

Мы должны получить тот же результат, что и наша анонимная привязка, указывающий, что наши учетные данные были приняты. Привязка к записи часто дает вам дополнительные привилегии, недоступные при анонимной привязке. Привязка к rootDN дает вам доступ для чтения/записи ко всему DIT независимо от контроля доступа.

SASL-аутентификация

SASL означает простую аутентификацию и уровень безопасности. Это фреймворк для соединения методов аутентификации с протоколами, чтобы обеспечить гибкую систему аутентификации, не привязанную к конкретной реализации. Вы можете посетить страницу Википедии, чтобы узнать о различных доступных методах.

Ваш сервер LDAP, вероятно, будет поддерживать только часть возможных механизмов SASL. Чтобы узнать, какие механизмы он позволяет, вы можете ввести:

  1. ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms

Результаты, которые вы увидите, будут отличаться в зависимости от схемы, которую вы использовали для подключения. Для незашифрованной схемы ldap:// большинство систем по умолчанию разрешают:

dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5

Если вы используете схему ldapi://, в которой используется безопасное взаимодействие между процессами, у вас, вероятно, будет расширенный список вариантов:

  1. ldapsearch -H ldapi:// -x -LLL -s base -b "" supportedSASLMechanisms
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN

Настройка большинства методов аутентификации SASL может занять некоторое время, поэтому здесь мы не будем подробно останавливаться на этом. Хотя аутентификация SASL обычно выходит за рамки этой статьи, мы должны поговорить о методе EXTERNAL, который, как мы видим, доступен для использования со схемой ldapi://.

Механизм EXTERNAL указывает, что аутентификация и безопасность обрабатываются некоторыми другими средствами, связанными с соединением. Например, его можно использовать с SSL для обеспечения шифрования и аутентификации.

Чаще всего вы увидите, что он используется с интерфейсом ldapi:// с пользователями root или sudo. Поскольку ldapi:// использует сокеты Unix, пользователь, инициирующий запрос, может быть получен и использован для аутентификации для определенных операций. DIT, который LDAP использует для настройки, использует этот механизм для аутентификации пользователя root для чтения и внесения изменений в LDAP. Эти запросы выглядят примерно так:

  1. sudo ldapsearch -H ldapi:// -Y EXTERNAL . . .

Это используется для изменения конфигурации LDAP, которая обычно хранится в DIT, начиная с корневой записи cn=config.

Настройка файла .ldaprc

До сих пор мы указывали информацию о подключении в основном в командной строке. Однако вы можете сэкономить время на наборе текста, поместив некоторые общие значения подключения в файл конфигурации.

Глобальный файл конфигурации клиента находится по адресу /etc/ldap/ldap.conf, но в основном вы захотите внести изменения в файл конфигурации вашего пользователя, расположенный в вашем домашнем каталоге по адресу ~/. ldaprc. Создайте и откройте файл с этим именем в текстовом редакторе:

  1. nano ~/.ldaprc

Внутри основные параметры, которые вы, вероятно, захотите настроить, это BASE, URI и BINDDN:

  • BASE: базовое DN по умолчанию, используемое для указания записи, с которой должен начинаться поиск. Это будет переопределено, если в командной строке указана другая база поиска (подробнее об этом мы поговорим в следующем разделе).
  • URI: адрес, по которому можно связаться с сервером LDAP. Это должно включать схему (ldap для обычного LDAP, ldaps для LDAP через SSL и ldapi для LDAP через сокет IPC), за которой следует имя и порт сервера. Имя можно не указывать, если сервер расположен на том же компьютере, а порт можно не указывать, если сервер работает на порту по умолчанию для выбранной схемы.
  • BINDDN: указывает запись LDAP по умолчанию для привязки. Это используется для предоставления информации об учетной записи для доступа, который вы хотите использовать. Вам все равно нужно будет указать любой пароль в командной строке.

Это позаботится о простой аутентификационной информации. Если вы используете аутентификацию SASL, проверьте man ldap.conf, чтобы увидеть параметры для настройки учетных данных SASL.

Если наша базовая запись LDAP — dc=example,dc=com, сервер расположен на локальном компьютере, и мы используем cn=admin,dc=example,dc=com для привязки, у нас может быть файл ~/.ldaprc, который выглядит следующим образом:

BASE    dc=example,dc=com
URI     ldap://
BINDDN  cn=admin,dc=example,dc=com

Используя это, мы могли бы выполнить базовый поиск, просто указав аутентификацию без SASL и предоставив пароль, связанный с записью администратора. Это обеспечит полный поиск в поддереве базового DN по умолчанию, который мы указали:

  1. ldapsearch -x -w password

Это может помочь сократить «стандартные» варианты подключения при использовании утилит LDAP. В этом руководстве мы будем включать информацию о подключении в команды, чтобы быть явными, но при выполнении команд вы можете удалить любую часть который вы указали в файле конфигурации.

Использование ldapsearch для запроса DIT и записей поиска

Теперь, когда у нас есть хорошее представление о том, как пройти аутентификацию и указать сервер LDAP, мы можем начать говорить немного больше о реальных инструментах, которые находятся в вашем распоряжении. В большинстве наших примеров мы будем предполагать, что выполняем эти операции на том же сервере, на котором размещен сервер LDAP. Это означает, что наша спецификация хоста будет пустой после схемы. Мы также предполагаем, что базовая запись DIT, которой управляет сервер, предназначена для dc=example,dc=com. КорневоеDN будет cn=admin,dc=example,dc=com. Давайте начнем.

Мы начнем с ldapsearch, поскольку до сих пор мы использовали его в наших примерах. Системы LDAP оптимизированы для операций поиска, чтения и поиска. Если вы используете каталог LDAP, большинство ваших операций, вероятно, будет заключаться в поиске или поиске. Инструмент ldapsearch используется для запроса и отображения информации в DIT LDAP.

Мы рассмотрели часть синтаксиса, отвечающую за именование и подключение к серверу, которая выглядит примерно так:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W

Это дает нам минимум, необходимый для подключения и аутентификации к экземпляру LDAP, работающему на сервере, однако на самом деле мы ничего не ищем. Чтобы узнать больше, нам нужно обсудить понятия базы поиска и области поиска.

База поиска и область действия

В LDAP место, где начинается поиск, называется поисковой базой. Это запись в DIT, с которой начинается операция, и она действует как якорь. Мы указываем базу поиска, передавая имя записи с флагом -b.

Например, чтобы начать с корня нашего dc=example,dc=com DIT, мы можем использовать его в качестве базы поиска, например:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com"

Эта команда должна создать каждую запись под записью dc=example,dc=com, к которой имеет доступ пользователь, к которому вы привязаны. Если бы мы использовали другую запись, мы бы получили другую часть дерева. Например, если мы начнем с записи администратора, вы можете получить только саму запись администратора:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "cn=admin,dc=example,dc=com"
# extended LDIF
#
# LDAPv3
# base <cn=admin,dc=example,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# admin, example.com
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ejN2UmHoRjdha09tQY96TC9IN0kxYUVCSjhLeXBsc3A=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Мы указали базу в этих примерах, но мы можем дополнительно настроить способ, которым инструмент ищет результаты, указав область поиска. Эта опция задается опцией -s и может быть любой из следующих:

  • sub: область поиска по умолчанию, если не указано другое. Это ищет саму базовую запись и любых потомков по всему дереву. Это самая большая область действия.
  • base: выполняется поиск только в самой базе поиска. Он используется для возврата записи, указанной в базе поиска, и лучше определяется как поиск, чем поиск.
  • one: выполняется поиск только непосредственных потомков/потомков базы поиска (один уровень иерархии ниже базы поиска). Это не включает саму базу поиска и не включает поддерево под любой из этих записей.
  • children. Функционирует так же, как и область sub, но не включает в результаты саму базу поиска (ищет каждую запись ниже, но не включает база поиска).

Используя флаг -s и флаг -b, мы можем начать формировать области DIT, в которые мы хотим, чтобы инструмент смотрел. Например, мы можем увидеть все дочерние элементы первого уровня нашей базовой записи с использованием области видимости one, например:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -s one -LLL dn

Мы добавили -LLL dn в конец, чтобы немного отфильтровать вывод. Мы обсудим это далее в статье. Если бы мы добавили в дерево еще несколько записей, это могло бы вернуть такие результаты:

dn: cn=admin,dc=example,dc=com

dn: ou=groups,dc=example,dc=com

dn: ou=people,dc=example,dc=com

Если бы мы хотели видеть все под записью ou=people, мы могли бы установить ее в качестве базы поиска и использовать область действия children:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "ou=people,dc=example,dc=com" -s children -LLL dn

Настраивая базу поиска и область поиска, вы можете работать только с теми частями DIT, которые вас интересуют. Это повысит производительность вашего запроса, выполняя поиск только в разделе дерева, и он будет возвращать только интересующие вас записи. в.

Удаление постороннего вывода

Прежде чем двигаться дальше, давайте поговорим о том, как удалить часть лишнего вывода, создаваемого ldapsearch.

Большая часть дополнительного вывода контролируется флагами -L. Вы можете использовать от нуля до трех флагов -L в зависимости от уровня вывода, который вы хотели бы видеть. Чем больше флагов -L вы добавите, тем больше информации будет скрыто. Может быть хорошей идеей воздержаться от подавления каких-либо выходных данных при обучении или устранении неполадок, но во время обычной работы использование всех трех уровней, вероятно, приведет к лучшему опыту.

Если вы используете аутентификацию SASL, например, при изменении DIT cn=config, вы можете дополнительно использовать флаг -Q. Это включит тихий режим SASL, который удалит все выходные данные, связанные с SASL. Это нормально при использовании метода -Y EXTERNAL, но будьте осторожны, если вы используете механизм, который запрашивает учетные данные, потому что это также будет подавлено (что приведет к сбою аутентификации).

Фильтры поиска и фильтры выходных атрибутов

Чтобы на самом деле выполнить поиск, а не просто вывести всю область поиска, вам нужно указать фильтр поиска.

Их можно поместить ближе к концу строки и принять форму типа атрибута, оператора сравнения и значения. Часто они указываются в кавычках, чтобы предотвратить интерпретацию командной оболочкой. Круглые скобки используются для обозначения границ одного фильтра от другого. Они необязательны в простом поиске по одному атрибуту, но необходимы в более сложных составных фильтрах. Мы будем использовать их здесь, чтобы лучше указать, где находится поисковый фильтр.

В качестве примера мы могли бы увидеть, есть ли запись в DIT dc=example,dc=com с атрибутом имени пользователя (uid), для которого задано значение \jsmith. Это ищет каждую запись в области поиска для атрибута, установленного на это значение:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=jsmith)"

В приведенном выше примере мы использовали оператор равенства, который проверяет точное совпадение значения атрибута. Существуют также различные другие операторы, которые работают так, как вы ожидаете. Например, для поиска записей, которые содержат атрибут, не заботясь о наборе значений, вы можете использовать оператор \присутствия, который представляет собой просто знак равенства с подстановочным знаком справа от Мы могли бы искать записи, содержащие пароль, набрав:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(userPassword=*)"

Некоторые полезные поисковые фильтры:

  • Равенство: используется оператор = для сопоставления с точным значением атрибута.
  • Присутствие: используется =* для проверки существования атрибута независимо от его значения.
  • Больше или равно: используется оператор >= для проверки значений, больших или равных заданному значению.
  • Меньше или равно: используется оператор <= для проверки значений, меньших или равных заданному значению.
  • Подстрока: используется = со строкой и подстановочный знак * как часть строки. Используется для указания части искомого значения.
  • Близость: используется оператор ~=, чтобы примерно соответствовать тому, что находится справа. Это не всегда поддерживается сервером LDAP (в этом случае вместо этого будет выполняться поиск на равенство или поиск подстроки).

Вы также можете отменить большинство поисковых запросов, заключив поисковый фильтр в дополнительный набор круглых скобок с префиксом \! символ отрицания. Например, для поиска всех записей организационных подразделений мы могли бы использовать этот фильтр:

"(ou=*)"

Для поиска всех записей, которые не являются записями организационного подразделения, мы можем использовать этот фильтр:

"(!(ou=*)"

Модификатор отрицания меняет значение следующего за ним поискового фильтра на противоположное.

Следуя спецификации фильтра, мы также можем добавить выходные фильтры атрибутов. Это всего лишь список атрибутов, которые вы хотите отобразить для каждой совпавшей записи. По умолчанию для каждой соответствующей записи отображаются все атрибуты, к которым у ваших учетных данных есть доступ для чтения. Установка выходного фильтра атрибута позволяет точно указать, какой тип вывода вы хотите видеть.

Например, мы можем искать все записи, у которых есть идентификаторы пользователей, но отображать только связанное общее имя каждой записи, набрав:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn

Это может создать список, который выглядит следующим образом:

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown

Если мы также хотим увидеть их описание записи, мы можем просто добавить его в список отображаемых атрибутов:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn description

Вместо этого он будет показывать что-то вроде этого:

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright
description: Brian Wright from Marketing.  Brian takes care of marketing, pres
 s, and community.  Ask him for help if you need any help with outreach.

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith
description: Johnny Smith from Accounting.  Johnny is in charge of the company
  books and hiring within the Accounting department.

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown
description: Sally Brown from engineering.  Sally is responsible for designing
  the blue prints and testing the structural integrity of the design.

Если фильтр атрибутов не задан, возвращаются все атрибуты. Это можно сделать явным с помощью символа «*». Чтобы вернуть рабочие атрибуты (специальные атрибуты метаданных, управляемые в фоновом режиме для каждой записи), вы можете использовать специальный символ «+». Например, чтобы увидеть операционные атрибуты для нашего rootDN, мы могли бы ввести:

  1. ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -b "dc=example,dc=com" -LLL "(cn=admin)" "+"

Результаты будут выглядеть примерно так:

dn: cn=admin,dc=example,dc=com
structuralObjectClass: organizationalRole
entryUUID: cdc718a0-8c3c-1034-8646-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150514191233.782384Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150514191233Z
entryDN: cn=admin,dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

Составной поиск

Составной поиск включает в себя объединение двух или более отдельных поисковых фильтров для получения более точных результатов. Фильтры поиска объединяются путем заключения их в другой набор круглых скобок с оператором отношения в качестве первого элемента. Это легче продемонстрировать, чем объяснить.

Операторы отношения — это символ \&, который работает как логическое И, и символ \|. символ, означающий логическое ИЛИ. Они предшествуют фильтрам, отношения которых они определяют во внешнем наборе круглых скобок.

Таким образом, для поиска записи, имеющей как описание, так и адрес электронной почты в нашем домене, мы могли бы создать такой фильтр:

"(&(description=*)(mail=*@example.com))"

Чтобы запись была возвращена, в ней должны быть определены оба этих атрибута.

Символ ИЛИ вернет результаты, если любой из подфильтров верен. Если мы хотим вывести записи, для которых у нас есть контактная информация, мы можем попробовать такой фильтр:

"(|(telephoneNumber=*)(mail=*)(street=*))"

Здесь мы видим, что оператор может применяться более чем к двум подфильтрам. Мы также можем вкладывать эти логические конструкции по мере необходимости для создания довольно сложных шаблонов.

Использование ldapmodify и вариантов для изменения или создания записей LDAP

До сих пор мы фокусировались исключительно на команде ldapsearch, которая полезна для поиска, поиска и отображения записей и сегментов записей в DIT LDAP. Это удовлетворит требования большинства пользователей только для чтения, но нам нужен другой инструмент, если мы хотим изменить объекты в DIT.

Команда ldapmodify управляет DIT с помощью файлов LDIF. Вы можете узнать больше о файлах LDIF и особенностях их использования для изменения или добавления записей, просмотрев это руководство.

Базовый формат ldapmodify точно соответствует синтаксису ldapsearch, который мы использовали в этом руководстве. Например, вам все равно нужно указать сервер с флагом -H, аутентифицироваться с помощью флага -Y для аутентификации SASL или -x, -D и -[W|w] для простой аутентификации.

Применение изменений из файла LDIF

После предоставления этих шаблонных параметров наиболее распространенным действием является чтение файла LDIF и применение его к DIT. Этого можно добиться с помощью параметра -f (если вы не используете параметр -f, вам придется ввести изменение в формате LDIF в командной строке). ). Вам нужно будет создать файл LDIF самостоятельно, используя синтаксис, описанный в руководстве, ссылка на которое приведена выше:

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Это прочитает файл LDIF и применит указанные в нем изменения. Для команды ldapmodify для каждого изменения LDIF должен быть указан changetype. Команда ldapmodify является наиболее общей формой команд управления DIT.

Если ваш LDIF-файл добавляет новые записи и не включает changetype: add для каждой записи, вы можете использовать флаг -a с ldapmodify или просто используйте команду ldapdd, которая в основном дублирует это поведение. Например, файл LDIF, который включает changetype, будет выглядеть следующим образом:

dn: ou=newgroup,dc=example,dc=com
changetype: add
objectClass: organizationalUnit
ou: newgroup

Чтобы обработать этот файл, вы можете просто использовать ldapmodify:

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Однако файл также может быть создан без changetype, например:

dn: ou=newgroup,dc=example,dc=com
objectClass: organizationalUnit
ou: newgroup

В этом случае, чтобы добавить эту запись в DIT, вам нужно либо использовать флаг -a с ldapmodify, либо использовать ldapdd команда. Или:

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -a -f /path/to/file.ldif

Или это:

  1. ldapadd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Аналогичные команды доступны для удаления записей (ldapdelete) и перемещения записей LDAP (ldapmodrdn). Использование этих команд избавляет вас от необходимости явно указывать changetype: delete и changetype: modrdn в файлах соответственно. Для каждого из них вам решать, какой формат использовать (указать ли изменение в файле LDIF или в командной строке).

Тестирование изменений и обработка ошибок

Если вы хотите выполнить пробный запуск любого файла LDIF, вы можете использовать флаги -n и -v. Это скажет вам, какое изменение будет выполнено без изменения фактического DIT:

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -n -v -f /path/to/file.ldif

Как правило, если при обработке файла LDIF возникает ошибка, операция немедленно останавливается. Как правило, это самый безопасный способ, потому что часто запросы на изменение позже в файле изменяют DIT, предполагая, что более ранние изменения были применены правильно.

Однако, если вы хотите, чтобы команда продолжила работу с файлом, пропуская вызывающие ошибку изменения, вы можете использовать флаг -c. Вероятно, вы также захотите использовать флаг -S, чтобы указать на файл, в который могут быть записаны ошибки, чтобы вы могли исправить проблемные запросы и повторно запустить их:

  1. ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -c -S /path/to/error_file -f /path/to/file.ldif

Таким образом, у вас будет журнал (с комментариями, указывающими на неверные записи) для оценки после операции.

Различные другие команды LDAP

Команды, которые мы уже рассмотрели, выполняют наиболее распространенные операции LDAP, которые вы будете использовать изо дня в день. Однако есть еще несколько команд, о которых полезно знать.

ldappasswd

Если некоторые из ваших записей LDAP содержат пароли, для изменения записи можно использовать команду ldappasswd. Это работает путем аутентификации с использованием рассматриваемой учетной записи или учетной записи администратора, а затем предоставления нового пароля (и, возможно, старого пароля).

Старый пароль следует указывать либо с помощью флага -a (старый пароль указывается в качестве следующего элемента), либо с помощью флага -A (старый пароль запрашивается) или флаг -t (старый пароль считывается из файла, указанного в качестве следующего пункта). Это необязательно для некоторых реализаций LDAP, но требуется для других, поэтому лучше включить его.

Новый пароль следует указывать либо с помощью флага -s (новый пароль указывается в строке как следующий элемент), либо с помощью флага -S (новый пароль запрашивается) или флаг -T (новый пароль считывается из файла, указанного в качестве следующего пункта).

Таким образом, типичное изменение может выглядеть так:

  1. ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w oldpassword -a oldpassword -s newpassword

Если запись не указана, запись, используемая для привязки, будет изменена. Если вы выполняете привязку к административной записи, вы можете изменить другие записи, к которым у вас есть доступ для записи, предоставив их после команды.

  1. ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w adminpassword -a oldpassword -s newpassword "uid=user,dc=example,dc=com"

Чтобы узнать больше об изменении и сбросе паролей, ознакомьтесь с этим руководством.

ldapwhoami

Команда ldapwhoami может сообщить вам, как сервер LDAP видит вас после аутентификации.

Если вы используете анонимную или простую аутентификацию, результаты, вероятно, не будут слишком полезными («анонимно» или именно та запись, к которой вы привязываетесь, соответственно). Однако для аутентификации SASL это может дать представление о том, как работает ваш механизм аутентификации. быть увиденным.

Например, если мы используем механизм SASL -Y EXTERNAL с sudo для выполнения операций с cn=config DIT, мы можем проверить с помощью ldapwhoami, чтобы увидеть DN аутентификации:

  1. sudo ldapwhoami -H ldapi:// -Y EXTERNAL -Q
dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

Это не фактическая запись в нашем DIT, это просто то, как аутентификация SASL преобразуется в формат, понятный LDAP. Тем не менее, просмотр DN аутентификации может использоваться для создания сопоставлений и ограничений доступа, поэтому полезно знать, как получить эту информацию.

лдапурл

Инструмент ldapurl позволяет создавать URL-адреса LDAP, указывая различные компоненты, участвующие в вашем запросе. URL-адреса LDAP — это способ, с помощью которого вы можете запрашивать ресурсы с сервера LDAP через стандартный URL-адрес. Это соединения без проверки подлинности, доступные только для чтения. Многие решения LDAP больше не поддерживают URL-адреса LDAP для запроса ресурсов, поэтому их использование может быть ограничено в зависимости от используемого вами программного обеспечения.

Стандартный URL-адрес LDAP имеет следующий синтаксис:

ldap://host:port/base_dn?attr_to_return?search_scope?filter?extension

Компоненты следующие:

  • base_dn: базовое DN, с которого начинается поиск.
  • attr_to_return: атрибуты соответствующих сущностей, которые вас интересуют. Они должны быть разделены запятыми.
  • search_scope: область поиска. Базовый, подчиненный, один или дочерний элемент.
  • filter: фильтр поиска, используемый для выбора записей, которые должны быть возвращены.
  • extension: расширения LDAP, которые вы хотите указать. Мы не будем рассматривать их здесь.

Каждый из элементов разделен в URL-адресе знаком вопроса. Вам не нужно указывать элементы, которые вы не используете, но, поскольку тип элемента идентифицируется по его положению в строке, вы должны оставить «слот» для этого элемента пустым, что оставит вас с несколькими вопросительными знаками. Вы можете остановить URL-адрес, как только добавите свою информацию (вам не нужны вопросительные знаки в конце для обозначения неиспользуемых «слотов»).

Например, URL-адрес может выглядеть так:

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

Если бы вы передали это в инструмент ldapurl, вы бы использовали флаг -H и заключили URL-адрес в кавычки:

  1. ldapurl -H "ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)"

Команда разделит его на части следующим образом:

scheme: ldap
host: localhost
port: 389
dn: dc=chilidonuts,dc=tk
selector: dn
selector: ou
scope: sub
filter: (ou=*)

Вы также можете использовать эти флаги для обратного процесса и объединения URL-адреса LDAP. Они отражают различные компоненты URL-адреса LDAP:

  • -S: схема URL (ldap, ldaps или ldapi). Схема ldap используется по умолчанию.
  • -h: имя или адрес сервера LDAP
  • -p: порт сервера LDAP. Значение по умолчанию будет зависеть от схемы.
  • -b: базовое DN для запуска запроса
  • -a: список возвращаемых атрибутов, разделенных запятыми
  • -s: используемая область поиска (базовая, дочерняя, дочерняя или одна)
  • -f: фильтр LDAP для выбора возвращаемых записей
  • -e: расширения LDAP для указания

Используя их, вы можете ввести что-то вроде этого:

  1. ldapurl -h localhost -b "dc=example,dc=com" -a dn,ou -s sub -f "(ou=*)"

Команда вернет созданный URL-адрес, который будет выглядеть следующим образом:

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

Вы можете использовать это для создания URL-адресов, которые можно использовать с клиентом LDAP, способным обмениваться данными с использованием этого формата.

ldapcompare

Инструмент ldapcompare можно использовать для сравнения атрибута записи со значением. Это используется для выполнения простых проверок утверждений для проверки данных.

Процесс включает привязку, как обычно, в зависимости от запрашиваемых данных, предоставление DN записи и утверждение для проверки. Утверждение задается путем указания атрибута, а затем значения, разделенного одним или двумя двоеточиями. Для простых строковых значений следует использовать одно двоеточие. Двойное двоеточие указывает на то, что было задано значение в кодировке base64.

Таким образом, вы можете утверждать, что Джон является членом группы \powerusers, примерно так:

  1. ldapcompare -H ldap:// -x "ou=powerusers,ou=groups,dc=example,dc=com" "member:uid=john,ou=people,dc=example,dc=com"

Если он находится в группе, он вернет TRUE. Если нет, команда вернет FALSE. Если DN, используемый для привязки, не имеет достаточных привилегий для чтения рассматриваемого атрибута, он вернет UNDEFINED.

Это можно использовать в качестве основы для системы авторизации, проверяя членство в группе перед выполнением запрошенных действий.

Заключение

Теперь у вас должно быть хорошее представление о том, как использовать некоторые утилиты LDAP для подключения, управления и использования вашего сервера LDAP. Другие клиенты могут предоставить более удобный интерфейс к вашей системе LDAP для повседневного управления, но эти инструменты могут помочь вам изучить основы и обеспечить хороший низкоуровневый доступ к данным и структурам вашего DIT.