Способы использования симлинков в 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-данных собственные данные — для этого уже потребуется писать программу. О том, как это делается, читайте на странице Создание точки повторной обработки собственного типа.

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


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