Углубляемся в процесс обработки профилей пользователей

Если спросить у администраторов систем Windows, что создает наибольшие сложности в их работе, многие вспомнят о проблемах, связанных с профилями пользователей. Если же говорить о перемещаемых (roaming) профилях, то затруднения возникают у 80-90% администраторов. Несмотря на все усилия, предпринимаемые Microsoft при выпуске каждой версии Windows, пользовательские профили все еще остаются слабым местом системы. Давайте посмотрим, как, по замыслу разработчиков, должны функционировать пользовательские профили, а также что происходит при создании профиля и при его записи на сервер. Тогда станет ясно, какие проблемы могут возникнуть при выполнении этих действий и каким образом их можно избежать.

Что такое профиль пользователя

Пользовательский профиль представляет собой множество файлов и папок, в которых Windows хранит персональные настройки пользователя. Так, составными частями профиля являются настройки Microsoft Outlook и все ярлыки, размещенные пользователем на рабочем столе. Вообще в профиле хранятся все пользовательские настройки Windows и приложений, с которыми работает пользователь.

В Windows предусмотрено три вида профилей пользователя — локальные (local), перемещаемые (roaming) и обязательные (mandatory). Каждый регистрирующийся на рабочей станции Windows пользователь имеет собственный локальный профиль, который по умолчанию хранится в папке \%systemroot%documents and settings\%username% (например, C:documents and settingsjoesmith) для систем Windows Server 2003, Windows XP и Windows 2000 или в папке \%systemroot%profiles\%username% — для компьютеров Windows NT 4.0.

Перемещаемый профиль пользователя, как следует из его названия, применяется на любой рабочей станции, с которой данный пользователь регистрируется в сети. Для этого Windows копирует локальный профиль пользователя в специальный общий каталог на сервере каждый раз при завершении пользователем сеанса работы в сети. Если у пользователя нет перемещаемого профиля, то при регистрации в сети с различных рабочих станций он может иметь разные настройки рабочего стола. Поэтому если в сети пользователи часто регистрируются с разных рабочих станций и при этом должны иметь на них одни и те же настройки, следует настроить перемещаемые профили. Чтобы сделать локальный профиль пользователя перемещаемым, в Windows 2000 и более поздних версиях достаточно изменить объект пользователя в Active Directory и указать путь разделяемого каталога на сервере для хранения перемещаемых профилей в нотации UNC (например, s3gpo1profilesdarren, см. экран 1). После указания пути в объекте пользователя система сохраняет профиль на сервере при следующем завершении сеанса.

Экран 1. Задание пути перемещаемого профиля для пользователя в AD

Обязательный профиль пользователя представляет собой разновидность перемещаемого профиля. Обязательный профиль гарантирует, что каждый пользователь в данной среде имеет одинаковый профиль. Имеются две разновидности обязательного профиля — обычный и принудительный (super mandatory profile). Обычный обязательный профиль не позволяет пользователям менять настройки приложений, но при этом допускает создание новых ярлыков на рабочем столе и сохранение документов в папке «Мои документы». Принудительный обязательный профиль не позволяет вносить какие бы то ни было изменения в настройки. Обязательные профили обычно применяются в тех случаях, когда необходим строгий контроль над действиями пользователей.

Независимо от вида пользовательского профиля, следует помнить, что пользователь всегда работает с локальной копией профиля, размещаемой в папке \%systemroot%documents and settings\%username% (или %systemroot%profiles\%username% в Windows NT 4.0). Даже если пользователь имеет перемещаемый профиль, при регистрации в системе рабочая станция создает локальную копию профиля, и все последующие изменения, которые выполняет пользователь во время сеанса, сохраняются в локальной папке. Запись изменений в перемещаемый профиль пользователя на сервере происходит при завершении сеанса, но по умолчанию на рабочей станции локальная копия профиля пользователя сохраняется. Таким образом, если перемещаемый профиль не изменился и пользователь повторно регистрируется на той же рабочей станции, работа происходит с сохраненной локальной копией профиля без повторной загрузки с сервера. Механизм этого процесса будет рассмотрен ниже.

Теперь давайте посмотрим, как происходит обработка пользовательского профиля системой. Как уже было сказано выше, в профиле хранятся различные пользовательские настройки, а также ярлыки. Имя каталога, в котором хранятся профили, говорит само за себя — documents and settings. В разделе документов могут храниться различные файлы — ярлыки, документы Word, временные файлы Internet, конфигурационные файлы приложений и т. п. Если взглянуть на профиль обычного пользователя через Windows Explorer, мы увидим структуру, подобную изображенной на экране 2 .

Как показано на экране 2, пользовательские данные в профиле пользователя хранятся всего в нескольких папках. Так, в папке «Мои документы» хранятся документы пользователя, созданные в Microsoft Word и других приложениях. В папке «Рабочий стол» содержатся элементы, отображаемые на рабочем столе пользователя. В папке Application Data содержатся конфигурационные файлы приложений. Например, Microsoft Outlook сохраняет в этом каталоге заданные пользователем настройки. Некоторые папки от пользователя скрыты. Так, ряд папок, показанных на экране 2, такие как Application Data и Local Settings, не предназначены для непосредственного просмотра пользователем и скрыты (их значки отмечены более блеклым цветом).

Раздел настроек профиля пользователя хранится в файле ntuser.dat в папке пользователя, как показано на том же экране 2. Его содержимое можно просмотреть с помощью редактора реестра в ветви HKEY_CURRENT_USER. Содержимое этой ветви загружается в реестр при регистрации пользователя в системе. Все изменения настроек, сделанные пользователем во время сеанса работы, такие как смена обоев на рабочем столе или изменение настроек Outlook, записываются Windows именно в эту ветвь реестра и сохраняются в файле ntuser.dat. Здесь уместно отметить, что при необходимости просмотра настроек другого пользователя, не начавшего сеанс работы Windows, можно загрузить соответствующий файл в редактор реестра в качестве временной ветви с помощью команды Файл/Загрузить ветвь в редакторе реестра (regedit.exe в Windows XP и 2003, regedt32.exe в Windows 2000).

Обратите внимание, что обязательные профили используют отличную от описанной ранее систему именования элементов. Как правило, обычный обязательный профиль — это тот профиль, в котором файл ntuser.dat переименован в ntuser.man. Принудительный обязательный профиль представляет собой перемещаемый профиль, в котором полное имя файла конфигурации имеет расширение .man. Так, перемещаемый профиль, размещенный в папке serverprofilesstdprofile.man, указывает на принудительный обязательный профиль.

Создание профиля

Что же происходит при создании профиля? На первый взгляд все очень просто: если пользователь регистрируется в сети со своей рабочей станции Windows впервые и не имеет профиля, кэшированного на данной рабочей станции или перемещаемого на сервере, Windows создает для этого пользователя профиль по умолчанию. На самом деле все несколько сложнее. Рассмотрим последовательно процесс создания профиля пользователя — это поможет понять причины возможных проблем. Отметим, что существуют некоторые различия обработки профилей пользователей в разных версиях Windows; в этой статье обработка профилей операционной системой рассматривается на примере Windows XP. Рассмотрим ситуацию, когда пользователь домена AD, для которого имеется перемещаемый профиль, впервые выполняет регистрацию в сети на данной рабочей станции.

  • При отработке регистрации в сети Windows в первую очередь проверяет учетную запись AD на предмет существования пути перемещаемого профиля.
  • Далее выполняется ping к указанной общей папке на сервере для проверки скорости соединения. Если обнаружено медленное соединение, операционная система использует альтернативный способ загрузки профиля. Порог медленного соединения определяется групповой политикой и по умолчанию равен 500 Кбит/с.
  • Когда Windows выясняет, что используется быстрое соединение, Windows проверяет разрешения NTFS папки перемещаемого профиля, дабы убедиться, что владельцем является регистрирующийся в сети пользователь или член группы локальных администраторов. Эта проверка была добавлена в XP SP1 и Windows 2000 SP4, чтобы убедиться, что некий злоумышленник не создал подменный перемещаемый профиль, который может быть загружен пользователем случайно.
  • В случае когда проверка шага 3 выполнена успешно, Windows проверяет общую папку на наличие профилей, а сервер — на наличие файлов ntuser.dat или ntuser.man (для обязательного профиля). Если таких файлов нет, как в том случае, если пользователь регистрируется впервые, Windows переходит к следующему шагу.
  • Система определяет наличие кэшированной копии профиля пользователя в папке C:documents and settings. При этом Windows обращается не к файловой системе, а проверяет записи в реестре. Все легитимные профили пользователей, кэшируемые на рабочей станции, регистрируются в разделе системного реестра HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList. В разделе ProfileList для каждого пользователя, имеющего локальную кэшированную копию профиля, создается подраздел с уникальным идентификатором SID, определяющим данного пользователя. В этом подразделе хранится название папки с профилем, путь перемещаемого профиля, а также информация о статусе профиля и о времени последних сделанных изменений.
  • Если Windows не находит ни перемещаемого, ни локального профиля, то в соответствующем разделе системного реестра создается новый подраздел и формируется локальный профиль в папке Documents and Settings.
  • Далее Windows назначает пользователю новый профиль по умолчанию. Профиль по умолчанию можно определить одним из двух способов. Можно разместить профиль пользователя по умолчанию в общей папке Netlogon на контроллере домена AD, etlogondefault user. При создании нового профиля пользователя Windows обращается в первую очередь именно в эту общую папку. Если в этой папке профиль отсутствует, Windows использует локальный профиль по умолчанию, размещенный на рабочей станции в папке \%system root%documents and settingsdefault user. Если вы хотите задать профиль по умолчанию, он должен быть полным, то есть содержать файл ntuser.dat и включать в себя все папки, которые Windows рассчитывает найти в профиле пользователя. С точки зрения простоты управления профиль по умолчанию рекомендуется разместить в общей папке Netlogon, хотя, конечно, можно сформировать профиль по умолчанию и в образе стандартной сетевой рабочей станции.
  • Определив правильный путь для профиля пользователя по умолчанию, Windows копирует содержимое этой папки в локальную папку пользователя в Documents and Settings. При этом Windows устанавливает настройки безопасности файловой системы таким образом, что к папке \%systemroot%documents and settings\%username% полный доступ имеют только данный пользователь и члены локальной группы «Администраторы». Поскольку файл ntuser.dat представляет собой ветвь реестра, с которой связаны соответствующие разрешения системы безопасности, то, когда система выполняет копирование данного файла из профиля пользователя по умолчанию, разрешения на разделы реестра в данной ветви устанавливаются такие же, как для файлов профиля пользователя. Таким образом, правами доступа к настройкам в этом профиле обладают только сам пользователь и локальные администраторы. Данный факт важно принимать во внимание, так как по этой причине оказывается бесполезным копировать файл ntuser.dat и передавать от одного пользователя к другому. Даже если поменять разрешения на файлы, разрешения в реестре все равно будут указывать на исходного пользователя, которому принадлежал файл. Из такой ситуации существует два выхода: в приложении System панели управления Windows выбрать закладку Advanced, в группе User Profiles пользователей нажать кнопку Settings и в диалоговом окне, изображенном на экране 3, воспользоваться кнопкой Copy to или же задействовать утилиту moveuser.exe, входящую в состав Microsoft Windows 2000 Resource Kit.
Экран 3. Применение приложения System для копирования профиля пользователя

Созданный профиль пользователя не будет скопирован на сервер до тех пор, пока пользователь не выйдет из системы. При завершении сеанса Windows сначала проверяет, какие элементы профиля не являются перемещаемыми. По умолчанию перемещаемыми не являются настройки, хранящиеся в папках History, Local Settings, Temp, и Temporary Internet Files, так что содержимое этих папок на сервер не копируется. В эту группу попадают кэш Internet Explorer, временные файлы и автономные хранилища Outlook (файлы .ost). Список папок, не сохраняемых для перемещаемого профиля, можно указать в политике Administrative Template объекта групповых политик. Эта политика размещается в папке User ConfigurationAdministrative TemplatesSystemUser ProfilesExclude Directories перемещаемого профиля пользователя.

По сравнению с NT 4.0, в Windows 2000 значительно усовершенствован алгоритм сохранения изменений в перемещаемый профиль пользователя при завершении сеанса. В NT 4.0 при завершении сеанса система выполняла копирование всех файлов профиля пользователя на сервер вне зависимости от того, изменялись они или нет. Начиная с Windows 2000 система сравнивает дату и время создания файлов в локальном и перемещаемом профилях пользователя и при завершении сеанса выполняет копирование только тех файлов, которые требуют обновления. Это позволяет значительно ускорить процедуру завершения сеанса и снизить сетевой трафик по сравнению с NT 4.0. Аналогичным образом оптимизирован процесс копирования файлов перемещаемого профиля пользователя при регистрации пользователя в сети с рабочей станции, на которой уже имеется его кэшированный профиль.

Управление обработкой профилей пользователей

Некоторые настройки работы профилей пользователей в сети можно изменить. Как уже отмечалось, групповые политики позволяют указать, какие из папок профиля являются перемещаемыми, а какие — нет. Можно изменить политики, определяющие реакцию системы в случае использования медленного соединения для копирования перемещаемого профиля из общей папки профилей. Windows по-другому осуществляет обработку перемещаемых профилей и групповых политик в случае использования медленного соединения. Так, для медленного соединения Windows не выполняет копирование перемещаемого профиля из общей папки на сервере, вместо этого используется кэшированная локальная копия профиля. При необходимости можно изменить это заданное по умолчанию поведение Windows. Например, при включении политики Prompt User When Slow Link Is Detected (запрашивать пользователя при обнаружении медленного соединения) пользователь при регистрации через медленное соединение будет получать запрос, дождаться копирования перемещаемого профиля пользователя или продолжить работу с кэшированной копией профиля. Можно также изменить политику Logs User Off When Roaming Profile Fails таким образом, чтобы запретить пользователю регистрацию в сети при невозможности загрузки перемещаемого профиля.

Групповые политики позволяют изменять другие аспекты обработки системой профилей пользователей. Например, если необходимо удалять кэшированную локальную копию перемещаемого профиля пользователя при завершении сеанса работы, можно включить политику Delete Cached Copies of Roaming Profiles («Удалять из кэша копии перемещаемого профиля») в разделе, описанном ранее. Это удобно сделать в среде с использованием терминальных серверов Windows, когда на одной и той же рабочей станции может работать множество пользователей и накопление в кэше большого количества профилей пользователей будет приводить к неоправданному расходованию дискового пространства.

Можно установить квоту на размер профиля пользователя. Следует помнить о том, что профиль пользователя может содержать и другие файлы, помимо пользовательских настроек, причем некоторые из этих файлов могут оказаться довольно большими. Если размер этих файлов окажется велик, они будут занимать очень много места в общей папке на сервере, а регистрация пользователя в сети и завершение работы будут требовать слишком много времени. В некоторых случаях с помощью квотирования имеет смысл ограничить возможности пользователей по части включения в профиль слишком больших файлов. Квота профиля устанавливается в GPO в разделе User ConfigurationAdministrative TemplatesSystemUser ProfilesLimit Profile Size. При этом квотирование следует применять осторожно, так как в некоторых случаях увеличение размеров профиля является оправданным, а ограничение размера может помешать сотрудникам выполнять свои прямые служебные обязанности.

Руководство по борьбе с неполадками

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

Прежде всего необходимо уяснить, что происходит с профилем пользователя в необычных условиях. Например, что если для пользователя задан перемещаемый профиль, на рабочей станции его локальная копия отсутствует, а Windows не может получить доступ к перемещаемому профилю на сервере? В Windows 2000 и XP система создает локальный временный профиль на основе профиля пользователя по умолчанию в папке \%systemroot%documents and settings emp, так что пользователь может продолжить работу. По завершении сеанса система просто удаляет временный профиль, так что все сделанные пользователем изменения настроек будут потеряны.

Рассмотрим другую распространенную ситуацию. Что если на рабочей станции регистрируются два пользователя под одним и тем же именем — произойдет ли в этом случае замена одного профиля другим? Нет, не произойдет, хотя причина этого неочевидна. Нужно помнить о том, что каждая кэшируемая локальная копия профиля регистрируется в реестре с идентификатором SID пользователя, что позволяет предотвратить перезапись локальной копии профиля. Но где же система сохраняет дублирующий профиль? На самом деле Windows добавляет к имени пользователя название домена или рабочей группы. Допустим, на рабочей станции workstationA уже зарегистрирован локальный пользователь jsmith с соответствующим локальным профилем в папке \%systemroot%documents and settingsjsmith. Тогда при регистрации пользователя jsmith из домена AD mycompany.com (NetBIOS — имя домена mycompany) Windows создаст профиль в папке \%systemroot%documents and settingsjsmithmycompany. Это не очень удобно, зато позволяет избежать путаницы.

Почти во всех сетях я сталкивался с одной и той же проблемой, достойное решение которой пока не найдено. Иногда при завершении сеанса пользователя система не производит полную выгрузку профиля на сервер. Какой-то из выполняющихся на рабочей станции процессов держит ветвь реестра ntuser.dat, что не позволяет полностью выгрузить профиль. Это может привести к негативным последствиям для рабочей станции, поскольку сделанные пользователем изменения в ntuser.dat не копируются в перемещаемый профиль пользователя или Windows не может удалить локальную копию профиля, если у вас выбран такой вариант. Некоторые администраторы используют утилиту delprof.exe из Resource Kit для удаления кэшированных локальных копий профиля. В тех случаях, когда файл ntuser.dat заблокирован, эта утилита не может удалить локальный профиль. Единственным простым решением в данной ситуации является перезагрузка рабочей станции, при которой происходит снятие всех блокировок с реестра. Правда, в некоторых ситуациях такое решение нежелательно. В Windows XP Microsoft предоставляет возможность увеличить число попыток сохранения профиля пользователей на сервере. Это делается с помощью политики Computer ConfigurationAdministrative TemplatesSystemUser ProfilesMaximum retries, определяющей допустимое число попыток сохранения и обновления профиля пользователя, — в некоторых сетях изменение данной политики позволяет частично решить проблему.

Если не получается разобраться, что происходит с профилями пользователей в сети, я бы посоветовал включить подробный журнал userenv. Файл userenv.log находится на любой рабочей станции Windows 2000, XP и Windows 2003 в папке \%systemroot%debugusermode. Процедура включения подробного журнала для профилей пользователей и групповых политик описана в статье Microsoft «How to Enable User Environment Debug Logging in Retail Builds of Windows» (http://support.microsoft.com/?kbid=221833). Детализированный журнал действий, выполняемых при загрузке и выгрузке профиля, может помочь при устранении проблем, возникающих с профилями пользователей.

По сравнению с Windows NT 4.0, обработка профилей пользователей претерпела значительные изменения. Понимание механизма использования профилей может помочь в предотвращении и решении соответствующего класса проблем. Обычно в случае затруднений с профилями пользователей администратор просто удаляет профиль, и пользователь вынужден начинать настраивать все заново, а в результате тратится время и пользователя, и в конечном счете администратора. Применение описанных в этой статье приемов и инструментов, особенно ведение и анализ протоколов userenv, поможет локализовать проблемы и избежать необходимости применения радикальных средств.


Даррен Мар-Элиа — редактор журнала Windows & NET Magazine. С ним можно связаться по адресу: dmarelia@winnetmag.net