45830 (665174), страница 2
Текст из файла (страница 2)
Для создания пользователя достаточно в “ADAM ADSI Edit” добавить новый объект класса User. После того, как новый пользователь добавлен, необходимо задать для него пароль. Утилита “ADAM ADSI Edit” позволяет сделать это из контекстного меню пользователя (пункт “Reset Password”). Поведение объекта класса User настраивается с помощью набора атрибутов. Некоторые из них:
msDS-UserAccountDisabled – если TRUE, учетная запись пользователя не активирована. Сразу после создания значение этого атрибута устанавливается в TRUE. Соответственно, для активации учетной записи нового пользователя необходимо вручную изменить значение на FALSE.
msDS-UserDontExpirePassword – если TRUE, указывает системе, что пароль данного пользователя имеет неограниченный срок действия.
msDS-UserPasswordExpired – значение TRUE данного атрибута говорит о том, что время действия текущего пароля закончилось, и требуется его смена.
Для управления правами доступа удобнее всего назначать права не напрямую пользователям, а группам пользователей. Такой алгоритм обеспечивает наиболее гибкое администрирование доступа к объектам службы каталогов. Здесь группы выступают в качестве ролей, которые определяют доступ к тем или иным частям дерева каталогов. Соответственно пользователь наследует права доступа у группы или нескольких групп, членом которых он является.
Чтобы создать группу пользователей, создается новый объект класса group. При создании надо не забыть установить значение атрибута groupType равным 2147483650 (0x80000002 в шестнадцатеричном представлении). Это значение указывает, что созданная группа является группой пользователей. За связывание пользователей с группой отвечает атрибут member класса group. “ADAM ADSI Edit” позволяет добавлять в группу как доменных пользователей, так и собственных пользователей ADAM.
Авторизация и управление правами доступа. Утилита DSACLS.EXE
Авторизация – это процесс определения, прав пользователя на доступ к объекту службы каталогов. Определение прав осуществляется на основе так называемых списков контроля доступа – Access Control List (ACLs). Утилита командной строки DSACLS.EXE позволяет просматривать и изменять права доступа пользователей и групп пользователей.
Полный список команд и ключей этой утилиты можно получить, запустив ее с ключом /?. Приведу два наиболее типичных случая применения.
Просмотр списка контроля доступа к объекту с полным именем ‘CN=MyObject1,OU=MyApp,O=MyCompany,C=RU’:
dsacls.exe "\\localhost:389\ CN= MyObject1,OU=MyApp,O=MyCompany,C=RU" |
Установка прав на чтение объекта ‘CN= MyObject1,OU=MyApp,O=MyCompany,C=RU’ и объектов его поддерева группе пользователей ‘CN=USER_GROUP,OU=MyApp,O=MyCompany,C=RU’:
dsacls.exe "\\localhost:389\ CN= MyObject1,OU=MyApp,O=MyCompany,C=RU" /I:T /G "CN=USER_GROUP,OU=MyApp,O=MyCompany,C=RU":GR |
Способы идентификации пользователей.
Подсоединиться к 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 в виде, удобном для дальнейшего импорта на другой сервер:
C:\WINDOWS\ADAM\ldifde.exe -f data.ldf -s localhost:389 -d " CN=Personnel,OU=MyApp,O=MyCompany,C=RU " -j . -p subtree -o "cn,distinguishedName,instanceType,whenCreated,whenChanged,uSNCreated,uSNChanged,objectGUID,objectCategory,dSCorePropagationData" |
Импорт данных в ADAM:
ldifde -i -f data.ldf -s localhost:389 -j . –k |
Примеры команд LDF-скриптов.
Добавление группы пользователей:
dn: CN=USER_GROUP, OU=MyApp,O=MyCompany,C=RU changetype: add objectClass: top objectClass: group cn: Administrators instanceType: 4 groupType: 2147483650 |
Удаление объекта:
dn: CN=USER_GROUP, OU=MyApp,O=MyCompany,C=RU changetype: remove |
Изменение объекта:
dn: CN=Object1, OU=MyApp,O=MyCompany,C=RU changetype: modify replace:Color Color: RED - |
Переименование объекта:
dn: CN=Object1, OU=MyApp,O=MyCompany,C=RU changetype: modrdn newrdn: CN=RenamedObject1 deleteoldrdn: 1 |
Для расширения схемы ADAM-а нужно использовать командную строку с указанием пространства имен схемы:
C:\WINDOWS\ADAM\LDIFDE.EXE -i -f SchemaExt.ldf -s localhost:389 -j . -c "CN=Schema,CN=Configuration,DC=X" #schemaNamingContext -k |
ПРЕДУПРЕЖДЕНИЕ Заметьте, что если для обновления данных раздела, можно использовать утилиту LDIFDE.EXE, идущую в поставке WINDOWS, то при изменении схемы ADAM необходимо использовать утилиту, установленную вместе с ADAM, иначе команда вернет ошибку. |
Содержимое файла SchemaExt.ldf, используемого в примере:
#Добавление в схему нового атрибута: dn: CN=MyAttribute1,CN=Schema,CN=Configuration,DC=X changetype: ntdsschemaadd objectClass: top objectClass: attributeSchema attributeID: 1.3.444.656565.1.1 attributeSyntax: 2.5.5.12 isSingleValued: TRUE showInAdvancedViewOnly: TRUE adminDisplayName: MyAttribute1 oMSyntax: 64 lDAPDisplayName: MyAttribute1 #Добавление в схему нового класса: dn: CN=MyClass1,CN=Schema,CN=Configuration,DC=X changetype: ntdsschemaadd objectClass: top objectClass: classSchema possSuperiors: container subClassOf: top governsID: 1.3.444.656565.2.1 mayContain: MyAttribute1 showInAdvancedViewOnly: TRUE adminDisplayName: MyClass1 adminDescription: New class lDAPDisplayName: MyClass1 dn: changetype: modify add: schemaUpdateNow schemaUpdateNow: 1 - |
В этом примере первая команда создает новый атрибут MyAttribute1, а вторая – новый класс MyClass1, использующий этот атрибут. Последняя команда фиксирует изменения в схеме. Такая команда должна вызываться каждый раз после создания нового класса.
Способы взаимодействия приложения с ADAM
Для работы с ADAM используются те же средства, что и для работы с AD. Это – Active Directory Services Interfaces (ADSI), Lightweight Directory Access Protocol (LDAP), пространство имен System.DirectoryServices Microsoft .NET Framework, а также провайдер доступа к данным OLEDB ADsDSOObject.
ADSI предоставляет набор COM-интерфейсов для работы с ADAM и обеспечивает наиболее широкий набор инструментов.
LDAP – “облегченный” протокол доступа, позволяющий изменять содержимое службы каталогов и выполнять поиск по дереву объектов. LDAP может быть использован в приложениях, для которых работа с ADAM-ом не является основной функциональностью.
Пространство имен System.DirectoryServices (SDS) разработано на базе ADSI и предоставляет возможности, схожие с теми, что предоставляет протокол LDAP. SDS можно использовать в приложениях на базе технологии Microsoft.NET.
Провайдер доступа к данным ADsDSOObject предоставляет SQL-подобный интерфейс чтения, изменения и поиска данных в AD. Из всех описанных средств это обладает самой низкой производительностью, но оно может быть использовано в приложениях, выполняющих поиск в ADAM, если скорость работы не является критичной.
Работа с объектами: чтение, изменение и поиск данных
Рассмотрим работу с ADAM на примере, использующем пространство имен System.DirectoryServices.
В примере производится поиск, и в найденных объектах изменяется значение свойства MyAttribute1. Проверка существования значения атрибута не выполняется – предполагается, что оно существует. Также не выполняется обработка исключений. Сделано это для того, чтобы не загромождать код примера.
using System; using System.DirectoryServices; namespace SDSExample { class SDSExample { [STAThread] static void Main(string[] args) { //Подключение к ADAM-у DirectoryEntry deRoot = new DirectoryEntry( "LDAP://LOCALHOST:389/CN=Personnel,OU=MyApp,O=MyCompany,C=RU"); //Создание объекта класса DirectorySearcher, выполняющего поиск DirectorySearcher dSeacher = new DirectorySearcher(deRoot, "(objectClass=MyClass1)"); //Указание искать по всему поддереву корневого объекта dSeacher.SearchScope = SearchScope.Subtree; //Поиск всех объектов, удовлетворяющих условию SearchResultCollection srEntries = dSeacher.FindAll(); for(int index=0; index { //Вывод значений атирбутов объекта SearchResult srEnrty = srEntries[index]; Console.WriteLine(index); Console.WriteLine("distinguishedName =" + srEnrty.Properties["distinguishedName"]); Console.WriteLine("MyAttribute1 =" + srEnrty.Properties["MyAttribute1"][0]); Console.WriteLine(); //Изменение значения атрибута MyAttribute1 DirectoryEntry deEntry = srEnrty.GetDirectoryEntry(); deEntry.Properties["MyAttribute1"].Value = "new_value_of_Object" + index.ToString(); //Фиксирование изменений deEntry.CommitChanges(); deEntry.Close(); } deRoot.Close(); }//Main() }//class SDSExample }//namespace SDSExample |
Работа с пользователями
Для некоторых приложений может потребоваться возможность управления пользователями ADAM (не Windows). Работу с пользователями из приложения демонстрирует следующий пример. В нем создается новый пользователь с именем ‘CN=Vasiliy_Pupkin,CN=Users,OU=MyApp,O=MyCompany,C=RU’ и добавляется в группу ‘CN=USER_GROUP,OU=MyApp,O=MyCompany,C=RU’.
using System; using System.DirectoryServices; namespace ADAMUserExample { class ADAMUser { [STAThread] static void Main(string[] args) { DirectoryEntry deUserRoot = new DirectoryEntry( "LDAP://LOCALHOST:389/CN=Users,OU=MyApp,O=MyCompany,C=RU"); //Создание пользователя DirectoryEntry deNewUser = deUserRoot.Children.Add( "CN=Vasiliy_Pupkin", "User"); deNewUser.Properties["displayName"].Value = "Vasiliy Pupkin"; deNewUser.CommitChanges(); //назначение пароля deNewUser.Properties["userpassword"].Value = "Vasiliy_Password_1"; deNewUser.CommitChanges(); //активирование пользователя deNewUser.Properties["msds-useraccountdisabled"].Value = false; //отмена срока действия пароля deNewUser.Properties["msds-userdontexpirepassword"].Value = true; deNewUser.CommitChanges(); DirectoryEntry deUserGroup = new DirectoryEntry( "LDAP:// LOCALHOST:389/CN=USER_GROUP,OU=MyApp,O=MyCompany,C=RU"); deUserGroup.Properties["member"].Add( deNewUser.Properties["distinguishedName"].Value); deUserGroup.CommitChanges(); deUserGroup.Close(); deNewUser.Close(); deUserRoot.Close(); }//Main }//class ADAMUser } |
Однако если попытаться выполнить данный пример, используя конфигурацию ADAM по умолчанию, возникнет ошибка в момент применения пароля пользователя. Это произойдет потому, что конфигурация по умолчанию запрещает смену пароля с использованием незащищенного канала (в примере используется порт 389 – порт незащищенного канала, предлагаемый при установке ADAM). Возможны два варианта решения проблемы. Первый – настроить защищенный канал (порт защищенного канала, предлагаемый при установке, 636, использует SSL для шифрования канала) и подключаться к ADAM через него. Второй – настроить ADAM так, чтобы изменение пароля через незащищенное соединение было разрешено. Для этого необходимо установить тринадцатый символ атрибута dSHeuristics объекта конфигурации с полным именем ‘CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,CN={идентификатор раздела конфигурации ADAM-а}’ в ‘1’. По умолчанию значение этого атрибута в ADAM-е не установлено.