Создаем персональный набор ярлыков для каждого пользователя в папке «Мой Компьютер»::Журнал СА 3.2008
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Наука и технологии
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

  Опросы
1001 и 1 книга  
12.02.2021г.
Просмотров: 8551
Комментарии: 2
Коротко о корпусе. Как выбрать системный блок под конкретные задачи

 Читать далее...

11.02.2021г.
Просмотров: 8889
Комментарии: 4
Василий Севостьянов: «Как безболезненно перейти с одного продукта на другой»

 Читать далее...

20.12.2019г.
Просмотров: 16065
Комментарии: 0
Dr.Web: всё под контролем

 Читать далее...

04.12.2019г.
Просмотров: 15156
Комментарии: 13
Особенности сертификаций по этичному хакингу

 Читать далее...

28.05.2019г.
Просмотров: 16275
Комментарии: 6
Анализ вредоносных программ

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

 Создаем персональный набор ярлыков для каждого пользователя в папке «Мой Компьютер»

Архив номеров / 2008 / Выпуск №3 (64) / Создаем персональный набор ярлыков для каждого пользователя в папке «Мой Компьютер»

Рубрика: Администрирование /  Администрирование

ИВАН КОРОБКО

Создаём персональный набор ярлыков
для каждого пользователя в папке «Мой Компьютер»

Представьте себе: вы входите в папку «Мой Компьютер» и видите в ней кроме дисков ярлыки к приложениям, используемым в сети! О том, как реализовать эту идею, и пойдет речь.

В компьютерных сетях крупных организаций используется большое количество сетевых приложений. Задача системного администратора – обеспечить к ним удобный доступ. Как правило, для этого создают папку, обеспечивают к ней доступ из сети. Внутри нее создают ярлыки, ссылающиеся на сетевые приложения. С помощью сценария регистрации пользователей в сети подключают каждому сотруднику эту папку. В таком случае сотрудник будет иметь доступ ко всем сетевым приложениям. С точки зрения безопасности и производительности труда он должен видеть только те ярлыки сетевых приложений, с которыми работает.

Одно из возможных решений – создать несколько сетевых папок и подключать их в зависимости от должностных обязанностей сотрудника. Все это приводит к созданию нескольких сетевых дисков и увеличению затрат на администрирование.

Создав ярлыки пользователей в папке «Мой компьютер», вы избавитесь от нескольких лишних сетевых дисков, упростите доступ к ресурсам. С точки зрения безопасности это решение также предпочтительно: сотрудник не сможет увидеть путь к приложению, удалить ярлык.

Воспользовавшись группами безопасности в Active Directory можно создать для каждого пользователя индивидуальный набор ярлыков (см. рис. 1). Естественно, домен в этом случае построен на основе Windows 2000/2003 Server. В противном случае данное решение сложно реализуемо.

Внешний вид папки «Мой Компьютер»

Рисунок 1. Внешний вид папки «Мой Компьютер»

Сразу хотелось бы отметиьть: в статье описываются подход, концепция. Несмотря на то что в ней приведены листинги и рассмотрены нюансы, статья не должна рассматриваться как пошаговая инструкция.

Реестр

Рассмотрим подробнее алгоритм создания ярлыка. Процедура описания ярлыка состоит из двух частей. В первой части описывается местоположение объекта, а во второй – его свойства.

Для описания местоположения объекта (папка «Мой компьютер») достаточно создать в ветви реестра: HKLMSoftwareMicrosoftCurrentVersionExplorerMyComputerNameSpace папку. Имя папки – уникальный CLSID, например, {C7AF0CFE-D0C4-11DC-B55C-F6B756D89593}. Для его генерации можно воспользоваться стандартной утилитой uuidgen.exe, входящей в состав Microsoft SDK. После установки пакета утилита находится в папке C:Program FilesMicrosoft SDKBin.

Чтобы описать свойства объекта (ярлыка или папки), необходимо в ветви HCCRCLSID создать папку. Ее имя – сгенерированный CLSID, который был использован в ветви HKLM. Внутренняя структура подпапок, которую необходимо воспроизвести, приведена на рис. 2.

Структура папок в HCCRCLSID{GUID

Рисунок 2. Структура папок в HCCRCLSID{GUID}

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

Листинг 1. Создание ярлыка в папке «Мой Компьютер». REG-файл

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\CLSID\{C7AF0CFE-D0C4-11DC-B55C-F6B756D89593}]

@="Карта г.Москвы"

"infotip"="Карта г.Москвы"

[HKEY_CLASSES_ROOT\CLSID\{C7AF0CFE-D0C4-11DC-B55C-F6B756D89593}\defaulticon]

@="\\\\Server\Folder$\\\MoscowMap\\Btk2007.exe,0"

[HKEY_CLASSES_ROOT\CLSID\{C7AF0CFE-D0C4-11DC-B55C-F6B756D89593}\shell\open\command]

@="\\\\Server\Folder$\\\MoscowMap\\Btk2007.exe"

[HKEY_CLASSES_ROOT\CLSID\{C7AF0CFE-D0C4-11DC-B55C-F6B756D89593}\ShellFolder]

"Attributes"=hex:00,01,00,a0

HKLM\Software\Microsoft\CurrentVersion\Explorer\MyComputer\NameSpace\{C7AF0CFE-D0C4-11DC-B55C-F6B756D89593}

Итак, ярлык создан. Рассмотрим механизм создания персонального набора ярлыков для каждого пользователя.

Описание свойств ярлыка в HCCRCLSID

Папка реестра

Ключ

Тип данных

Значение

Комментарий

HCCRCLSID

@

REG_SZ

Карта г. Москвы

Название ярлыка, отображаемое в папке «Мой Компьютер»

HCCRCLSID

infotip

REG_SZ

Карта г.Москвы за ноябрь 2007 года

Подробное описание ярлыка. Отображается, если навести курсор на ярлык и подождать 1-2 секунды (см. рис. 1, указано красной стрелкой)

HCCRCLSIDdefaulticon

@

REG_SZ

ServerFolder$MoscowMapBtk2007.exe,0

или ServerFolder$MoscowMapMap.ico

Путь к иконке, которую увидит пользователь

HCCRCLSIDdefaulticon
shellopencommand

@

REG_SZ

 Server Folder$MoscowMap Btk2007.exe

Путь к приложению, которое будет запускать при нажатии на иконку

HCCRCLSIDshellfolder

Attributes

REG_BINARY

hex:00,01,00,a0

Благодаря этому ключу созданный ярлык нельзя переименовать, удалить и т. д.

Способы внедрения

Для успешной работы сценария регистрации пользователей сети необходимы административные привилегии, поскольку рядовой пользователь не имеет прав делать изменения в таких ветвях реестра, как HKLM и HCCR. Существует несколько способов решения данной проблемы. Первый – запускать сценарий с помощью командного файла, внутри которого команда RunAs. Такое решение небезопасно, поскольку имя и пароль учетной записи с административными привилегиями будет храниться в общедоступном месте – папке Netlogon. Это серьезная брешь в системе с точки зрения безопасности. Второй способ – запускать веб-сайт на основе ASP.NET в скрытом режиме с помощью сценария, а создавая его, воспользоваться преимуществом механизма представлений (имперсонализации). Таким образом, не публикуя в общедоступном месте имя и пароль административной учетной записи, можно достигнуть требуемого эффекта.

Включение режима представлений осуществляется в файле web.config, а для веб-cайта необходимо создать пул в IIS 6 под управлением Windows 2003 Server.

Для создания веб-сайта лучше всего воспользоваться Microsoft Visual Studio 2005. Язык можно выбрать любой. Для создания веб-cайта я выбрал VB.NET.

Персональный набор ярлыков для пользователя

В Active Directory есть несколько групп, каждая из которых соответствует какому-либо ресурсу. В свойствах этой группы описаны характеристики ярлыка (см. рис. 3). При регистрации пользователя в сети в сценарии, по префиксу в названии (mc$_), определяется список групп, членами которых является входящий в сеть пользователь. Затем считываются нужные параметры группы, и осуществляется запись данных в реестр. Таким образом, пользователь получает индивидуальный набор ярлыков. Обратите внимание, что при этом название группы может быть произвольным. Важно, чтобы в названии группы был префикс.

Параметры ярлыка в группе безопасности Active Directory

Рисунок 3. Параметры ярлыка в группе безопасности Active Directory

Чтение свойств группы безопасности

Чтение данных из Active Directory осуществляется с помощью стандартной .NET FrameWork-библиотеки System.DirectoryServices, пространство имен которой необходимо импортировать в проект. Алгоритм работы этой части сайта следующий:

  • определение имени текущего домена;
  • поиск групп безопасности с помощью фильтра;
  • чтение характеристик группы.

Определение имени домена осуществляется с помощью виртуального объекта RootDSE. Этот объект присутствует во всех доменах. Считывая значение свойства DefaultNamingContext, получают имя текущего домена (см. листинг 2).

Для поиска групп безопасности используют объект DirectoryEntry. В качестве параметров фильтра фигурирует имя группы – параметр cn (см. рис. 4) и тип объекта. Подробно фильтры описаны в статье Platform SDK: System.DirectoryServices [1].

Чтение полей группы безопасности в Active Directory

Рисунок 4. Чтение полей группы безопасности в Active Directory

Затем осуществляется чтение значений свойств из найденных объектов.

Листинг 2. Поиск групп в Active Directory. Считывание свойств

Imports System.DirectoryServices

Public Domain As String = ""

‘ Определение имени домена с помощью виртуального объекта

‘ RootDSE

Dim obj As New DirectoryEntry("LDAP://RootDSE")

Domain = "LDAP://" + obj.Properties("DefaultNamingContext").Value

‘ Формирование поискового запроса в текущем домене

Dim obj As New DirectorySearcher()

obj.SearchRoot = New DirectoryEntry("LDAP://" + Domain)

Dim query As String = "(&(objectclass =group)(cn=" + Prefix + "*))"

obj.Filter = query

Поиск

Dim bb As SearchResultCollection

bb = search.FindAll

‘ Чтение результатов поиска

    For Each b As SearchResult In bb

           Dim path As String = b.GetDirectoryEntry.Properties("distinguishedName").Value.ToString()

           Dim read = GetObject("LDAP://" + path)

           ‘ чтение поля INFO

           For Each t As String In read.info

                 Response.Write (t + "<br>")

           Next

           ‘ чтение поля DESCRIPTION

                 Response.Write read.description

    Next

Настройка доменных политик

Читатель наверняка уже понял, что без удаленного подключения к реестру не обойтись. Для этого необходимы административные права, которые теперь есть; имя компьютера – его легко определить с помощью инструкции Request.UserHostName. Пути в реестре, изменяемые параметры и их значения. Все необходимые условия для удаленного подключения к реестру выполнены.

Однако удаленный реестр будет недоступен, если не выполнено два дополнительных условия:

  • включена служба Remote Registry (служба удаленного управления реестром);
  • выключен Windows FireWall.

Оба результата можно достигнуть с помощью групповых доменных политик. По умолчанию обе политики не настроены. Для их настройки необходимо вызвать MMC-консоль. Обе политики (Remote Registry и Windows Firewall/Internet Connection Sharing) находятся в разделе «Computer Configuration» (см. рис. 5).

Рисунок 5. Настройка доменных политик

Управление реестром удаленного компьютера

Для получения доступа к реестру необходимо импортировать пространство имен Microsoft.Win32. Для удаленного управления реестром сначала получают удаленный доступ к нужным ветвям реестра, затем, используя свойство OpenSubKey, получают доступ к нужной папке указанной ветви (см. листинг 3).

Листинг 3. Удаленное подключение к реестру

Imports Microsoft.Win32.

Public hklm As RegistryKey

Public hccr As RegistryKey

hklm = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, PcName)

hccr = RegistryKey.OpenRemoteBaseKey(RegistryHive.ClassesRoot, PcName)

На следующем этапе осуществляется поиск созданных CLSID-папок сценарием. Для того чтобы они отличались от других ярлыков, необходимо внутрь CLSID добавить какой-либо флаг: параметр Flag со значением 1. Дело в том, что разные программы, такие как Nero 7, Active Sync, и другие программы для связи компьютера с сотовым телефоном, тоже создают различные объекты в папке «Мой Компьютер». Наша задача не повредить.

Целесообразно создавать флаг в CLSID, находящемся в разделе HKLMSoftwareMicrosoftCurrentVersionExplorerMyComputerNameSpace (см. листинг 4). В приведенном листинге для получения доступа к папке используется функция OpenSubKey(), аргумент которой – путь в реестре к анализируемой папке. Список подпапок получают с помощью свойства GetSubKeyNames, которое возвращает соответствующий массив данных. Для чтения параметра вызывают функцию GetValue(Flag).

Листинг 4. Определение списка значений CLSID, созданных программным способом

Public Key1 As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace"

Public Key2 As String = "clsid"

Dim i As Integer = 0

Dim Guids As String()

Dim a As String() = hklm.OpenSubKey(Key1).GetSubKeyNames

For Each CLSID As String In a

    Dim c As RegistryKey = hklm.OpenSubKey(Key1).OpenSubKey(CLSID)

    Dim d As String = c.GetValue(FlagKey)

    If StrComp(UCase(d), UCase(FlagValue)) = 0 Then

           ReDim Preserve Guids(i)

           Guids(i) = CLSID

           i += 1

    End If

Next

После того как список определен, целесообразно удалить все определенные процедурой подпапки и создать новые. Это связано с тем, что пути могут измениться, для того чтобы упростить листинг, рекомендуется это сделать.

Осталось рассмотреть две процедуры – удаление ветви реестра и запись параметров. Удаление параметров происходит в цикле (см. листинг 5). Будьте внимательны и удаляйте обе ветви реестра, которые создает сценарий. Не создавайте из реестра помойку – в конечном итоге это пагубно скажется на работоспособности рабочей станции.

Листинг 5. Удаление ветви реестра

For Each GUID As String In DetectGUID()

    hklm.OpenSubKey(Key1, True).DeleteSubKeyTree(GUID)

    hccr.OpenSubKey(Key2, True).DeleteSubKeyTree(GUID)

Next

Для записи значений в реестр используется функция SetValue. При записи данных есть одна тонкость. Все значения имеют тип данных REG_SZ, и только один – REG_BINARY. Запись бинарных данных осуществляется из массива, элементы которого – бинарные числа (см. листинг 6).

Листинг 6. Запись данных в реестр

hklm.OpenSubKey(Key1, True).CreateSubKey(RegistryPath).SetValue(FlagKey, FlagValue, RegistryValueKind.String)

hccr.OpenSubKey(Key2, True).CreateSubKey(RegistryPath).SetValue("", GroupValues(0))

Dim temp_array As Byte() = {0, 1, 0, 160}

hccr.OpenSubKey(Key2, True).OpenSubKey(RegistryPath, True).CreateSubKey("shellFolder").SetValue("attributes", temp_array, RegistryValueKind.Binary)

Запуск веб-сайта из сценария в фоновом режиме

В завершение статьи осталось рассказать о фоновом запуске веб-сайта из сценария. Для создания экземпляра Internet Explorer используется метод CreateObject(). После вызова объекта InternetExplorer.Application обязательно необходимо дождаться, пока он запустится (см. листинг 6), и только после этого запускать страницу. Для обеспечения запуска приложения в фоновом режиме присвойте свойства visible значение 0 или false.

Листинг 7. Запись данных в реестр

set oIE=CreateObject("InternetExplorer.Application")  

do while (oie.busy)

loop

oIE.navigate "http://mycomputer"

oIE.visible = 0

oIE.Quit

set oIE=Nothing

Заключение

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

Приложение

CLSID – уникальный 32-байтный (128-битный) номер, состоящий из шестнадцатеричных чисел. Первые 8 байт генерируются случайным образом, следующие четыре используются для создания текущего значения даты и времени, остальные генерируются на основе данных о конфигурации компьютера. Как правило, CLSID-номер заключается в фигурные скобки и имеет следующий формат записи: {xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx}. Стандартные объекты Windows, такие как «Панель Управления», «Корзина» во всех ОС имеют фиксированный CLSID.

  1. System.DirectoryServices – http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sds/sds/directoryservices_directorysearcher_filter.asp.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru