Главная Security, Windows, Новое Синхронизация учетных записей средствами ILM 2007 между каталогом Active Directory и каталогом Novell eDirectory.
  • Синхронизация учетных записей средствами ILM 2007 между каталогом Active Directory и каталогом Novell eDirectory.

    image

    И так задача состоит в том, чтобы синхронизировать учетные записи между Active Directory и Novell eDirectory средствами ILM 2007 вернее его частью Microsoft Identity Integration Server:

    Фактически процесс выглядит следующим образом – при создании учетной записи в Active Directory она должна автоматически создаваться в Novell eDirectory, если учетную запись удалить из Active Directory то она автоматически удаляется из Novell eDirectory.

    Я развернул стенд, состоящий из трёх серверов и одной рабочей станции со следующим установленным программным обеспечением:

    1) Сервер 1 – Windows Server 2003 EE, ILM, SQL Server 2005 EE, Microsoft Visual Studio .NET 2003.

    2) Сервер 2 – Windows Server 2008 EE. Active Directory «nwtraders.msft».

    В Active Directory создал контейнер Sync для синхронизации учетных записей, все записи  созданые в этом контейнере, будут автоматически создаваться в eDirectory.

    clip_image002

    Рисунок 1 Организационная единица в AD

    Так же в Active Directory созданы 2 учетные записи, одна для сервера ILM с именем ILM вторая для коннектора Active Directory с именем Adconnector, обе учетные записи входят в состав группы администраторы домена. Так, как мы используем стенд в целях тестирования, нам не принципиально количество предоставленных прав учетным записям. В любых других случаях рекомендуется предоставлять права учетным записям согласно Best Practices и документацией.

    3) Сервер 3 – Novell Netware 6.1 + Service Pack 3(eDirectory 8.6.2). дерево NDS с корнем «o=org01».

    4) Рабочая станция 1 – Windows XP Professional + Service Pack 3, Novell Client

    image

    Рисунок 2 Общая схема стенда

    В нашей конфигурации служба Active Directory выступает в роли ведущего (инициатора изменений), Novell eDirectory – выступает в качестве ведомого. Все пользовательские записи заносятся в Active Directory при помощи Active Directory Users & Computers.

    И так, для начала процесса синхронизации нам необходимо внести некоторые атрибуты в метабазу ILM.

    Настройка атрибутов метаверсии ILM 2007

    Выбираем опцию Metaverse Designer, выделяем объект person, выбираем в поле Actions параметр add Attribute –> New attribute и устанавливаем следующие значения.

    Attribute name : userPassword

    Attribute type: Binary (indexable)

    Нажимаем два раза Ок.

    clip_image006

    Рисунок 3 Внесение новых атрибутов в метабазу ILM 2007

    Далее еще раз выделяем объект person, выбираем в поле Actions параметр add Attribute –> New attribute и устанавливаем следующие значения.

    Attribute name : userAccountControl

    Attribute type: Number

    Нажимаем два раза Ок.

    После настройки атрибутов, настраиваем первый коннектор к Active Directory с именем «Active Directory Connector»

    Выбираем Management Agents: Create

    В поле Management Agent for: выбираем Active Directory

    В поле Name указываем: Active Directory Connector

    Нажмите Next.

    clip_image008

    Рисунок 4 Настройка коннектора Active Directory

    В следующем окне указываем атрибуты подключения к Active Directory.

    Forest name: nwtraders.msft

    User name: ADAgent

    Password: пароль для учетной записи ADAgent

    Domain:nwtraders.msft

    Нажмите Next.

    clip_image010

    Рисунок 5 Настройка коннектора Active Directory

    В следующем окне Configure Directory Partitions:

    В поле Select Directory partitions: отмечаем чекбокс на DC=nwtraders,DC=msft

    Выбираем контейнеры, необходимые для работы для тестирования рассматривается контейнер Sync.

    Далее нажимаем кнопку Containers и выбираем контейнер Sync.

    Нажмите Ок.

    clip_image012

    Рисунок 6 Задание параметров учетной записи

    Нажмите Next.

    В следующем окне: Select Object Types

    Выбираем типы объектов для работы для тестирования выбран user, остальные обязательные.

    Отметьте чекбоксами: container / domainDNS / organizationUnit / user

    Нажмите Next.

    clip_image014

    Рисунок 7 Выбор контейнеров, необходимых для работы

    В окне: Select Atributes Отметьте чекбокс Show all, в качестве импортируемых атрибутов выберите следующие атрибуты:

    1. cn;
    2. displayName;
    3. facsimileTelephoneNumber;
    4. givenName;
    5. initials;
    6. mail;
    7. sAMAccountName;
    8. sn;
    9. userAccountControl;
    10. userPassword;

    Нажмите Next.

    clip_image016

    Рисунок 8 Выбор типов объектов для работы

    Фильтры соединителей не используются.

    Нажмите Next.

    clip_image018

    Рисунок 9 Настройка фильтров соединителей

    Далее конфигурируем операции проецирования и соединения объектов, сопоставляются объекты Active Directory с метабазой по атрибуту sAMaccountName и uid соответственно, и проецируются объекты user в объекты Person.

    Выбираем New Join Rule в поле Data source attribute: отметьте sAMAccountName

    В поле Metaverse attribute: uid

    Нажмите: Add condition

    Нажмите Ок.

    clip_image020

    Рисунок 10 Настройка проецирования объектов

    Далее нажмите кнопку New Projection Rule

    Нажмите Ок.

    clip_image022

    Рисунок 11 Настройка проецирования объектов

    Нажмите Ок и Next.

    clip_image024

    Рисунок 12 Конфигурирование операции проецирования и соединения объектов

    Далее конфигурируем поток атрибутов для операции импорта. Настройте потоки операций импорта согласно Рис 13.

    Нажмите Next.

    clip_image026

    Рисунок 13 Конфигурирование потока атрибутов для операции импорта

    Остальные закладки остаются без изменений.

    Нажмите Next, Next, Finish.

    clip_image028

    Рисунок 14 Конектор для Active Directory создан

    Далее нам необходимо сконфигурировать конектор для Novell Netware.

    Конфигурирация коннектора для Novell Netware с именем «Novell»

    Выбираем Management Agents: Create

    В поле Management Agent for: выбираем Novell eDirectory

    В поле Name указываем: Novell Connector

    Нажмите Next.

    clip_image030

    Рисунок 15 Конфигурирование коннектора для Novell Netware

    Задаем параметры подключения к LDAP интерфейсу, имя или IP адрес сервера, порт, DN пользователя с правами на чтение/запись соответствующий разделов каталога и пароль.

    Server:192.168.13.148

    Port:389

    User name: cn=admin,o=org01

    Password: пароль для учетной записи admin

    clip_image032

    Рисунок 16 Настройка параметров подключения к LDAP интерфейсу

    Далее выбираем контейнер, с которым будет проводиться тестирование – отмечаем чекбокс на ou=Users,o=org01.

    clip_image034

    Рисунок 17 Выбор контейнеров

    Выбираем объекты для работы, кроме обязательных добавляется inetOrgPerson.

    Нажмите Next.

    clip_image036

    Рисунок 18 Выбор списка атрибутов для работы

    Отмечаем чекбоксами список необходимых атрибутов для работы

    1. cn;
    2. displayName;
    3. facsimileTelephoneNumber;
    4. fullName;
    5. givenName;
    6. initials;
    7. Language;
    8. Mail;
    9. passwordAllowChange;
    10. sn;
    11. telephoneNumber;
    12. uid;
    13. userPassword;

    Нажмите Next.

    clip_image038

    Рисунок 19 Выбор объектов для работы

    Фильтры соединителей не используются.

    Нажмите Next.

    clip_image040

    Рисунок 20 Настройка фильтров соединителей

    Далее настраиваем проецирование объектов, они объединяются по атрибуту uid, и проецируются следующим образом – inetOrgPerson в person. (Рис. 22)

    Выбираем New Join Rule в поле Data source attribute: отметьте inetOrgPerson

    В поле Metaverse attribute: uid

    Нажмите: Add condition

    Нажмите Ок.

    Далее нажмите кнопку New Projection Rule

    Нажмите Ок.

    clip_image041

    Рисунок 21 Настройка проецирования объектов

    Нажмите Next.

    clip_image043

    Рисунок 22 Объединение объектов по атрибуту

    Далее конфигурируем поток атрибутов для операции экспорта. Настройте потоки операций экспорта согласно Рис 23.

    Нажмите Next.

    clip_image045

    Рисунок 23 Конфигурация экспорта атрибутов

    Здесь используются константы для атрибутов Language и passwordAllowChange с присвоенными им значениями ENGLISH и TRUE. Это вырожденный случай, для реальных задание этих значений может быть возложено на обработчики процедур экспорта.

    На данном этапе выяснилось, что атрибут userPassword недоступен ни для экспорта, ни для импорта, задание констант для него также не применимо. Таким образом, для данного атрибута доступно задание только через процедуры обработчики правил управления (provisioning rules), либо правила экспорта (export rules).

    Нажмите Next.

    Вкладка Deprovisioning остается без изменений.

    Нажмите Next.

    Вкладка Extensions остается без изменений, поскольку выбрано задание параметров коннектора в правилах управления metaverse. Если задавать параметры атрибутов в правилах экспорта, то здесь необходимо указать имя dll модуля с процедурами обработчиками.

    Конфигурируются правила управления (metaverse extension).

    clip_image047

    Рисунок 24 Конфигурирование правил управления

    Создаем проект «Create Rules Extension Project» и отмечаем чекбокс Enable metaverse rules extension и Enable Provisioning Rules Extension.

    Далее открываем Visual Studio и в окне Visual Studio собираем проект и указываем имя dll библиотеки в поле Rules extension name.

    Создайте проект на языке C#. Есть возможность создания проекта на Visual Basic. Visual Studio может быть установлен и на другом компьютере, но тогда отсутствует возможность интеграции с ILM.

    Требуется закомментировать следующие строки (выделены) и вставить после них строки кода приведенного ниже.

    clip_image049

    Рисунок 25 Компиляция кода

    Перед созданием библиотеки требуется внести изменения в код где нужно сменить

    имя контейнера и имя организации используемого в eDirectory.

    Container = “ou=Контейнер в eDirectory ,o=Организация в eDirectory”;

    Так же требуется указать имя агента используемого для синхронизации ILM с Novell eDirectory.

    ManagementAgent = mventry.ConnectedMAs[“ имя агента Novell Connector “];

    Код для реализации правила управления для коннектора с именем Novell Connector:

    Хочется отдельно   отметить, все процедуры детально расписаны на MSDN,   авторство в написании этого кода принадлежит не мне, я к сожалению в программировании не очень. Однако любой, кто понимает  в программировании  без труда разберется с кодом и модифицирует его под свои нужды – главное методика :-). —————————————————————————————————-

     

    void IMVSynchronization.Provision (MVEntry mventry)

    {

    const long ADS_UF_SCRIPT = 0x0001; // The logon script will be executed

    const long ADS_UF_ACCOUNTDISABLE = 0x0002; // Disable user account

    const long ADS_UF_HOMEDIR_REQUIRED = 0x0008; // Requires a root directory

    const long ADS_UF_LOCKOUT = 0x0010; // Account is locked out

    const long ADS_UF_PASSWD_NOTREQD = 0x0020; // No password is required

    const long ADS_UF_PASSWD_CANT_CHANGE = 0x0040; // The user cannot change the password

    const long ADS_UF_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 0x0080; // Encrypted password allowed

    const long ADS_UF_TEMP_DUPLICATE_ACCOUNT = 0x0100; // Local user account

    const long ADS_UF_NORMAL_ACCOUNT = 0x0200; // Typical user account

    const string USER_ACCOUNT_CONTROL_PROP = “userAccountControl”;

    ConnectedMA ManagementAgent; // Management agent object

    int Connectors = 0; // Management agent connectors

    ReferenceValue DN; // Distinguished name attribute

    string Container; // Container name

    string RDN ; // Relative distinguished name strings

    CSEntry csentry; // Connector space entry object

    ValueCollection vcObjectClass; //ObjectClass collection object

    // Determine the state of the metaverse object.

    if(mventry[USER_ACCOUNT_CONTROL_PROP].IsPresent)

    {

    long currentValue=mventry[USER_ACCOUNT_CONTROL_PROP].IntegerValue;

    if((currentValue&ADS_UF_ACCOUNTDISABLE)!=ADS_UF_ACCOUNTDISABLE)

    {

    // Get the management agent connectors.

    ManagementAgent = mventry.ConnectedMAs[“Novell connector”];

    Connectors = ManagementAgent.Connectors.Count;

    // Construct the distinguished name.

    Container = “ou=Users,o=org01”;

    RDN = “cn=” + mventry[“uid”].Value;

    DN = ManagementAgent.EscapeDNComponent(RDN).Concat(Container);

    // If there are no connectors, create the connector, set the distinguished

    // name attribute, and then add the new connector to the collection.

    if(0 == Connectors)

    {

    csentry = ManagementAgent.Connectors.StartNewConnector(“inetOrgPerson”);

    csentry.DN = DN;

    vcObjectClass=Utils.ValueCollection(csentry.ObjectClass.ToString());

    vcObjectClass.Clear();

    vcObjectClass.Add(“inetOrgPerson”);

    vcObjectClass.Add(“organizationalPerson”);

    vcObjectClass.Add(“person”);

    vcObjectClass.Add(“ndsLoginProperties”);

    csentry.CommitNewConnector();

    csentry.ObjectClass=vcObjectClass;

    if (csentry[“userPassword”].IsMultivalued)

    {

    SetNovellPW(csentry,”password”);

    }

    }

    // If a connector exists, get the existing connector and assign the new

    // distinguished name value. If the original attribute value is the same

    // as the new distinguished name, then the original attribute value

    // remains the same.

    else if(1 == Connectors)

    {

    csentry = ManagementAgent.Connectors.ByIndex[0];

    csentry.DN = DN;

    }

    // Throw an exception if more than one connector exists.

    else

    {

    string ExceptionMessage;

    ExceptionMessage = “Multiple Connectors on Management Agent”;

    throw new UnexpectedDataException(ExceptionMessage);

    }

    }

    }

    }

    void SetNovellPW(CSEntry csentry, string pw)

    {

    byte[] password = new byte[0];

    password = System.Text.UTF8Encoding.UTF8.GetBytes(pw);

    byte[] ExtendedPassword = new byte[password.Length+2];

    for(int x=0;x<password.Length;++x)

    {

    ExtendedPassword[x] = password[x];

    }

    csentry[“userPassword”].Values.Add(ExtendedPassword);

    return;

    }

    —————————————————————————————————–

    После внесения изменений в код требуется собрать библиотеку MVExtension.dll для этого выберите в списке меню Build пункт Build solution. При этом библиотека автоматически с компилируется и будет помещена по следующему адресу

    C:\Program Files\Microsoft Identity Integration Server\Extensions

    Данный метод вызывается при операциях синхронизации коннекторов и метабазы. Выполняются следующие проверки:

    1) Проверка того, что методу передан объект из AD коннектора и является записью�
         пользователя.

    2) Проверка наличия атрибута AccountProperties.

    3) Проверка, не выставлен ли у этого аккаунта флаг AccountDisable.

    Если всё это выполнено, начинается работа с коннектором Novell и проверяется, есть ли соединители в этом коннекторе:

    Если их нет, то создаётся новый соединитель, в контейнере ou=Users,o=org01. Для создания пользовательской учётной записи в Novell eDirectory необходимо создать объект inetOrgPerson с атрибутом objectClass со значениями inetOrgPerson, organizationalPerson, person, ndsLoginProperties. Также здесь устанавливается начальный пароль для пользователя «password». Атрибут userPassword в eDirectory доступен только для записи, и является служебным, для задания пароля пользователя. Процедура SetNovellPW выполняет операцию перевода строки в массив байт, и передачи этого значения в коннектор.

    Если соединитель есть и он один, то это значит, что объект, либо просто обновил значения атрибутов, либо перемещён. При этом необходимо обновить значение атрибута DN.

    Остальные атрибуты буду экспортированы из metaverse согласно установленным правилам экспорта.

    Заносится тестовая база CN=Users,DC=nwtraders,DC=msft в Active Directory, выполняется процедура полного импорта данных из AD коннектора и экспорта данных в Novell. Novell Client успешно входит в систему, под новыми записями с паролем «password».

    Конфигурация Run Profiles для коннектора Active Directory Connector.

    Конфигурация Run Profiles для агента Active Directory Connector

    clip_image051

    Рисунок 26 Конфигурация Run Profiles для агента Active Directory

    В конфигурация Run1 используется тип синхронизации

    Step1 – Full Import (Stage Only)

    clip_image053

    Рисунок 27 Конфигурация Run Profiles для агента Active Directory

    В конфигурация Run3 используется тип синхронизации

    Step1 – Full Synchronization

    В конфигурации Normal используется

    Step1 – Full import and Full Synchronization

    Конфигурации Run Profiles для агента Novell Connector

    В конфигурация Run2 используется тип синхронизации

    Step1 – Full Import (Stage Only)

    clip_image055

    Рисунок 28 Конфигурации Run Profiles для агента Novell

    В конфигурации Run4 используется тип синхронизации

    Step1 – Full Synchronization

    Step 2 – Export

    В конфигурации Normal используется

    Step1 – Full import and Full Synchronization

    Step 2 – Export

    Запуск процедур Run Profiles

    Запуск процедур Run Profiles необходимо выполнять согласно номерам

    1. Run1
    2. Run2
    3. Run3
    4. Run4
    5. Normal
    6. Normal

    После синхронизации данных учетная запись, созданная в Active Directory будет создана в eDirectory. То есть при создании учетной записи в Active Directory она автоматически создается в Novell eDirectory, после удаления учетной записи из AD она автоматически удаляется из Novell eDirectory.

    Далее создаем тестовую среду для работы компьютеров с аутентификацией в двух местах: в Novell eDirectory и в Active Directory. Текущая конфигурация клиентов Windows XP + Novell Client.

    Заполняем закладку клиента Novell с указанием имени пользователя и домена Windows .

    clip_image057

    Рисунок 29 Закладка для указания имени пользователя и домена Windows

    После входа в систему, появляется новое окно, в котором необходимо указать пароль Windows. Необходимо отметить чекбокс изменения пароля Windows после успешного аутентификации в Novell.

    В окне смены пароля есть возможность одновременно сменить пароль Novell и пароль Windows.

    clip_image059

    Рисунок 30 Ввод пароля Windows

    clip_image061

    Рисунок 31 Смена пароля Novell и пароля Windows

    Таким образом, получена среда с двойной аутентификацией. Синхронизация паролей возложена на клиента Novell.

    Денис Абраменко

Комментарии

  1. Денис, не знаю будут ли еще отзывы на статью, Novell, наверное, редкий зверь
    Но от меня Вам огроменное человеческое спасибо-если удасться сделать синхронизацию=-10 телефонных звонков в день от юзеров.
    Два раза (недели по две) пытался взять MIIS штурмом-не получилось

  2. Денис действительно делает серьезный и умный контент, на который не жалко времени выложить в PDF.

  3. не придираясь к мелочам NW 6.1 не существует
    есть nw 6 sp 5
    nw 6.5 sp7
    после-suse

  4. C NW не работал, работать с ним после Win, мягко говоря не привычно, сервер с NW помогал настроить коллега по работе который более дружит с NW, так, что не судите строго за возможные проколы. Задача статьи показать вектор направления в работе с ILM 🙂

  5. Денис, какой там строгий суд!

  6. Спасибо за замечательные статьи, Денис.

    Вот только олбанизация русского языка очень печалит. Например, “И так” пишется как “Итак”.

    Но все-таки Вы не используете английские термины через каждое слово, как это делают докладчки на TechDays. Так что поздравляю.

  7. Статья наверное полезная. Что не понравилось:
    1)Не увеличиваются картинки (массовая проблемма на этом сайте)
    2)Нет объяснений почему так, а не иначе. Не статья, а свод законов 🙂

  8. MaximillianGreat
    два вопроса
    1) а где Ваши статьи?
    2) Ваша фамилия, не Зинченко, случайно,mr.Great?

  9. Коллеги, спасибо за ваши комментарии!
    Написаниями статей занимаюсь относительно недавно.
    Постараюсь учесть все замечания, особое внимание уделить орфографии и разъяснению разного рода неточностей, а так же правильно формировать графические объекты.

  10. Присоединяюсь ко второму вопросу Иванова Дмитрия) Очень любопытно. Я так понимаю отсутсвия ответа будет означать правильное предположение)

  11. Денис Абраменко

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

    Честное слово, можете забить на все это при подобном содержании:)
    За такое писателям уже начинают платить гонорар.

  12. Отвечаю:
    1)нету
    2)не Зинченко

    Зинченко, я так понимаю, в связи со сменой деятельности редоко будет в блогсфере появлятся. Хотя кто его знает 🙂

  13. Вот несколько материалов по ILM
    http://dimsan.blogspot.com/search/label/ILM%202007

  14. Subject to here