Способы использования символьных ссылок и точек повторной обработки 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-данных собственные данные — для этого уже потребуется писать программу. О том, как это делается, читайте на странице Создание точки повторной обработки собственного типа.
По теме точек повторной обработки также есть следующее:
- Создание точки повторной обработки собственного типа.
- Стандартные функции WinAPI для создания символьных и жёстких ссылок в Windows.
- Удаление и копирование точки повторной обработки.
Избранное
Остальное
По вопросам сотрудничества и другим вопросам по работе сайта пишите на cleogroup[собака]yandex.ru