(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Работа с данными Active Directory c помощью сценариев: Часть 1. Обзор LDAP

Источник: ibm
Рашид Ачилов

Введение

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

В приведенных ниже примерах используется имя домена - shelton.int, короткое имя - CATS.

Часто используемые сокращения:

  • AD - Active Directory (служба каталогов);
  • LDAP - Lightweight Directory Access Protocol (облегченный протокол доступа к каталогам);
  • DN - Distinguished Name (уникальное имя).

Подключение к службе Active Directory и просмотр объектов

Если рассматривать любой контроллер домена Windows как LDAP-сервер, то становится очевидным, что с ним можно работать стандартными средствами, предназначенными для чтения и записи данных в LDAP. Так, на нем можно обнаружить список открытых портов, похожий на приведенный в листинге 1 (из списка удалены порты, не относящиеся к LDAP):

Листинг 1. Список открытых портов типичного контроллера домена Windows

Starting Nmap 4.62 ( http://nmap.org ) at 2008-08-01 01:45 NOVST
Interesting ports on bigcat (192.168.50.1):
Not shown: 1699 closed ports
PORT     STATE SERVICE
88/tcp   open  kerberos-sec
389/tcp  open  ldap
464/tcp  open  kpasswd5
636/tcp  open  ldapssl
3268/tcp open  globalcatLDAP
3269/tcp open  globalcatLDAPssl

Как видно из листинга 1, контроллер домена предоставляет все необходимые сервисы: ldap на порту 389ldap over ssl на порту 636 и т.д. В данном случае компания Microsoft не стала разрабатывать собственное решение, а воспользовалась хорошо известной и документированной службой LDAP. Правда, сама схема LDAP от Microsoft значительно отличается от существующих аналогов, так в листинге 2 приведено описание стандартного объекта "пользователь" (некоторые поля были опущены), полученное с помощью утилиты ldapsearch.

Листинг 2. Поля стандартного объекта AD "пользователь", создаваемые по умолчанию.

dn: CN=LDAP Reader,CN=Users,DC=shelton,DC=int
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: LDAP Reader
sn: Reader
givenName: LDAP
distinguishedName: CN=LDAP Reader,CN=Users,DC=shelton,DC=int
instanceType: 4
displayName: LDAP Reader
name: LDAP Reader
objectGUID:: S2M6nZo2XkCfS2jjHt4XBg==
userAccountControl: 66048
badPwdCount: 0
countryCode: 0
badPasswordTime: 128634384464218750
lastLogoff: 0
lastLogon: 128634384682968750
pwdLastSet: 128634383003906250
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAtInjRe4dmI0lvJgpVwQAAA==
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: ldapread
sAMAccountType: 805306368
userPrincipalName: ldapread@shelton.int
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=shelton,DC=int

Для просмотра и редактирования объектов, загруженных из LDAP, существуют различные программы, например, GUI-приложение ldapbrowser, написанное на Java, или ldapsearch - программа, работающая из командной строки.

Программа ldapsearch - это важный инструмент администратора LDAP-сервера, примерно как ping и traceroute для системного администратора. Она позволяет загружать и использовать практически любые данные, существующие в LDAP. Некоторая проблема может возникнуть из-за того, что в этой программе используется собственный язык запросов. Он построен в соответствии с принципом "обратной польской записи", как в старинных программируемых калькуляторах, когда сначала задается знак операции, а потом перечисляются операнды. Все операнды разделяются отдельными скобками, из-за чего выражения становятся очень громоздкими. Поскольку это язык запросов, то в нем присутствуют только логические операции - И (&), ИЛИ (/), НЕ (!). Рассмотрим несколько примеров с использованием данного языка запросов.

  • (description=*) - любой объект, у которого определено поле description. При этом совершенно неважно какой будет длина этого поля, так, один символ точно так же попадет под фильтр "*", как и длинная строка.
  • (&(objectClass=user)(mail=*)) - любой объект, у которого поле objectClass равно user И определено полеmail.
  • В листинге 3 приведен огромный запрос, используемый для загрузки глобальной адресной книги из LDAP (все содержимое запроса - это одна строка).

Листинг 3. Пример запроса к LDAP-серверу

(&(&(&(mailnickname=*)(/(&(objectCategory=person)(objectClass=user)
(!(homeMDB=*))(!(msExchHomeServerName=*)))(&(objectCategory=person) 
(objectClass=user)(/(homeMDB=*)(msExchHomeServerName=*)))
(&(objectCategory=person)(objectClass=contact))(objectCategory=group)
(objectCategory=publicFolder)))))

Это запрос можно упросить, если воспользоваться знанием структуры каталога AD:

(&(sAMAccountName=*)(/(sAMAccountType=805306368)(sAMAccountType=268435456))(mail=*)).

В значениях sAMAccountType нет ничего секретного - это просто 0x30000000 и 0x10000000 в десятичной форме, обозначающие соответственно тип объекта "пользователь" или "контакт". Ссылку на подробное описание языка запросов можно найти в разделе "Ресурсы".

После изучения языка запросов остается решить вопрос - как подключиться к LDAP из командной строки? При этом необходимо учитывать несколько моментов.

  1. В Windows Server отсутствует так называемый anonymous bind (возможность подключения к LDAP без указания имени пользователя и пароля). Эту возможность можно активировать при наличии необходимых полномочий, но по умолчанию она отключена. Поэтому перед тем, как начать работать с LDAP через ldapsearch или создавать сценарии, необходимо получить отдельную учетную запись и установить достаточно простой пароль. Я обычно использую пароль "qwerty{123}", так как Windows 2003 Server считает его достаточно сложным, и имя пользователя ldapread. Для ldapsearch (и далее повсюду) в качестве значения параметра bind dn указывается строка <имя_пользователя>@<ДОМЕН>, где домен - это имя AD, переведенное в верхний регистр, напримерldapread@SHELTON.INT.
  2. Что указывать в качестве исходной точки для подключения (base dn)? Обычно base dn формируется следующим образом: если AD называется shelton.int, то соответствующим значением base dn будет dc=shelton,dc=int. Если же оно называется kitten.cats.shelton.int (такие длинные имена возможны в больших инсталляциях), то соответствующим значением base dn будет dc=kitten,dc=cats,dc=shelton,dc=int. Разумеется, при подключении можно указать не корень AD, а какую-либо его ветку, например,CN=Computers,DC=shelton,DC=int, но в таком случае поиск никогда не поднимется выше ее границы. Проблема состоит в том, что логически правильным является создание организационных единиц (ou - Organizational Unit), соответствующих разным филиалам, непосредственно в корне AD, поскольку эти ou будут содержать объекты разных типов - пользователей, компьютеры, группы и т.д. Поэтому для просмотра всей структуры AD лучше указывать корневой элемент.
  3. Как в AD хранится не-ASCII информация, т.е. данные на национальных (и на русском, в том числе) языках? Подобная информация хранится в виде текста в кодировке UTF-8, преобразованного с помощью Base64 в набор символов ASCII (см. соответствующую ссылку в разделе "Ресурсы").
  4. Сразу же после установки OpenLDAP необходимо внести в файл /usr/local/etc/openldap/ldap.conf (который может храниться и в другом месте) строку "REFERRALS off". Это необходимо сделать для всех версий AD, начиная с Windows 2003 Server.

После подготовки можно переходить к практическому использованию ldapsearch.

Листинг 4. Пример использования ldapsearch

# ldapsearch -D ldapread@SHELTON.INT -w qwerty{123}              -LLL -h 192.168.50.1 -b dc=shelton,dc=int -P 3              -a always (sAMAccountName=ld*) distinguishedName sAMAccountType
dn: CN=LDAP Reader,CN=Users,DC=shelton,DC=int
sAMAccountType: 805306368

Использованные ключи имеют следующее значение:

  • -D задает значение bind dn;
  • -w - пароль для подключения;
  • -LLL обеспечивает максимальное упрощение выводимой информации;
  • -h - адрес сервера;
  • -b задает значение base dn;
  • -P - версия протокола LDAP;
  • -a описан в man ldapsearch.

Далее приводится простой фильтр отбора записей и перечень атрибутов, которые нужно вывести. Если ничего не указывать, то будут выведены все атрибуты. В данном случае мы запросили атрибуты distinguishedName иsAMAccountType. Обратите внимание, что атрибуты, которые необходимо вывести, перечисляются через пробел, а не через запятые. Теперь можно попробовать добавить в информацию о пользователе (средствами Microsoft) поле title, равное "Читатель" и запросить его через ldapsearch.

Листинг 5. Пример использования ldapsearch

# ldapsearch -D ldapread@SHELTON.INT -w qwerty{123}              -LLL -h 192.168.50.1 -b dc=shelton,dc=int -P 3              -a always (sAMAccountName=ld*) title sAmAccountType
dn: CN=LDAP Reader,CN=Users,DC=shelton,DC=net
title:: 0KfQuNGC0LDRgtC10LvRjA==
sAMAccountType: 805306368
//проверка
# echo 0KfQuNGC0LDRgtC10LvRjA== / mmencode -u / iconv -f utf-8 -t koi8-r
Читатель

Заключение

В статье был представлен краткий обзор протокола LDAP и утилиты ldapsearch, использующейся для выполнения запросов к LDAP-серверам. В следующей статье мы рассмотрим использование ldapsearch из сценариев Bourne Shell.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 29.06.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
IBM Domino Utility Server Processor Value Unit (PVU) License + SW Subscription & Support 12 Months
TeeBI for RAD Studio Suite with source code single license
SAP CRYSTAL Reports 2013 WIN INTL NUL
Quest Software. SQL Navigator for Oracle
IBM RATIONAL Quality Manager Quality Professional Authorized User Single Install License + Sw Subscription & Support 12 Months
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Реестр Windows. Секреты работы на компьютере
Один день системного администратора
Мастерская программиста
Новые программы для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100