Active directory for application mode

Active directory for application mode

Що таке ADAM і для чого він потрібен?

Установка і початкова настройка

Так само користувачеві пропонується імпортувати LDF-скрипти, що розширюють схему такими об'єктами як User і User-Proxy. Якщо ви збираєтеся використовувати об'єкти цих типів, ви можете створити ці класи в процесі установки. Якщо ж спочатку використання таких об'єктів не планується, то імпортувати нічого не потрібно. У будь-якому випадку, це можна буде зробити і після установки.

засоби адміністрування

Засоби адміністрування є, на мій погляд, одним з найбільш слабких місць ADAM - вони являють собою великий набір різних, часом не дуже зручних у використанні утиліт (див. Таблицю 1).

Утиліта командного рядка для управління реплікацією.

Таблиця 1. Програми адміністрування ADAM.

З цього списку видно, що для адміністрування в основному застосовуються утиліти командного рядка, що ніяк не можна назвати зручним. Крім того, оскільки, в більшості випадків, супроводом додатків займаються люди, далекі від адміністрування операційної системи - було б не погано мати більш зручні способи роботи з ADAM.

Майже всі представлені утиліти знаходяться в каталозі, в який був встановлений ADAM, найчастіше це C: \ WINDOWS \ ADAM. Виняток становить ADAM Schema. Для підключення цієї утиліти необхідно запустити Microsoft Management Console (MMC), в меню File додати snap-in "ADAM Schema", а потім зберегти файл .MMC.

Робота з ADAM

поняття розділу

Важливим поняттям в ADAM є розділ (partition). Розділ є контейнером верхнього рівня, в якому може зберігатися ієрархія об'єктів. Звичайно, додаток може використовувати і кілька розділів для зберігання даних, однак здійснювати пошук і встановлювати зв'язки між об'єктами можна тільки усередині одного розділу.

В процесі установки створюються два системних розділу, використовуваних для зберігання конфігурації і схеми. Створити новий розділ можна за допомогою утиліти LDP.EXE. Для цього треба запустити програму, підключитися до необхідної службі ADAM, встановити з'єднання (bind) і виконати кілька маніпуляцій, а саме:

  • У меню Browse вибрати пункт Add child.
  • В поле Dn ввести повне ім'я (distinguished name) нового розділу.
  • В поле Attribute ввести ObjectClass. в поле Values ​​- container і натиснути Enter.
  • Потім в полі Attribute ввести InstanceType. в поле Values ​​- 5 і натиснути Enter.
  • Натиснути Run.

Active directory for application mode

Малюнок 1. Утиліта LDP.EXE - створення нового розділу.

Новий розділ буде створений, а ви отримаєте повідомлення про успішно виконану операцію.

Робота з даними в ADAM

Після того як розділ створено, можна приступати до заповнення його даними, необхідними для роботи програми. Одиницею даних в ADAM є об'єкт. Кожен об'єкт має набір атрибутів, що визначаються класом об'єкта. Деякі з атрибутів є загальними для всіх класів - атрибути, успадковані від класу top. Найбільш важливі з них:

  • name - коротку назву об'єкта (MyObject1);
  • distinguishedName - повне ім'я об'єкта, унікальне в межах сервера значення, ідентифікує об'єкт (CN = MyObject1, OU = MyApp, O = MyCompany, C = RU, див. нижче);
  • instanceType - системне значення, що визначає поведінку об'єкта. Зокрема, цей атрибут вказує, чи може об'єкт бути змінений вручну, або він є реплікою об'єкта на сервері, з яким даний сервер синхронізується.
  • objectClass - клас об'єкта, визначає набір атрибутів і поведінку об'єкта.

distinguishedName містить ім'я об'єкта, а так само імена всіх "контейнерних" об'єктів - каталогів, які його містять. Частиною distinguishedName є повне ім'я розділу. Ім'я кожного об'єкта в повному імені передує префіксом, що вказує на тип об'єкту. Ось розшифровка деяких з цих абревіатур:

Основним засобом створення, модифікації і видалення об'єктів в ADAM є "ADAM ADSI Edit".

Active directory for application mode

Малюнок 2. Зовнішній вигляд утиліти "ADAM ADSI Edit".

Після підключення до певного розділу потрібного сервера можна додавати власні об'єкти в ієрархію. У діалоговому вікні створення нового об'єкта вам буде запропоновано вибрати клас, від якого буде успадкований об'єкт. Об'єкт певного класу може містити вкладені об'єкти класів, для яких він (клас) прописаний в схемі як можливий "батько".

розширення схеми

Описане вище було б абсолютно марно, якби не можна було розширювати схему ADAM, тобто додавати власні класи і атрибути. На щастя, Microsoft подбав про це, і в нашому розпорядженні є утиліта "ADAM Schema".

Active directory for application mode

Малюнок 3. Зовнішній вигляд утиліти "ADAM Schema".

Схема - формальний опис вмісту та структури служби каталогів - являє собою набір пов'язаних між собою класів, які в свою чергу складаються з набору атрибутів.

Нижче наведені деякі терміни, необхідні для розуміння суті схеми і принципів її оновлення.

1. Атрибут - поле даних, що характеризує будь-яке властивість об'єкта. Об'єкт може містити тільки атрибути, прописані в схемі для його класу.

2. Клас - формальний опис типу об'єкта в службі каталогів.

3. Об'єкт - одиниця даних в службі каталогів.

4. Ідентифікатор об'єкта (OID) - унікальне числове значення, однозначно ідентифікує елемент даних, синтаксису та інші частини розподілених додатків. Подібні ідентифікатори можна виявити в різних додатках і системах, для яких важлива глобальна унікальність елемента системи. Приклади таких додатків: додатки OSI, служба каталогів X.500 і SNMP. Ідентифікатори мають деревоподібну структуру, в якій головне джерело, такий як ISO, виділяє інтервал / піддерево для використання молодшими джерелами ідентифікаторів, які, в свою чергу, виділяють піддерев для дочірніх джерел. Розглянемо приклад з MSDN. OID = "1.2.840.113556.1.5.4". тут:

  • 1 - ISO, кореневої джерело, виділив "1.2" для ANSI;
  • 2 - ANSI, виділив "1.2.840" для США;
  • 840 - США, виділив "1.2.840.113556" для Microsoft;
  • 113556 - Microsoft;
  • 1 - Microsoft DS;
  • 5 - класи NTDS;
  • 4 - клас Builtin-Domain.

5. X.500 - система стандартів, розроблена спільно ISO і ITU (відома як CCITT), яка визначає способи іменування, подання даних і протоколи зв'язку для служб каталогів.

6. Підклас - клас, який успадковується від іншого класу.

7. Суперклас - клас, від якого успадкований один або більше підкласів.

Схема описує всі атрибути і класи. Для кожного класу повинні бути визначені наступні атрибути:

Всі класи безпосередньо або опосередковано через свої суперкласу успадковуються від абстрактного класу top.

Зауважте, що одного разу створений клас або атрибут неможливо видалити зі схеми надалі! Microsoft пояснює таку поведінку тим, що не може гарантувати відсутність колізій, якщо віддалений начебто клас чи атрибут все ще буде використовуватися в інших частинах розподіленої системи. З тієї ж причини неможливо видалити з класу обов'язковий атрибут. Набір же необов'язкових атрибутів можна змінювати в будь-який час. Пам'ятайте про це під час проектування схеми.

Додавання нового класу в схему зводиться до вибору суперкласу, вводу імені нового класу, його OID-а X.500 та заповнення всіх описаних вище обов'язкових атрибутів. Створити клас можна за допомогою майстра створення нового класу утиліти "ADAM Schema".

При додаванні атрибуту необхідно ввести назву нового атрибута, OID X.500, вибрати синтаксис або тип атрибуту, задати інтервал можливих значень і вказати - чи є атрибут набором (списком) значень. Створити атрибут, як і клас, можна за допомогою передбаченого майстра створення нового атрибуту в утиліті "ADAM Schema".

Active directory for application mode

Малюнок 4. Діалогове вікно створення нового класу.

Управління користувачами і групами користувачів

Щоб мати можливість створювати облікові записи власних користувачів ADAM, необхідно або на етапі установки, або пізніше за допомогою утиліти Ldifde.exe, імпортувати клас User. який визначений в LDF-скрипті MS-User.LDF.

Для створення користувача достатньо в "ADAM ADSI Edit" додати новий об'єкт класу User. Після того, як новий користувач доданий, необхідно задати для нього пароль. Утиліта "ADAM ADSI Edit" дозволяє зробити це з контекстного меню користувача (пункт "Reset Password"). Поведінка об'єкта класу User налаштовується за допомогою набору атрибутів. Деякі з них:

Для управління правами доступу найзручніше призначати права не безпосередньо користувачам, а групам користувачів. Такий алгоритм забезпечує найбільш гнучке адміністрування доступу до об'єктів служби каталогів. Тут групи виступають в якості ролей, які визначають доступ до тих чи інших частинах дерева каталогів. Відповідно користувач успадковує права доступу у групи або кількох груп, членом яких він є.

Щоб створити групу користувачів, створюється новий об'єкт класу group. При створенні треба не забути встановити значення атрибута groupType рівним 2147483650 (0x80000002 в шістнадцятковому представленні). Це значення вказує, що створена група є групою користувачів. За зв'язування користувачів з групою відповідає атрибут member класу group. "ADAM ADSI Edit" дозволяє додавати в групу як доменних користувачів, так і власних користувачів ADAM.

Повний список команд та ключів цієї утиліти можна отримати, запустивши її з ключем / ?. Наведу два найбільш типових випадку застосування.

Установка прав на читання об'єкта 'CN = MyObject1, OU = MyApp, O = MyCompany, C = RU' і об'єктів його поддерева групі користувачів 'CN = USER_GROUP, OU = MyApp, O = MyCompany, C = RU':

Способи ідентифікації користувачів.

Під'єднатися до ADAM можна трьома різними способами: як користувач Windows, як користувач ADAM (клас User) або за допомогою об'єкта класу UserProxy.

Під час установки ADAM запитує ім'я користувача, який в подальшому буде адміністратором ADAM. За замовчуванням це користувач, який встановлює ADAM. Всі адміністратори ADAM входять до групи користувачів Administrators, яка знаходиться у розділі конфігурації; повне ім'я цієї групи - CN = Administrators, CN = Roles, CN = Configuration, CN =. Таким чином, ви можете призначити свого облікового запису Windows адміністратором ADAM і підключатися в подальшому до ADAM як користувач Windows. Точно так само можна створити свою групу в розділі програми і додати користувачів Windows в цю групу.

Якщо ви створили користувача ADAM і призначили йому права доступу до об'єктів розділу програми, ви можете підключатися до ADAM-у від імені цього користувача. Іменем користувача в цьому випадку буде повне ім'я (Distinguished Name) користувача.

Крім описаних вище двох способів, ADAM дозволяє підключатися, використовуючи так зване перенаправлення підключення, яке реалізується класом UserProxy. Об'єкт класу UserProxy зберігає в собі посилання на користувача Windows в AD. Такий режим може бути зручний, коли з додатком необхідна додаткова інформація (та, якої немає в Active Directory), пов'язана з користувачем Windows.

Пакетна обробка. утиліта LDIFDE.EXE

Всі вищеописані інструменти забезпечують досить засобів для адміністрування ADAM. Однак всі зміни, такі як додавання нових класів, об'єктів і користувачів, повинні виконуватися вручну. Це не дуже зручно, особливо якщо є необхідність повторювати точно ті ж дії на іншому сервері. Типовий приклад - розробка ведеться на комп'ютері розробника, тестування на спеціальному сервері тестування, а працює додаток на робочому сервері. У цьому випадку було б зручно мати можливість виконувати всі зміни в пакетному режимі. Таку можливість надає утиліта LDIFDE.EXE. яка дозволяє експортувати дані з ADAM в LDF-скрипти та імпортувати LDF-скрипти в ADAM. Розглянемо типові випадки застосування цієї утиліти, що виникають при розробці програмного забезпечення.

Експорт всього поддерева CN = Personnel, OU = MyApp, O = MyCompany, C = RU у вигляді, зручному для подальшого імпорту на інший сервер:

Особливості використання ADAM в багатокористувацьких розподілених додатках

Робота з ADAM з розрахованих на багато користувачів додатків має один нюанс, який необхідно враховувати на етапі проектування системи. Нюанс цей стосується можливості ідентифікації (authentication) користувача ADAM. З якоїсь причини підключення до ADAM, як і до AD, можливо тільки при наявності первинного контексту безпеки (primary security token) в процесі, звертається до ADAM. Розглянемо два випадки: перший - коли додаток працює від імені користувача, інформація про який зберігається в ADAM, і другий - коли додаток працює від імені поточного користувача Windows. У першому випадку ідентифікатор користувача і пароль вводяться під час запуску програми. Володіючи цією інформацією, програма може підключитися до ADAM під первинним контекстом безпеки в будь-який свій частини (дуже важливо для розподілених додатків). Складнощі виникають у другому випадку. Полягають вони в тому, що отримати первинний контекст безпеки можна тільки на тому комп'ютері, де запущено клієнтську програму, з яким працює користувач. Цим додатком може бути як Windows-клієнт, який працює з сервером додатків, так і Internet Explorer в разі Web-додатків. В обох випадках з додатком невідомий пароль користувача. Через це виникає необхідність в передачі контексту безпеки з клієнта на сервер. Зробити це можна за допомогою функцій WinAPI InitializeSecurityContext і AcceptSecurityContext, які дозволяють зашифрувати дані про контекст безпеки користувача, передати їх в процес сервера (можливо, на іншому комп'ютері) і відновити контекст безпеки в процесі сервера. В цьому випадку для передачі контексту безпеки необхідно використовувати механізм ідентифікації Kerberos, що не завжди можливо через складність настройки і інших причин, таких, як з'єднання клієнта і сервера через Proxy-сервер. Використовувати саме Kerberos потрібно тому, що цей механізм, на відміну від NTLM і Digest, дозволяє передавати по мережі первинний ідентифікатор безпеки.

Розглянемо для прикладу ASP.NET-додаток. Тут існує можливість використовувати інтегровану систему безпеки Windows для ідентифікації користувача на сайті. Після ідентифікації серверний код можна запустити під впізнаним користувачем - так зване імітування (impersonation) контексту безпеки користувача. Однак домогтися таким чином бажаного результату - підключення до ADAM під користувачем додатки - не вдасться. Підключення до ADAM з-під зімітувати контексту безпеки користувача не можливо - необхідний первинний контекст безпеки. В англомовній літературі дана проблема носить назву double-hop issue. що можна перевести як проблема подвійного стрибка. Вона виникає щоразу, коли необхідно передати контекст безпеки від одного процесу іншому через процес-посередник. У випадку з ASP.NET-додатком процесом-джерелом є Internet Explorer, процесом-приймачем - ADAM-а, а посередником є ​​процес ASP.NET.

Таким чином, при проектуванні архітектури додатки, в якому передбачається використовувати ADAM, необхідно на ранньому етапі подбати про способи підключення до ADAM і методи ідентифікації користувачів в разі многопользовательского додатки.

висновок

З усього вище сказаного можна зробити висновок, що ADAM є потужним інструментом, що дозволяє використовувати в додатку можливості Active Directory. Почасти це так - ADAM дозволяє розширювати схему, створювати об'єкти цих класів, організовувати їх в ієрархії, а також виконувати пошук цих об'єктів. Гнучка система управління користувачами і контролем доступу надає великі можливості для використання ADAM в додатках, оперують конфіденційною інформацією. Механізми архівування і реплікації дозволяють створювати надійні відмовостійкі системи.

Слабка ергономічність засобів адміністрування та деякі труднощі застосування в багатокористувацьких додатках кілька псують картину. Однак при грамотному проектуванні використання ADAM може стати відмінним вибором для широкого спектра програмних систем.

Схожі статті