hex.pp.ua

Способы использования симлинков в Windows

Способы использования символьных ссылок и точек повторной обработки NTFS




В Windows 7 есть символьные ссылки (ещё их называют символическими ссылками), или симлинки. В более ранних версиях Windows есть прототип символьных ссылок — символьная связь (junction), которая отличается тем, что может указывать только на диск или каталог и не поддерживает относительные пути.

Как создаются символьные ссылки? Можно для этого написать программу, а можно воспользоваться существующими утилитами. В Windows 7 для этого есть консольная программа mklink.

MKLINK [[/D] | [/H] | [/J]] Ссылка Назначение

        /D          Создание символической ссылки на каталог.
                    По умолчанию создается символическая ссылка на файл.
        /H          Создание жесткой связи вместо символической ссылки.
        /J          Создание соединения для каталога.
        Ссылка      Имя новой символической ссылки.
        Назначение  Путь (относительный или абсолютный), на который ссылается
                    новая ссылка.

Кроме того, существует утилита Junction из набора программ Sysinternals.

Ситуация первая — незваные гости

Ещё ситуация: есть программа или часть программы, например база данных, которую нужно быстро уничтожить в случае прихода нежданных гостей. Но софт капризный и хочет стоять, допустим только на диске С и хранить данные строго в определённом каталоге. Что делать, если гости всё же пришли, как быстро уничтожить данные? Симлинки могут выручить — перенаправлять локальный путь на флешку, съёмный диск или по сети. В экстренном случае выдёргивается флешка или отрубается сеть, флешку можно уничтожить физически. На компе ссылка становится мёртвой, данных на самом компе нет. Это быстрее, чем вынимать из компа жёсткий диск и уничтожать его.

Ситуация вторая — если у кого-то есть доступ к вашему компьютеру в локалке

Если в локальной сети или в сети предприятия у кого-то есть доступ к вашему компьютеру, то он может заставить вас:

  • сохранять данные не туда, куда вы ожидаете;
  • заставить вас запустить что-то не оттуда, откуда вы ожидаете.

Ведь никто не проверяет перед сохранением, не является ли целевая папка символьной ссылкой? Да и не сразу сообразишь, как это сделать.

Ситуация третья — использовать reparse-данные как скрытое хранилище

Cимлинки внутри устроены сложно. Внутри у них скрывается более мощный механизм — reparse points.

Из файла можно делать не только симлинк, но и вообще присоединять произвольные данные, причём такой файл в системе будет выглядеть мёртвым. На все операции с файлом система будет выдавать «Ошибка 0x80070780. Доступ к этому файлу из системы отсутствует». Ни удалить файл, ни переименовать его стандартными средствами не получиться.

Всё же в системе есть инструмент для работы с reparse-данными, доступный в командной строке, это утилита fsutil:

>fsutil reparsepoint
---- Поддерживаемые команды REPARSEPOINT ----

query           Запрос точки повторной обработки
delete          Удаление точки повторной обработки

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

Ситуация четвёртая — убиваем свободное место на диске

C помощью созданного reparse-файла спрятать сразу много данных, чтобы не нашли. Делается это так:

  • Создаётся пустой файл file;
  • К нему цепляется NTFS-поток file:stream. Прицепить поток к файлу можно, например, с помощью программы NTFS Stream Explorer;
  • В поток записывается произвольное количество данных, можно даже пожрать всё свободное место пользователя;
  • В файл записываются reparse-данные, после чего он становится либо недоступен, либо выглядит как простой симлинк.

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

Как же его обратно извлечь? Нужно удалить reparse-данные, file станет обратно обычным файлом, file:stream снова можно будет открыть и прочитать. То есть можно таким образом хорошо спрятать архив с чем-то секретным или убить свободное пространство на чужом диске, пользователь ни за что не найдёт, куда оно ушло.

Итог

Стандартными средствами Windows можно лишь создавать и удалять символьные ссылки. А вот хранить в reparse-данных собственные данные — для этого уже потребуется писать программу. О том, как это делается, читайте на странице Создание точки повторной обработки собственного типа.

По теме точек повторной обработки также есть следующее:

система комментирования CACKLE
Разделы сайта
Главная
Блог
Native API
NTFS и ReFS
Микроконтроллеры
Справочник NTDLL
Коды NTSTATUS
Разное

Избранное
NTFS Stream Explorer
Native Shell
Тенгвар

Остальное
nvpnhcknn (архив)
English pages
Контакты

Ленты atom
Лента Atom сайта Лента Atom блога



При копировании материалов хорошим тоном будет указание авторства и ссылка на сайт.