Файловая система типа NTFS




 

Система NTFS (New Technology File System – файловая система новой технологии) представляет собой новую сложную файловую систему, разработанную специально для Windows NT и перене­сенную в Windows 2000. Эта фай­ловая система не является попыткой улучшить старую файловую систему MS-DOS.

Длина имени файла в системе NTFS ограничена 255 символами, полная длина пути ограничивается 32 767 символами. Файл в системе NTFS – это не просто линейная последовательность байтов, как файлы в системах FAT-32 и UNIX. Вместо этого файл состоит из множества атрибутов, каждый из которых представляется в виде потока байтов. Большинство файлов имеет несколько коротких потоков, таких как имя файла и его 64-битовый идентификатор, плюс один длинный (неименованный) поток с данными. Однако у файла может быть и несколько длинных потоков данных. У каждого потока своя длина. Каждый поток может блокировать­ся независимо от остальных потоков. Максимальная длина потока составляет 16 экзабайт (2 в степени 64 байт). Для отслеживания местонахождения процесса в каждом потоке используются 64-разрядные файловые указатели.

Вызовы функций Win32 API для управления файлами и каталогами в первом приближении подобны соответствующим им в UNIX, но у функций Win32 API больше параметров и другая модель безопасности. Процедура откры­тия файла возвращает дескриптор файла, который затем может использоваться для чтения этого файла или записи в файл. Для графических приложений заранее не определены указатели в файлах. Стандартные потоки ввода, вывода и сообщений об ошибках при необходимости должны открываться явно. Однако в консольном режиме они открываются заранее. Интерфейс Win32 также содержит ряд допол­нительных вызовов, отсутствующих в системе UNIX.

Каждый том NTFS (то есть дисковый раздел) содержит файлы, каталоги, битовые массивы и другие структуры данных. Каждый том организован как линейная последовательность блоков (кластеров по терминологии Microsoft). Размер блока фиксирован для каждого тома и варьируется в пределах от 512 байт до 64 Кбайт, в зависимости от размера тома. Для большинства дисков NTFS используются блоки размером в 4 Кбайт как компромисс между большими блоками (для эф­фективности операций чтения/записи) и маленькими блоками (для уменьшения потерь дискового пространства на внутреннюю фрагментацию). Обращение к бло­кам осуществляется по их смещению от начала тома, для которого используются 64-разрядные числа.

Главной структурой данных в каждом томе является главная файловая табли­ца MFT (Master File Table), представляющая собой линейную последовательность записей фиксированного (1 Кбайт) размера. Каждая запись MFT описывает один файл или один каталог. В ней содержатся атрибуты файла, такие как его имя и временные штампы, а также список дисковых адресов, указывающих на располо­жение блоков файла. Если файл очень большой, то иногда бывает необходимо ис­пользовать две и более записей главной файловой таблицы, чтобы вместить спи­сок всех блоков файла. В этом случае первая запись MFT, называемая базовой записью, указывает на другие записи MFT.

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

Главная файловая таблица имеет следующую структуру.

Каждая запись MFT состоит из последовательности пар (заголовок атрибута, значение). Каждый атрибут начинается с заголовка, идентифицирующего этот атрибут и сообщающе­го длину значения, так как некоторые атрибуты, например имя файла или данные, могут иметь переменную длину. Если значение атрибута достаточно короткое, что­бы поместиться в запись MFT, оно помещается туда. Если же это значение слиш­ком длинное, оно располагается в другом месте диска, а в запись MFT помещается указатель на него. Первые 16 записей MFT зарезервированы для файлов метаданных NTFS. Каждая запись описывает нормальный файл, у которого есть атрибуты и блоки данных, как у любого файла. У каждого такого файла есть имя, начинающееся с символа доллара, указывающего на то, что это файл мета­данных. Первая запись описывает сам файл MFT. В частности, она содержит ин­формацию о расположении блоков файла MFT, что позволяет системе найти файл MFT. Очевидно, чтобы найти всю остальную информацию о файловой системе, у операционной системы Windows 2000 должен быть некий способ нахождения первого блока файла MFT. Номер первого блока файла MFT содержится в загру­зочном блоке, куда он помещается при установке системы.

Запись 1 представляет собой дубликат первой части файла MFT. Эта инфор­мация является настолько ценной, что наличие второй копии может быть необхо­димо на случай, если один из первых блоков главной файловой таблицы вдруг ста­нет дефектным. Запись 2 представляет собой журнал. Когда в файловой системе производятся структурные изменения, такие как добавление нового каталога или удаление существующего каталога, информация о предстоящей операции реги­стрируется в журнале. Таким образом, увеличивается вероятность корректного восстановления файловой системы в случае сбоя во время выполнения операции. Изменения атрибутов файлов также регистрируются здесь. В этом журнале не регистрируются только изменения данных пользователя. В записи 3 содержится информация о томе, например его размер, метка и версия.

Как уже отмечалось, каждая запись MFT содержит последо-вательность пар (заголовок атрибута, значение). Файл $AttrDef является тем местом, в котором определяются атрибуты. Информация об этом файле хранится в записи 4 табли­цы MFT. В следующей записи содержатся данные о корневом каталоге, который сам представляет собой файл и может произвольно увеличиваться в размерах. Он описывается записью 5 главной файловой таблицы.

Свободное место на диске учитывается с помощью битового массива. Битовый массив сам является файлом, и его атрибуты и дисковые адреса хранятся в запи­си 6 таблицы MFT. Следующая запись таблицы MFT указывает на файл начальной загрузки. Запись 8 используется для того, чтобы связать вместе все дефектные блоки и гарантировать, что они никогда не встретятся в файлах. Запись 9 содер­жит информацию о защите. Запись 10 используется для преобразования регистра. Наконец, запись 11 представляет собой каталог, содержащий раз­личные файлы для дисковых квот, идентификаторов объектов, точек повторного анализа и т. д. Последние четыре записи MFT зарезервированы на будущее.

Каждая запись MFT состоит из заголовка записи, за которым следует после­довательность пар (заголовок атрибута, значение). Заголовок записи содержит: магическое число, используемое для проверки действительности записи; поряд­ковый номер, обновляемый каждый раз, когда запись используется для нового файла; счетчик обращений к файлу; действительное количество байт, использу­емых в записи; идентификатор (индекс, порядковый номер) базовой записи (используемый только для записей расширения), а также другие различные поля. Следом за заголовком записи располагается заголовок первого атрибута, за кото­рым идет значение первого атрибута, потом заголовок второго атрибута, значение второго атрибута и т. д.

В файловой системе NTFS определено 13 атрибутов, которые могут появ­ляться в записях MFT. Все записи таблицы MFT состоят из последовательности заголовков атрибутов, каждый из которых иден­тифицирует следующий за ним атрибут, а также содержит длину и расположе­ние поля значения вместе с разнообразными флагами и прочей информацией. Как правило, значения атрибутов располагаются непосредственно за заголовками, но если длина значения слишком велика, чтобы поместиться в запись таблицы MFT, она может быть помещена в отдельный блок диска. Такой атрибут называ­ется нерезидентным атрибутом. Например, таким атрибутом является атрибут данных. Некоторые атрибуты, такие как атрибуты имени, могут повторяться, но все атрибуты должны располагаться в записи MFT в фиксированном поряд­ке. Длина заголовков резидентных атрибутов 24 байт, заголовки для нерезидент­ных атрибутов длиннее, так как они содержат информацию о месте расположения атрибута.

Стандартное информационное поле содержит сведения о владельце файла, ин­формацию о защите, временные штампы (необходимые для стандарта POSIX), счет­чик жестких связей, бит «только чтение», архивный бит и т. д. Это поле имеет фик­сированную длину, и оно всегда присутствует.

В операционной системе Windows NT 4.0 информация о защите файла могла содержать­ся в атрибуте файла, но в Windows 2000 эти данные хранятся в отдельном файле, что позволяет нескольким файлам совместно пользоваться общими описателями защиты. Список атрибутов нужен на случай, если атрибуты не помещаются в за­пись MFT. Каждая запись в списке содержит 48-разрядный индекс в таблице MFT, указывающий на запись расширения, а также 16-разрядный порядковый номер, позволяющий проверить соответствие записи расширения и базовой записи.

Атрибут «идентификатор объекта» задает файлу уникальный номер. Иногда он используется внутри системы. Точка повторного анализа велит процедуре, анализирующей имя файла, выполнить специальные действия. Этот механизм применя­ется для монтирования устройств и символьных ссылок. Два следующих атрибу­та используются только для идентификации тома. Еще три атрибута используют­ся для реализации каталогов. Небольшие каталоги представляют собой простые списки файлов, но большие каталоги реализуются в виде деревьев. Поток дан­ных утилиты регистрации используется шифрующей файловой системой.

Имя потока данных, если оно присутствует, располагается в заголов­ке атрибута данных. Следом за этим заголовком располагается либо список дисковых ад­ресов, определяющий положение файла на диске, либо сам файл (для небольших файлов длиной в несколько сотен байтов). Метод по­мещения самого содержимого файла в запись MFT называется непосредственным файлом.

Для увеличения эффективности дисковые блоки файлам назначаются по воз­можности в виде серий последовательных блоков (сегментов файла). Например, если первый логический блок файла помещается в блоке 20 на диске, тогда систе­ма будет стараться выделить для второго блока этого файла блок 21, для третье­го – блок 22 и т. д. Один из способов выделения файлам таких серий блоков за­ключается в том, чтобы предоставлять файлам сразу по несколько блоков.

 

Блоки в файле описываются последовательностью записей, каждая из которых описывает последовательность логически непрерывных блоков. Непрерывный файл описывается всего одной записью. К этой категории относятся файлы, за­писываемые за одну операцию от начала до конца. Файл с одной «дыркой» (на­пример файл, для которого определены только блоки с 0 по 49 и с 60 по 79), будет описываться двумя записями. Такой файл может быть создан, если сначала запи­сать в него первые 50 блоков, затем переместить указатель в файле на логический блок 60 и записать еще 20 блоков. Когда из такого файла читается «дырка», все отсутствующие байты оказываются нулями.

Каждая запись начинается с заголовка, определяющего смещение первого бло­ка в файле. Затем располагается смещение первого блока, не покрываемого пер­вой записью. Следом за каждым заголовком располагаются пары, в которых содержатся дисковые адреса и длины серий блоков. Эти дисковые адреса представляют собой смещение блока от начала дискового раздела. Длина серии – это количество бло­ков в серии. В записи серии может содержаться любое необходимое количество пар.

Для хранения больших фрагментированных файлов может быть использовано несколько записей таблицы MFT. Проблема может возникнуть, если потребуется так много записей MFT, что в базовой записи не поместятся все индексы MFT. Эта проблема решается следу­ющим образом: список записей MFT делается нерезидентным (то есть хранится отдельно на диске, а не в базовой записи MFT). В этом случае его размер уже ничем не ограничен.

Запись MFT для небольшого каталога со­держит несколько каталоговых записей, каждая из которых описывает файл или каталог. Фиксированная часть содержит индекс записи MFT файла, длину имени файла, а также другие разнообразные поля и флаги. Поиск файла в каталоге по имени состоит в последовательном переборе всех имен файлов. Для больших каталогов используется другой формат. Вместо того чтобы линей­но перечислять файлы, используется дерево, обеспечивающее поиск в алфа­витном порядке и упрощающее добавление в каталог новых имен в соответству­ющие места.

Помимо обычных файлов и каталогов, файловая система NTFS поддерживает жесткие связи, подобные используемым в UNIX, а также символьные ссылки при помощи механизма, называемого точками повторного анализа. Файл или каталог может быть помечен как точка повторного анализа, и с ним может быть ассоци­ирован блок данных. Когда во время анализа имени файла встречается такой файл или каталог, срабатывает обработка исключения и интерпретируется блок данных. Блок может выполнять различные действия, включая переадресацию поиска, ссы­лаясь на другую часть дерева каталогов или даже на другой дисковый раздел. Этот механизм используется для поддержки как символьных ссылок, так и монтиров­ки файловых систем.

Файловая система NTFS поддерживает прозрачное сжатие файлов. Файл может быть создан в сжатом режиме. Это означает, что файловая система NTFS будет ав­томатически пытаться сжать блоки этого файла при записи их на диск и автомати­чески распаковывать их при чтении. Процессы, читающие этот файл или пишу­щие в него, не будут даже догадываться о том, что при этом происходит компрессия или декомпрессия данных.

Сжатие данных файла происходит следующим образом. Когда файловая сис­тема NTFS записывает на диск файл, помеченный для сжатия, она изучает первые 16 логических блоков файла, независимо от того, сколько сегментов на диске они занимают. Затем к этим блокам применяется алгоритм сжатия. Если полученные на выходе блоки могут поместиться в 15 или менее блоков, то сжатые данные за­писываются на диск, предпочтительно в виде одного сегмента. Если получить вы­игрыш хотя бы в один блок не удается, то данные 16 блоков так и записываются в несжатом виде. Затем весь алгоритм повторяется для следующих 16 блоков и т. д.

В операционной системе Windows 2000 предусмотрена возможность шифрования файлов. Чтобы использовать шифрование в операционной системе Windows 2000, нужно пометить каталог как зашифрованный, в результате чего будут зашифрованы все файлы в этом каталоге, а все новые файлы, перемещен­ные в этот каталог или созданные в нем, также будут зашифрованы. Само шифро­вание и дешифрование выполняется не файловой системой NTFS, а специальным драйвером EPS (Encrypting File System – шифрующая файловая система), разме­щающимся между NTFS и пользовательским процессом. Таким образом, приклад­ная программа не знает о шифровании, а сама файловая система NTFS только частично вовлечена в этот процесс.

 

 

8.6. Безопасность в Windows 2000

 

Основные понятия

 

Операци­онная система Windows 2000 обладает рядом достаточно совершенных и эффективных свойств безопасности, включая следующие:

1. Безопасная регистрация в системе с мерами предосторожности против по­пыток применения фальшивой программы регистрации.

2. Дискреционное управление доступом.

3. Управление привилегированным доступом.

4. Защита адресного пространства для каждого процесса.

5. Обнуление страниц перед выделением их процессу.

6. Аудит безопасности.

Безопасная регистрация означает, что системный администратор может потре­бовать ото всех пользователей наличия пароля для входа в систему. Дискреционное управление доступом позволяет владельцу файла или другого объекта указать, кто может пользоваться объектом и каким образом. Средства управления привилегированным доступом позволяют системному администрато­ру (суперпользователю) получать доступ к объекту, несмотря на установленные его владельцем разрешения доступа. Под защитой адресного пространства имеется в виду лишь то, что у каждого процесса есть собственное защищенное виртуаль­ное адресное пространство, недоступное для любого неавторизованного процесса. Следующий пункт означает, что при увеличении стека выделяемые для него стра­ницы заранее обнуляются, так что процесс не может обнаружить в них информа­ции, помещенной предыдущим владельцем страницы памяти (страницы подаются процессам из списка обнуленных страниц). Наконец, аудит безопасности следует понимать как регистрацию системой в журнале опре­деленных событий, относящихся к безопасности. Впоследствии этот журнал может просматривать системный администратор.

У каждого пользователя (и группы) операционной системы Windows 2000 есть идентификатор безопасности SID (Security IDentifier), по которому операцион­ная система отличает его от других пользователей. Идентификаторы безопаснос­ти представляют собой двоичные числа с коротким заголовком, за которым следу­ет длинный случайный компонент. Каждый SID должен быть уникален в пределах всей планеты. Когда пользователь запускает процесс, этот процесс и его потоки работают под идентификатором пользователя. Большая часть системы безопасно­сти спроектирована так, чтобы гарантировать предоставление доступа к каждому объекту только потокам с авторизованными идентификаторами безопасности.

У каждого процесса есть маркер доступа, в котором указывается SID и другие свойства. Как правило, он назначается при регистрации в системе процедурой winlogon. Заголовок маркера содержит некоторую админи­стративную информацию. По значению поля срока действия можно определить, когда маркер перестанет быть действительным. Поле Groups (группы) указывает группы, к которым принадлежит процесс. Это поле необходимо для соответствия требованиям стандарта POSIX. Поле Default DACL (Default Discretionary Access Control List – список разграничительного контроля доступа по умолчанию) представляет собой список управ­ления доступом, назначаемый объектам, созданным процессом, если не опреде­лены другие списки ACL. Идентификатор безопасности пользователя указывает пользователя, владеющего процессом. Ограниченные идентификаторы SID по­зволяют ненадежным процессам принимать участие в заданиях вместе с надеж­ными процессами, но с меньшими полномочиями и меньшими возможностями причинения ущерба.

Наконец, перечисленные в маркере привилегии (если они перечислены) дают процессу особые полномочия, такие как право выключать компьютер или полу­чать доступ к файлам, к которым в противном случае в этом доступе процессу было бы отказано. Привилегии позволяют разбить полномочия системного админист­ратора на отдельные права, которые могут предоставляться процессам по отдель­ности. Таким образом, пользователю может быть предоставлена часть полномо­чий суперпользователя, но не все его полномочия. Итак, маркер доступа содержит информацию о том, кто владеет процессом и какие умолчания и полномочия ассо­циированы с ним.

Когда пользователь регистрируется в системе, процесс winlogon назначает мар­кер доступа начальному процессу. Последующие процессы, как правило, наследу­ют этот маркер. Маркер доступа процесса изначально применяется ко всем пото­кам процесса. Однако поток во время исполнения может получить другой маркер доступа. В этом случае маркер доступа потока перекрывает маркер доступа про­цесса. В частности, клиентский поток может передать свой маркер доступа сервер­ному потоку, чтобы сервер мог получить доступ к защищенным файлам и другим объектам клиента. Такой механизм называется перевоплощением.

Другим основным понятием является дескриптор защиты. У каждого объекта есть ассоциированный с ним дескриптор защиты, содержащий список пользова­телей и групп, имеющих доступ к данному объекту. Дескриптор защиты состоит из заголовка, за которым следует список DACL с одним или несколькими элемен­тами АСЕ (Access Control Entry – элемент списка контроля доступа ACL). Два основных типа элементов списка – это разрешение и запрет доступа. Разрешаю­щий элемент содержит SID пользователя или группы и битовый массив, опре­деляющий набор операций, которые процессы с данным идентификатором SID могут выполнять с определенным объектом. Запрещающий элемент работает ана­логично, но совпадение идентификаторов означает, что обращающийся процесс не может выполнять перечисленные операции.

Кроме списка DACL у дескриптора защиты есть также список SACL (System Access Control List – системный список контроля доступа), который похож на DACL, только вместо пользователей и групп, имеющих доступ к объекту, в нем перечисляются операции с этим объектом, регистрируемые в специальном журна­ле. В операционной системе Windows 2000 также пре­доставляются дополнительные возможности аудита для регистрации доступа к объектам.





©2015-2017 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.

Обратная связь

ТОП 5 активных страниц!