И так задача состоит в том, чтобы синхронизировать учетные записи между 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.
Рисунок 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
Рисунок 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)
Нажимаем два раза Ок.
Рисунок 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.
Рисунок 4 Настройка коннектора Active Directory
В следующем окне указываем атрибуты подключения к Active Directory.
Forest name: nwtraders.msft
User name: ADAgent
Password: пароль для учетной записи ADAgent
Domain:nwtraders.msft
Нажмите Next.
Рисунок 5 Настройка коннектора Active Directory
В следующем окне Configure Directory Partitions:
В поле Select Directory partitions: отмечаем чекбокс на DC=nwtraders,DC=msft
Выбираем контейнеры, необходимые для работы для тестирования рассматривается контейнер Sync.
Далее нажимаем кнопку Containers и выбираем контейнер Sync.
Нажмите Ок.
Рисунок 6 Задание параметров учетной записи
Нажмите Next.
В следующем окне: Select Object Types
Выбираем типы объектов для работы для тестирования выбран user, остальные обязательные.
Отметьте чекбоксами: container / domainDNS / organizationUnit / user
Нажмите Next.
Рисунок 7 Выбор контейнеров, необходимых для работы
В окне: Select Atributes Отметьте чекбокс Show all, в качестве импортируемых атрибутов выберите следующие атрибуты:
- cn;
- displayName;
- facsimileTelephoneNumber;
- givenName;
- initials;
- mail;
- sAMAccountName;
- sn;
- userAccountControl;
- userPassword;
Нажмите Next.
Рисунок 8 Выбор типов объектов для работы
Фильтры соединителей не используются.
Нажмите Next.
Рисунок 9 Настройка фильтров соединителей
Далее конфигурируем операции проецирования и соединения объектов, сопоставляются объекты Active Directory с метабазой по атрибуту sAMaccountName и uid соответственно, и проецируются объекты user в объекты Person.
Выбираем New Join Rule в поле Data source attribute: отметьте sAMAccountName
В поле Metaverse attribute: uid
Нажмите: Add condition
Нажмите Ок.
Рисунок 10 Настройка проецирования объектов
Далее нажмите кнопку New Projection Rule
Нажмите Ок.
Рисунок 11 Настройка проецирования объектов
Нажмите Ок и Next.
Рисунок 12 Конфигурирование операции проецирования и соединения объектов
Далее конфигурируем поток атрибутов для операции импорта. Настройте потоки операций импорта согласно Рис 13.
Нажмите Next.
Рисунок 13 Конфигурирование потока атрибутов для операции импорта
Остальные закладки остаются без изменений.
Нажмите Next, Next, Finish.
Рисунок 14 Конектор для Active Directory создан
Далее нам необходимо сконфигурировать конектор для Novell Netware.
Конфигурирация коннектора для Novell Netware с именем «Novell»
Выбираем Management Agents: Create
В поле Management Agent for: выбираем Novell eDirectory
В поле Name указываем: Novell Connector
Нажмите Next.
Рисунок 15 Конфигурирование коннектора для Novell Netware
Задаем параметры подключения к LDAP интерфейсу, имя или IP адрес сервера, порт, DN пользователя с правами на чтение/запись соответствующий разделов каталога и пароль.
Server:192.168.13.148
Port:389
User name: cn=admin,o=org01
Password: пароль для учетной записи admin
Рисунок 16 Настройка параметров подключения к LDAP интерфейсу
Далее выбираем контейнер, с которым будет проводиться тестирование – отмечаем чекбокс на ou=Users,o=org01.
Рисунок 17 Выбор контейнеров
Выбираем объекты для работы, кроме обязательных добавляется inetOrgPerson.
Нажмите Next.
Рисунок 18 Выбор списка атрибутов для работы
Отмечаем чекбоксами список необходимых атрибутов для работы
- cn;
- displayName;
- facsimileTelephoneNumber;
- fullName;
- givenName;
- initials;
- Language;
- Mail;
- passwordAllowChange;
- sn;
- telephoneNumber;
- uid;
- userPassword;
Нажмите Next.
Рисунок 19 Выбор объектов для работы
Фильтры соединителей не используются.
Нажмите Next.
Рисунок 20 Настройка фильтров соединителей
Далее настраиваем проецирование объектов, они объединяются по атрибуту uid, и проецируются следующим образом – inetOrgPerson в person. (Рис. 22)
Выбираем New Join Rule в поле Data source attribute: отметьте inetOrgPerson
В поле Metaverse attribute: uid
Нажмите: Add condition
Нажмите Ок.
Далее нажмите кнопку New Projection Rule
Нажмите Ок.
Рисунок 21 Настройка проецирования объектов
Нажмите Next.
Рисунок 22 Объединение объектов по атрибуту
Далее конфигурируем поток атрибутов для операции экспорта. Настройте потоки операций экспорта согласно Рис 23.
Нажмите Next.
Рисунок 23 Конфигурация экспорта атрибутов
Здесь используются константы для атрибутов Language и passwordAllowChange с присвоенными им значениями ENGLISH и TRUE. Это вырожденный случай, для реальных задание этих значений может быть возложено на обработчики процедур экспорта.
На данном этапе выяснилось, что атрибут userPassword недоступен ни для экспорта, ни для импорта, задание констант для него также не применимо. Таким образом, для данного атрибута доступно задание только через процедуры обработчики правил управления (provisioning rules), либо правила экспорта (export rules).
Нажмите Next.
Вкладка Deprovisioning остается без изменений.
Нажмите Next.
Вкладка Extensions остается без изменений, поскольку выбрано задание параметров коннектора в правилах управления metaverse. Если задавать параметры атрибутов в правилах экспорта, то здесь необходимо указать имя dll модуля с процедурами обработчиками.
Конфигурируются правила управления (metaverse extension).
Рисунок 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.
Требуется закомментировать следующие строки (выделены) и вставить после них строки кода приведенного ниже.
Рисунок 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
Рисунок 26 Конфигурация Run Profiles для агента Active Directory
В конфигурация Run1 используется тип синхронизации
Step1 – Full Import (Stage Only)
Рисунок 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)
Рисунок 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 необходимо выполнять согласно номерам
- Run1
- Run2
- Run3
- Run4
- Normal
- Normal
После синхронизации данных учетная запись, созданная в Active Directory будет создана в eDirectory. То есть при создании учетной записи в Active Directory она автоматически создается в Novell eDirectory, после удаления учетной записи из AD она автоматически удаляется из Novell eDirectory.
Далее создаем тестовую среду для работы компьютеров с аутентификацией в двух местах: в Novell eDirectory и в Active Directory. Текущая конфигурация клиентов Windows XP + Novell Client.
Заполняем закладку клиента Novell с указанием имени пользователя и домена Windows .
Рисунок 29 Закладка для указания имени пользователя и домена Windows
После входа в систему, появляется новое окно, в котором необходимо указать пароль Windows. Необходимо отметить чекбокс изменения пароля Windows после успешного аутентификации в Novell.
В окне смены пароля есть возможность одновременно сменить пароль Novell и пароль Windows.
Рисунок 30 Ввод пароля Windows
Рисунок 31 Смена пароля Novell и пароля Windows
Таким образом, получена среда с двойной аутентификацией. Синхронизация паролей возложена на клиента Novell.
Денис Абраменко
Денис, не знаю будут ли еще отзывы на статью, Novell, наверное, редкий зверь
Но от меня Вам огроменное человеческое спасибо-если удасться сделать синхронизацию=-10 телефонных звонков в день от юзеров.
Два раза (недели по две) пытался взять MIIS штурмом-не получилось
Денис действительно делает серьезный и умный контент, на который не жалко времени выложить в PDF.
не придираясь к мелочам NW 6.1 не существует
есть nw 6 sp 5
nw 6.5 sp7
после-suse
C NW не работал, работать с ним после Win, мягко говоря не привычно, сервер с NW помогал настроить коллега по работе который более дружит с NW, так, что не судите строго за возможные проколы. Задача статьи показать вектор направления в работе с ILM 🙂
Денис, какой там строгий суд!
Спасибо за замечательные статьи, Денис.
Вот только олбанизация русского языка очень печалит. Например, “И так” пишется как “Итак”.
Но все-таки Вы не используете английские термины через каждое слово, как это делают докладчки на TechDays. Так что поздравляю.
Статья наверное полезная. Что не понравилось:
1)Не увеличиваются картинки (массовая проблемма на этом сайте)
2)Нет объяснений почему так, а не иначе. Не статья, а свод законов 🙂
MaximillianGreat
два вопроса
1) а где Ваши статьи?
2) Ваша фамилия, не Зинченко, случайно,mr.Great?
Коллеги, спасибо за ваши комментарии!
Написаниями статей занимаюсь относительно недавно.
Постараюсь учесть все замечания, особое внимание уделить орфографии и разъяснению разного рода неточностей, а так же правильно формировать графические объекты.
Присоединяюсь ко второму вопросу Иванова Дмитрия) Очень любопытно. Я так понимаю отсутсвия ответа будет означать правильное предположение)
Денис Абраменко
Постараюсь учесть все замечания, особое внимание уделить орфографии и разъяснению разного рода неточностей, а так же правильно формировать графические объекты
Честное слово, можете забить на все это при подобном содержании:)
За такое писателям уже начинают платить гонорар.
Отвечаю:
1)нету
2)не Зинченко
Зинченко, я так понимаю, в связи со сменой деятельности редоко будет в блогсфере появлятся. Хотя кто его знает 🙂
Вот несколько материалов по ILM
http://dimsan.blogspot.com/search/label/ILM%202007
Subject to here