Мы рассмотрим простой скрипт для получение всех возможных почтовых адресов по LDAP из Active Directory. Скрипт можно взять за основу и использовать для других реализаций глобального каталога.
Готовим систему
На компьютере, где будет запускаться скрипт
Сервер Active Directory
Процесс написания скрипта
Подключение по ldap
Получение пользователей AD
Фильтр по почтовому атрибуту
Выгрузка списка адресов электронной почты
Пример готового скрипта
Рассмотрим процесс подготовки компьютера, на котором будет запускаться скрипт и сервера Active Directory.
В данном примере скрипт будет запускаться на компьютере с Linux.
1. Для начала установим сам Python и дополнительные компоненты:
а) На системах RPM (Red Hat, CentOS, Fedora):
yum install python3 python3-devel openldap-devel
б) На системах DEB (Debian, Ubuntu):
apt-get install python3 python3-pip libsasl2-dev python-dev libldap2-dev libssl-dev
2. Также установим модуль ldap для python:
pip3 install python-ldap
3. Создадим каталог, в котором будет находиться скрипт:
mkdir /scripts
Создадим сам скрипт:
vi /scripts/get_email_from_ad.py
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
* в данном примере мы создали скрипт get_email_from_ad.py с двумя строчками — шебангом и определением кодировки.
4. Даем разрешение скрипту на запуск:
chmod +x /scripts/get_email_from_ad.py
Для подключения к глобальному каталогу по LDAP нам нужна учетная запись для прохождения авторизации на сервере. Нужна учетная запись с минимальными правами.
Лучше всего для задач скрипта создать отдельного пользователя. В данной инструкции для связывания с Active Directory будет использоваться учетная запись export_emails. Создать ее можно с помощью инструмента Пользователи и компьютеры Active Directory .
Чтобы было проще разобраться, начнем разработку по шагам.
Для начала просто подключимся к глобальному каталогу. В наш скрипт добавим:
…
import ldap
try:
lconn = ldap.initialize(‘ldap://remontka.local:389’)
lconn.protocol_version = ldap.VERSION3
lconn.set_option(ldap.OPT_REFERRALS, 0)
lconn.simple_bind_s(‘export_emails@remontka.local’, ‘export_emails_12345!’)
except ldap.SERVER_DOWN:
print(«Error connection to AD»)
* в данном примере мы подключаемся к серверу remontka.local (домен должен разрешаться в любой из серверов глобального каталога) по порту 389 . Для прохождения аутентификации мы используем логин export_emails и пароль export_emails_12345! (учетная запись, которая заранее нами была создана в Active Directory). Также мы указываем, что используется 3 версия протокола ldap и не должны использоваться рефералы.
Пробуем запустить скрипт:
/scripts/get_email_from_ad.py
Он должен вернуть пустую строку. Если мы получим ошибку, то необходимо проверить связь с сервером и корректность введелнных данных (логина и пароля).
Научимся извлекать пользователей по ldap. Добавим в наш скрипт:
…
base = «DC=remontka,DC=local»
scope = ldap.SCOPE_SUBTREE
filter = «(&(objectcategory=person))»
attrs = [‘displayname’,’title’]
result_set = []
ldap_result_id = lconn.search_ext(base, scope, filter, attrs)
try:
while 1:
result_type, result_data = lconn.result(ldap_result_id, 0)
if (result_data == []):
break
else:
if result_type == ldap.RES_SEARCH_ENTRY:
result_set.append(result_data)
except ldap.SIZELIMIT_EXCEEDED:
print()
print(result_set)
* где:
Запускаем наш скрипт:
/scripts/get_email_from_ad.py
Мы должны получить массив данных всех найденных пользователей и их атрибутов.
На этом этапе мы отсеем все объекты, у которых нет адреса электронной почты. В итоге, наш массив данных будет содержать пользователей и атрибуты с адресами электронной почты.
Откроем наш скрипт и заменим строки:
…
filter = «(&(objectcategory=person))»
attrs = [‘displayname’,’title’]
…
… на:
filter = «(&(mail=*))»
attrs = [‘mail’,’proxyAddresses’]
* в данном примере мы выгрузим все объекты, у которых есть адрес почты (не пустой атрибут mail ). Нас будут интересовать 2 атрибута — собственно, mail и proxyAddresses , в котором могут быть перечислены все возможные адреса объекта.
* данный фильтр позволит получить список не только пользователей, но и групп. Возможно, вам это не нужно. Тогда можно изменить наш фильтр, например на «(&(objectcategory=person)(mail=*))» — тогда мы получим только пользователей, у которых есть электронные адреса.
Запускаем наш скрипт:
/scripts/get_email_from_ad.py
Мы должны получить список объектов с адресами электронной почты.
На конец, вытащим почтовые адреса и составим общий список.
В нашем скрипте удаляем строку:
print(result_set)
Добавляем строки:
all_emails = []
for user in result_set:
proxyAddresses = user[0][1].get(‘proxyAddresses’)
mail = user[0][1].get(‘mail’)
if (proxyAddresses):
for email_b in proxyAddresses:
email = email_b.decode(«utf-8»)
all_emails.append(email.split(‘:’)[1])
else:
all_emails.append(mail[0].decode(«utf-8»))
unique_all_emails = list(set(all_emails))
print(*unique_all_emails, sep = ‘n’)
* и так, данными действиями мы перебираем полученный массив пользователей и извлекаем все email-адреса. Если у пользователя не пустой атрибут proxyAddresses , значит берем адреса из него, если у пользователя есть только mail , то берем его. В итоге, все данные помещаем в массив all_emails , который в конце преобразовываем для получения уникальных значений (в каталоге могут хранится одинаковые email для разных объектов).
Запускаем наш скрипт:
/scripts/get_email_from_ad.py
Мы должны получить список уникальных email-адресов для всех объектов, которые были найдены в глобальном каталоге.
Написанный нами скрипт можно представить так:
Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…
Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…
Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…
Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…
YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…
Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…