пятница, 30 апреля 2010 г.

Опасайтесь также и перенаправленных папок

Это перевод Beware of redirected folders, too. Автор: Реймонд Чен. Входит в книгу The Old New Thing.

Ранее мы узнали о перемещаемых пользовательских профилях (roaming user profiles), когда главная копия профиля пользователя хранится на центральном сервере (который для простоты я буду здесь и далее называть "сервером профилей") и копируется локально, чтобы следовать за пользователем, когда он входит на разные машины в сети организации. Многие люди в комментариях сказали, что они бы предпочли, чтобы файлы хранились на сервере напрямую, а не копировались бы при каждом входе.

Это то, что даёт вам перенаправление папок. Перенаправление папок - это способ администратору домена указать, что выбранные папки в пользовательском профиле (например, Рабочий Стол, Меню Пуск, Мои документы) не хранятся в папке пользователя, а хранятся где-то ещё - например, на отдельном сервере (который здесь и далее я буду называть "сервером папок"). Заметьте, что эта возможность может быть также включена и на перемещаемые профили. Перемещаемые профили копируют пользовательский профиль по сети; перенаправленные папки позволяют выкинуть некоторые подпапки вне папки профиля пользователя. У вас есть четыре способы задействовать эти две возможности, каждый из которых имеет свои особенности. Если вы внимательно следили за рассуждениями, то вы уже можете видеть, как взаимодействуют эти возможности, но я всё равно покажу это в картинках:

Не-перемещаемая часть профиля пользователя("NR-профиль")
Перемещаемая часть профиля пользователя("R-профиль")
Меню Пуск
Мои Документы

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


Локальная машина
NR-профиль
R-профиль
Меню Пуск
Мои Документы
Первый случай - самый типичный: профиль не перемещаем и не содержит перенаправленных папок. Поскольку нам нечего перемещать и перенаправлять, то сложно удивиться тому факту, что всё будет храниться на локальной машине. Это типичная конфигурация на домашних машинах, где у вас нет ИТ-отдела, заправляющего шоу.







Локальная машина Диск C:Локальная машина (D:) или сервер папок
NR-профиль
R-профиль
Меню Пуск
Мои Документы
В этой конфигурации профиль всё ещё хранится локально, но мы перенаправили папку Мои Документы в другое место (хотя, для целей примера, я оставил папку меню Пуск без перенаправления). Этот сценарий не так редок и на домашних машинах, потому что многие люди перенаправляют свои папки Мои Документы на другой, более ёмкий диск той же машины (прим. пер.: это особенно актуально для машины или ноута с двумя винтами, один из которых - маленький и быстрый SSD с системой, а другой - обычный, медленный, но большой HDD с данными пользователя). Другой частой конфигурацией в этой же модели (локальный профиль + перенаправленная папка) является перенаправление папки Мои Документы на сервер папок. Эта альтернативная конфигурация применяется в корпоративных сетях, где все документы пользователя хранятся на центральном файловом сервере, где с них можно регулярно и централизовано снимать резервную копию, либо же они имеют теневую копию, так что файлы могут быть легко восстановлены при необходимости. Иногда вы можете увидеть эту конфигурацию и в домашней сети, если у вас несколько машин, но вы хотите держать свои файлы всегда под рукой. Недостатком этой схемы является то, что если сервер папок оказывается недоступен, то вы теряете доступ ко всем своим документам.


Локальная машинаСервер профилей
NR-профиль
R-профиль
Меню Пуск
Мои Документы
←sync→R-профиль
Меню Пуск
Мои Документы
Это конфигурация с перемещаемым профилем пользователя, но без перенаправленных папок. Как мы узнали ранее, главная мастер-копия пользовательского профиля размещается на сервере профилей. Когда вы входите на машину, копия профиля пользователя на сервере обновляет локальную кэшированную копию профиля, а когда вы выходите из машины, то изменения локального профиля выталкиваются обратно на сервер. Это классическая схема с перемещаемыми профилями, при которой все данные пользователя живут в перемещаемом профиле. Поскольку у нас нет перенаправленных папок, то сервер профилей может даже быть выключен, но вы всё равно сможете работать со своими документами, потому что они кэшированы локально.


Сервер папокЛокальная машинаСервер профилей
NR-профиль
R-профиль←sync→R-профиль
Меню Пуск
Мои Документы
В этом последнем варианте конфигурации мы задействуем и перемещаемый профиль и перенаправление папок. Это другой частый вариант конфигурирования в корпоративном окружении, потому что он уменьшает размер копируемых файлов при входе (т.к. они находятся в перенаправленных папках), но при этом всё ещё хранит ваш профиль и документы на серверах, где ими можно централизовано управлять.




Частой проблемой при хранении файлов исключительно на сервере папок является то, что при недоступности сервера папок вы теряете доступ к документам. Это особенно болезненно для ноутбуков, которые могут проводить много времени не подключенными к корпоративной (или даже домашней) сети, в которой находится сервер папок. Однако, вы можете использовать offline-файлы, чтобы сделать этот сценарий чуть более приемлемым.

Какой из этого следует урок?

Во-первых, как мы уже заметили, когда мы обсуждали перемещаемые профили, одной из причин, почему вы не можете работать с профилем не вошедшего в систему пользователя - это то, что профиль пользователя может быть кэшем, а не актуальной мастер-копией. А что ещё хуже, модификация локальной копии может привести к тому, что она будет считаться мастер-копией, неизбежно приводя к потере данных, когда две версии профиля будут синхронизированы.

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

Вывод: вы не можете манипулировать другим профилем пользователя, не работая из под него. Вам нужно иметь эти моменты ввиду и в других ситуациях, когда данные пользователя оказываются недоступны.

5 комментариев:

  1. Ну, вообще-то автор не прав. Потому что если процесс сумел заставить пользователя виртуально "войти", то ему не составит труда создать дочерний процесс от имени другого пользователя, который получит доступ ко всем данным пользователя. Таким образом *правильное* копание в чужих профилях возможно, но очень геморойно. :)
    Тут же встаёт вопрос об антивирусах. Вот кто копается везде. Интересно, не было ли случаев порчи профилей, когда антивирус удалял вирус в кешированной копии профиля?

    ОтветитьУдалить
  2. >>> Потому что если процесс сумел заставить пользователя виртуально "войти", то ему не составит труда создать дочерний процесс от имени другого пользователя, который получит доступ ко всем данным пользователя.

    Ничего подобного. Я просто могу вывести сообщение "для продолжения работы программы, пожалуйста, войдите под именем XXX".

    ОтветитьУдалить
  3. Что именно "ничего подобного"? Автор сделал допущение, что процессу удалось сделать вход от пользователя и заставить систему загрузить профиль. Но ему могут не дать доступ к файлам пользователя, потому что они могут быть на другом ресурсе, где у локального админа нет прав. Я отвечаю, что тогда можно создать процесс от имени пользователя и ему дадут доступ всюду, куда дали бы доступ самому пользователю. Вы считаете, что это не так?
    P.S. А насчёт сообщения - это хорошо. Надо будет касперскому идею подкинуть. :)

    ОтветитьУдалить
  4. >>> Что именно "ничего подобного"?

    Я может как-то не так вас прочитал, но мне показалось, что вы говорите, что если вы залогинили пользователя (т.е. вызвали LogonUser или её аналог), то вы можете и создать процесс от его имени.

    Я сказал, что это не обязательно так и дал пример другой трактовки слов "даже если вам как-то удастся заставить пользователя войти". Ключевые слова: "заставить пользователя войти". Вы не делаете это сами. Вы как-то заставляете его сделать это.

    Даже если я прочитал ваше сообщение как-то не так, я всё равно не улавливаю смысла вашего "вообще-то автор не прав". Как я понял, вы сказали это к высказыванию "вы не можете манипулировать другим профилем пользователя, не работая из под него". Но вы же сами тут же говорите: "если процесс сумел заставить пользователя виртуально "войти", то ему не составит труда создать дочерний процесс от имени другого пользователя". Ну? Вы же работаете с профилем пользователя из него самого! Автор поста не говорил, что это невозможно. Он говорил, что вы не можете делать это снаружи профиля. Что вы сами же и подтверждаете.

    ОтветитьУдалить
  5. Хм... А я как раз имел ввиду "заставить войти" в широком смысле. :) Т.е. без присутствия человека. Потому что если можно заставить пользователя войти в систему руками, то нет необходимости копаться в профиле другого пользователя. Можно, например, прописать себя в общую автозагрузку.

    Ну, ладно. Разобрались. :)

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

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

Примечание. Отправлять комментарии могут только участники этого блога.