Возможности NTFS - Консолидированная безопасность

ОГЛАВЛЕНИЕ

Консолидированная безопасность

NTFS всегда располагала функциями безопасности, позволяющими администратору указать пользователей, которым разрешен или запрещен доступ к тем или иным файлам и каталогам. В версиях NTFS, предшествовавших Windows 2000, дескриптор безопасности каждого файла и каталога хранился в его собственном атрибуте безопасности. В большинстве случаев администраторы назначают единые параметры безопасности всему дереву каталогов, что приводит к дублированию дескрипторов безопасности для всех файлов и подкаталогов, к которым применяются параметры. Такое дублирование может привести к значительным потерям дискового пространства в многопользовательских средах, таких, как Windows 2000 Server Terminal Services и NT Server 4.0, Terminal Server Edition (WTS), где дескрипторы безопасности могут содержать элементы для многих учетных записей. NTFS5 оптимизирует выделение дискового пространства для хранения дескрипторов безопасности, сохраняя лишь один экземпляр каждого дескриптора безопасности на томе в центральном файле метаданных с именем $Secure.

 

Как работает файл метаданных $Secure.

В файле $Secure хранятся два индексных атрибута — $SDH и $SII — и атрибут потока данных, именуемый $SDS (см. Рисунок 2). NTFS5 назначает каждому уникальному дескриптору на томе внутренний идентификатор безопасности NTFS (не путать с SID, уникально идентифицирующим компьютеры и учетные записи пользователей) и хеширует дескриптор безопасности в соответствии с простым хеш-алгоритмом. Хеш-значение — потенциально неуникальное сокращенное представление дескриптора. Элементы в индексе $SDH отображают хеш-значения дескриптора безопасности на область хранения дескриптора безопасности в атрибуте данных $SDS, а индекс $SII отображает на область хранения дескриптора безопасности в атрибуте данных $SDS идентификаторы безопасности NTFS5.

Назначив дескриптор безопасности файлу или каталогу, NTFS получает хеш-значение дескриптора и просматривает индекс $SDH в поисках совпадений. NTFS сортирует элементы индекса $SDH согласно хеш-значению соответствующего дескриптора безопасности и сохраняет элементы в B+ дереве. Обнаружив для дескриптора совпадение в индексе $SDH, NTFS определяет смещение дескриптора безопасности элемента из записи $SDS Offset и считывает дескриптор безопасности из атрибута $SDS. Если совпадают хеш-значения, но не дескрипторы безопасности, то NTFS ищет еще один совпадающий элемент в индексе $SDH. Если NTFS обнаруживает полное совпадение, то файл или каталог, которому назначен дескриптор безопасности, может установить связь с дескриптором безопасности в атрибуте $SDS.

NTFS устанавливает связь, считывая идентификатор безопасности из элемента $SDH и сохраняя его в атрибуте $STANDARD_INFORMATION файла или каталога. В атрибуте $STANDARD_INFORMATION системы NTFS, который имеют все файлы и каталоги, хранится базовая информация о файле, в том числе атрибуты и временные метки. В Windows 2000 этот атрибут расширен, в нем появилась дополнительная информация, например идентификатор безопасности файла.

Если NTFS не обнаруживает в индексе $SDH элемента с дескриптором безопасности, совпадающим с назначаемым, значит, новый дескриптор уникален для тома, и NTFS назначает ему новый внутренний ID безопасности. Внутренние ID безопасности NTFS представляют собой 32-разрядные величины, а идентификаторы SID обычно в несколько раз длиннее, поэтому представление идентификаторов SID идентификаторами безопасности NTFS позволяет сэкономить место в атрибуте $STANDARD_INFORMATION. Затем NTFS добавляет дескриптор безопасности в атрибут $SDS, который сортируется в B+ дереве по ID безопасности NTFS, и дополняет индексы $SDH и $SII элементами, указывающими на смещение дескриптора в массиве данных $SDS.

Когда приложение пытается открыть файл или каталог, NTFS отыскивает дескриптор безопасности файла или каталога с помощью индекса $SII.

NTFS читает внутренний ID безопасности файла или каталога из атрибута $STANDARD_INFORMATION записи MFT, а затем использует индекс $SII файла $Secure для поиска элемента ID в атрибуте $SDS. По смещению в атрибуте $SDS система NTFS считывает дескриптор безопасности и завершает проверку безопасности. NTFS5 не удаляет элементы файла $Secure, даже если с ним не связано ни одного файла или каталога на томе. Наличие неудаленных элементов не приводит к значительной потере дискового пространства, так как число уникальных дескрипторов безопасности на большинстве томов, даже используемых в течение длительного времени, сравнительно невелико.

Благодаря универсальной индексации NTFS5 файлы и каталоги с одинаковыми параметрами безопасности эффективно используют общие дескрипторы. С помощью индекса $SII NTFS быстро отыскивает дескрипторы безопасности в файле $Secure в ходе проверок безопасности, а индекс $SDH позволяет быстро определить, имеется ли в файле $Secure ранее сохраненный дескриптор безопасности, пригодный для совместного использования с данным файлом или каталогом.