1 1 1 1 1 1 1 1 1 1 Рейтинг 0.00 (0 голосов)

Модификация AD атрибутов

В данной статье расскажем как модифицировать с помощью скрипта php  атрибуты пользователя домена Windows.

Вот неполный список нашего пользователя и его атрибутов в Active Directory  отображен на рисунке ниже.

список атрибутов

Итак если мы хотим  модифицировать, изменить данные  указанные в атрибутах ( ФИО, должность, телефон, город, адрес и так далее), нам необходиом использовать следующий небольшой скрипт на php

$ldaprdn  = 'имя';     // ldap rdn или dn
$ldappass = 'пароль';  // ассоциированный пароль
 
как обычно сначала  вводим имя и пароль на доступ к LDAP каталогу.
Права этого пользователя должны быть достаточны для того, что бы изментяь атрибуты.
имя - это имя пользователя, оно может быть как в виде rdn  то есть сокращенной записи типа admin, так и в виде dn записи cn=admin,ou=samara,dc=ru
 
$ldapconn = ldap_connect("IP_address")     or die("Не могу соединиться с сервером LDAP.");
 
Подключаемся к AD серверу (контроллеру домена). Порт по умолчанию стандартный (389)
 
if ($ldapconn) {
    $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
    if ($ldapbind) {         echo "LDAP-привязка успешна...";     } else {         echo "LDAP-привязка не удалась...";     }
}
 
 
проверяем, успешно ли прошло соединение
 
$dn = "OU=XXXX,OU=YYYY,DC=samara,DC=ru";
 
указываем DN  - путь иерархии  в каталоге LDAP где находится наш пользователь.
 
$filter="(mail=ivanov@gmail*)";
 
Указываем, по какому аттрибуту будем искать  пользователя. В нашем примере мы ищем пользователя у кого в атрибуте mail адрес электронной почты начинается на ivanov@gmail
Звездочка означает что  электронный адрес  может  быть таким ivanov@gmail.com  или ivanov@gmail.ru или  вообще ivanov@gmailik.net
 
$sr=ldap_search($ldapconn, $dn, $filter);
 
Запускаем поиск  по каталогу LDAP  с заданными аттрибутами
 
$info = ldap_get_entries($ldapconn, $sr);
 
Записываем в переменную  полученные совпадения
Если нашли одного пользователя то все атрибуты можно вытащить вот так
echo $info[0]["mail"][0];
тогда система даст информацию о электронной почте
или 
$info[0]["telephoneNumber"][0];
тогда мы  увидим телефонный номер этого сотрудника.
 
Что же нам осталось сделать что бы изменить данные в LDAP каталоге ?
 
$entry["mobile"][0]=892725111110
$entry["info"][0]=iconv("UTF-8","Cp1251","У этого пользователя мы сменили аттрибуты");
 
Создать  массив $entry с теми атрибутами, что нам необходимо сменить и присваиваем этим значениям массива новые данные.
 
Если мы пишем данные в какой либо атрибут  в национальной кодировке в частности русской, не забудьте переконвертировать его в правильный формат.
 
Это очень важно когда новые  данные берутся из какого либо файла , в отличной кодировке.
 
Если не сделать переконвертацию, мы получим ошибку и  наш атрибут не будет изменен.
 
ldap_modify ($ldapconn, $info[0]["dn"], $entry);
 
И последняя команда которая модифицирует атрибуты объекта который имеет уникальный dn равный $info[0]["dn"]
 
Вот и всё. Мы научились записывать в каталог Active Directory  новые данные через командную строку.