Каталог решений - Интеграция 1С с Active Directory на LINUX через ldapsearch

Интеграция 1С с Active Directory на LINUX через ldapsearch

Интеграция 1С с Active Directory на LINUX через ldapsearch

В наличии

Интеграция с Active Directory на Windows не вызывает особых вопросов, по этому вопросу есть множество ресурсов. А что делать, если нужно выгружать информацию в базу, которая работает на сервере приложений под управлением linux? Тут уже не так много информации, в этой статье постараюсь осветить этот вопрос.

Категория:

Описание

Начнем издалека, а именно разберем, что такое active directory и как он работает.

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

В основе работы Active Directory (AD) лежит протокол LDAP. LDAP — это аббревиатура от Lightweight Directory Access Protocol, то есть протокол легкого доступа к каталогам. LDAP также позволяет пользователям получить доступ к ресурсам в зависимости от прав, настроенных администратором службы каталогов.

Каждый из них относится к определённому классу (objectClass) (пользователи, компьютеры, домены и т.д.). В свою очередь все объекты каждого класса имеют одинаковый набор атрибутов.

Пользователь в AD и его атрибуты выглядят следующим образом:

 

 

При работе информационной базы на сервере под управлением windows доступ к AD осуществляется по средством COM-соединения. Например в статье Ильина Михаила описан пример такой интеграции: //infostart.ru/1c/articles/275916/

Полного аналога AD найти на данный момент невозможно. Есть ряд технологий, которые претендуют на конкуренцию с AD: Avanpost Directory Service, Samba DC, ALD Pro, OpenLDAP и другие.

При работе сервера приложений по linux отсутствует возможность создавать COM-объекты, и традиционный поход в интеграции с AD тут не применим. На помощь приходит ldapsearch — утилита для поиска информации в службе каталога, доступной по протоколу LDAP. Далее будут рассмотрены основные возможности этой утилиты и приведен пример загрузки основной информации из AD.

Поскольку ldapsearch — это консольная утилита, необходимо проверить ее наличие в linux и при отсутствии установить командой: sudo apt install ldap-utils

Для поиска информации в AD необходимо воспользоваться командой:

ldapsearch -H ldaps://dc.example.com -D "user@example.com" -w "password" -b "dc=example,dc=com" "(filter)" "attr1" "attr2", где:

-H: адрес запрашиваемого сервера каталогов;

-W: DN пользователя, по которым будет проходить аутентификация. Это будет имя пользователя в AD@ домен;

-b: В какой директории начать поиск. Если известно, в каком подразделении (Organizational Unit ) находятся записи, которые нужно найти, его можно добавить в поиск. Например, если мы знаем, что записи которые мы ищем находятся в OU под названием "stuff", то  строка запроса будет "ou=stuff,dc=example,dc=com". Если неизвестно, в каком OU находятся записи, можно указать просто домен "dc=example,dc=com";

-(filter): фильтр, который будет использоваться для поиска. Например, если хотим найти пользователя с именем IvanovII, то фильтр будет: (sAMAccountName=IvanovII). Если нужно найти всех членов группы cn=usets,ou=stuff,dc=example,dc=com, то необходимо использовать фильтр: (memberOf=cn=usets,ou=stuff,dc=example,dc=com)"

-"attr1":  Атрибуты, которые вы хотите отобразить. Каждый атрибут должен быть разделен пробелом. Некоторые распространенные из них — name mail sAMAccountName telephoneNumber.

Основные атрибуты AD, которые часто требуется получать из AD в 1С:

 

АтрибутРусскоязычное название    Пример
nameПолное имяИванов Иван Викторович
snФамилияИванов
displayNameВыводимое имяИванов Иван Викторович
givenNameИмяИван Викторович
mailЭлектронная почта пользователяmail@domain.com
sAMAccountNameДоменное имяIvanovIV
userPrincipalNameИмя входа пользователяIvanovIV@domain.com
memberOfЧлен групп (в какую группу входит данный пользователь)CN=Группа,OU=Компания,DC=domain,DC=com
telephoneNumberРабочий номер телефона1234
managerРуководитель???

 

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

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

— Получить всех пользователей с полным именем, адресом электронной почты, рабочим телефоном и доменным именем: ldapsearch -H ldap://dc.example.com -D user@example.com -w ‘password’ -b "dc=example,dc=com" "(objectClass=user)" name mail telephoneNumber sAMAccountName

Тут мы наложили фильтр на objectClass=user, чтобы получить результат только по пользователям. Если фильтр не указан, используется фильтр по умолчанию (objectClass=*). В итоге получим следующий результат:

dn:: Q0490JjQstCw0L3QvtCyINCY0LLQsNC9INCS0LjQutGC0L7RgNC+0LLQuNGHLE9V
PdCcLE9VPXN0dWZmLERDPWV4YW1wbGUsREM9Y29t
telephoneNumber: 1234
name:: 0JjQstCw0L3QvtCyINCY0LLQsNC9INCS0LjQutGC0L7RgNC+0LLQuNGH
sAMAccountName: IvanovIV
mail: IvanovIV@example.com

Часть атрибутов возвращается в base64 и требует обратной перекодировки на стороне 1С. 

dn  это уникальное имя (Distinguished Name, DN), которое однозначно идентифицирует запись в пределах леса и представляет собой полный путь от корневой записи AD до рассматриваемого объекта. 

После перекодировки из base64 получаем:

dn:: CN=Иванов Иван Викторович,OU=М,OU=stuff,DC=example,DC=com
telephoneNumber: 1234
name:: Иванов Иван Викторович
sAMAccountName: IvanovIV
mail: IvanovIV@example.com

Значение атрибута записывается в 7-битной кодировке ASCII и отделяется от его имени символом «:». Значения, не подходящие под эту кодировку, записываются в кодировке base64 и отделяются от имени атрибута символами «::»:

атрибут:: base64_значение_атрибута

Следующий пример, который мы рассмотрим, — это отбор записей по нескольким отборам. Например требуется получить атрибуты только по записи, где name=Иванов Иван Викторович, строка запроса будет такой: ldapsearch -H ldap://dc.example.com -D user@example.com -w ‘password’ -b "dc=example,dc=com" "(&(objectClass=user)(name=Иванов Иван Викторович))" name 

Если в фильтре указать "(&(objectClass=user)(sn=И*))" — то будут отобраны все пользователи, фамилия которых начинается с "И".

Также распространенной задачей является, например, блокировка учетных записей пользователей в информационной базе 1С, если этот пользователь заблокирован в AD. Такую информацию можно получить запросом:  ldapsearch -H ldap://dc.example.com -D user@example.com -w ‘password’ -b "dc=example,dc=com" "(&(objectClass=user)(useraccountcontrol:66050))".

userAccountControl — является суммой нескольких свойств атрибутов. При этом значение 512 является значением по умолчанию при всех снятых флагах на вкладке "Учетная запись", и каждый дополнительный параметр прибавляется к нему. Ниже представлены примеры комбинаций этих свойств:

512 — Включена (Enabled)
514 (512+2) — Отключена (Disabled)
66048 (512+65536) — Включена, срок действия пароля не ограничен.
66050 (512+65536+2) — Отключена, срок действия пароля не ограничен.

Ниже приведен список основных значений атрибута userAccountControl:

 

ЗначениеОписание
2Учетная запись отключена
16Учетная запись заблокирована
32Пароль не требуется
64Запретить смену пароля пользователем
512Учетная запись по умолчанию. Значение указано у обычного пользователя
65536Срок действия пароля не ограничен
8388608Пароль пользователя истек

 

К статье добавлена обработка, где реализована загрузка нескольких атрибутов из AD в качестве примера.

В обработке также реализован пример отбора.

 

 

Список использованных источников:

https://www.ispsystem.ru/news/active-directory-ldap

https://mivocloud.com/ru/blog/OpenLDAP-cto-eto-takoe-i-zacem-eto-nujno

https://www.openldap.org/

Основные атрибуты Active Directory

https://docs.altlinux.org/ru-RU/domain/10.2/html/samba/ldapsearch.html

has been added to your cart:
Оформление заказа