ldapsearch показывать записи участника без CN

Вопрос или проблема

Я использую ldapsearch на Debian 9 Linux, чтобы делать запросы к MS Active Directory. Я хотел бы найти всех пользователей в моей группе “mygroupname”.
Команда

ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" member

выдает следующий результат:

dn: CN=mygroupname,OU=user,DC=mydc,DC=com
member: CN=Paula Normal,OU=whatever,OU=...,OU=...,OU=...,DC=mydc,DC=com
member:: Q049QmV0dGluYSBUw7Zs...................9nbmUsT1U9RGV1dHNjwdGEsREM9Y29t
member: CN=Peter Testman,OU=whatever2,OU=...,OU=...,OU=...,DC=mydc,DC=com
...

Я сравнил этот вывод с AD-GUI. Второй элемент должен быть валидным пользователем, но вывод неожиданный и нечитаемый. Информация о CN,OU,DC отсутствует. Я выяснил, что странные элементы валидны, но закодированы в base64.

В чем ошибка? Может ли быть повреждение в AD? Неправильная ли моя команда запроса? Почему некоторые элементы закодированы в base64? Как получить правильный вывод?

Ваша команда

ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" member

явно ограничивает атрибуты, запрашиваемые в ходе поиска, до member.

Просто попробуйте добавить нужные имена атрибутов в качестве дополнительных аргументов команды:

ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" cn ou o member

См. также: ldapsearch(1)

Кроме того, вам следует ознакомиться с синтаксисом LDIF (см. RFC 2849), который должен быть ASCII-чистым. Двойные двоеточия после имени типа атрибута означают, что значение было закодировано в base64, например, из-за наличия не-ASCII символа в имени. Используйте подходящий модуль LDIF для декодирования вывода ldapsearch или лучше используйте LDAP-модуль для вашего любимого языка программирования.

Причиной неожиданного вывода является не-ASCII символ в cn-name.
Строка, начинающаяся с “member:: “, указывает на закодированное в base64 значение, которое можно декодировать (например, echo "$value" | base64 -d -)

Результаты поиска ldapsearch отображаются с использованием расширенной версии LDIF.

Синтаксис LDIF (см. RFC 2849) должен быть ASCII-чистым.

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

myldapsearch() { ldapsearch $* | perl -MMIME::Base64 -n -00 -e 's/\n +//g;s/(?<=:: )(\S+)/decode_base64($1)/eg;print'; }  

См. в данном вопросе.

Ответ или решение

Для выполнения успешного поиска пользователей в группе Active Directory с помощью утилиты ldapsearch на Debian 9, важным шагом является понимание и корректировка параметров командной строки, а также разбирание выводимых данных.

Проблема

Используемая команда:

ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" member

выводит данные о членах группы, среди которых присутствуют base64-закодированные значения, такие как:

member:: Q049QmV0dGluYSBUw7Zs...

Причины и решение проблемы

  1. Base64-кодирование значений:
    Немного неожиданный вывод с двойными двоеточиями :: обусловлен тем, что содержимое значения(я) содержит не-ASCII символы, из-за чего оно закодировано в base64. Это стандартная практика для формата LDIF, который требует ASCII-совместимости.

  2. Отсутствие информации в CN, OU, DC:
    Base64-кодировка не влияет на полноту, но делает информацию нечитаемой для пользователя. Возможной причиной этого может быть наличие спецсимволов, например, в имени пользователя, что требует кодирования.

  3. Решение:

    • Чтобы декодировать эти значения, используйте встроенные команды, например, echo "кодировка" | base64 -d, чтобы гарантировать понимание и коррекцию данных вручную.
  4. Оптимизация команды ldapsearch:
    Для более полной информации о каждом пользователе, предложено добавление нескольких атрибутов в команду поиска:

    ldapsearch -o ldif-wrap=no -xWLLL -D "myaccount" -h mydomain -b "ou=user,dc=mydc,dc=com" "cn=mygroupname" cn ou o member

    Это обеспечит вывод дополнительных атрибутов, таких как CN, OU и O, которые могут быть полезны.

  5. Автоматизация процесса:
    Написание пользовательской функции может упростить задачу по расшифровке base64-закодированных значений:

    myldapsearch() {
       ldapsearch "$@" | perl -MMIME::Base64 -n -00 -e 's/\n +//g;s/(?<=:: )(\S+)/decode_base64($1)/eg;print';
    }

Заключение

Хотя base64-кодирование и может показаться проблемой, оно является следствием спецификаций LDIF для защиты данных. Используя грамотную настройку ldapsearch, и применив описанные подходы декодирования, можно получить полноценный вывод данных о пользователях в группе Active Directory. Избегайте стандартных решений, адаптируя команды под свои нужды, что приведет к изменению вашего опыта работы с LDAP.

Оцените материал
Добавить комментарий

Капча загружается...