Защита файлов и каталогов с помощью NTFS. Права доступа. Разрешения NTFS. Кто управляет DACL и SACL, страница 6

Другое решение — лишить членов группы Administrators права Take ownership of files and other objects. В этом случае администраторы не смогут стать владельцем ресурса на разделе с NTFS и, следовательно, получить к нему доступа. Они, конечно, могут вернуть себе это право, но при грамотном аудите об этом будет сделана запись в журнал безопасности Windows NT. Можно, правда, попытаться изменить политику аудита или очистить журнал — но запись и об этом событии сохранится!

Таким образом, одним из основных средств контроля доступа к ресурсам на NTFS-разделах, в том числе и доступа самого администратора, является тщательная настройка системы аудита, о которой мы подробно поговорим в главе 8.

Наследование разрешений NTFS

Один из важных вопросов при работе с объектами на разделах с NTFS — наследование их параметров защиты при создании, копировании или перемещении файлов и папок. Прежде чем приступить к конкретному разговору на эту тему, напомним, что в Windows NT существуют объекты двух типов: контейнеры и простые объекты (т. е. не являющиеся контейнерами).

Контейнер может содержать в себе другие объекты. Именно таким объектом-контейнером является папка, поскольку логически может включать в себя файлы и вложенные папки. А вот файлы — это простые объекты, так как не могут содержать других объектов Windows NT. И с файлами, и с папками, расположенными на разделах с файловой системой NTFS, связаны списки контроля доступа (ACL), причем ACL файлов практически не зависят от ACL папок. Тем не менее при создании нового объекта (файла или папки) с ним связывается начальный ACL, формируемый на основе списка контроля доступа родительской папки, — происходит наследование. Поскольку файлы и папки — объекты разного типа, правила наследования разрешений NTFS для них существенно различаются.

При рассмотрении вопросов наследования удобно рассматривать список контроля доступа объекта-контейнера как совокупность трех отдельных списков:

1.  эффективного списка контроля доступа (Effective ACL), относящегося к самому объекту-контейнеру;

2.  списка, наследуемого простым объектом (Object Inherit ACL);

3.  списка, наследуемого объектом контейнерного типа (Container Inherit ACL).

Кстати, обычно списки Effective ACL и Container Inherit ACL совпадают.

Конечно, в действительности список контроля доступа не состоит из трех отдельных списков. Просто каждая запись в нем помечается соответствующим флагом (содержащимся в структуре ACE_HEADER), который и определяет, к чему относится эта запись из списка контроля доступа объекта-контейнера и кому она будет «передаваться по наследству»: создаваемому внутри контейнера новому объекту-контейнеру, простому объекту, им обоим, или она вообще не будет наследоваться. Например, если для папки установлено разрешение Change (RWXD) (RWXD), ее список контроля доступа будет содержать следующие записи прав доступа:

*  запись 1 — относится к файлам, создаваемым в каталоге:

·  флаги АСЕ: INHERIT_ONLY_ACE | OBJECT_INHERIT_ACE

·  маска доступа: DELETE|GENERIC_READ|GENERIC_WRITE|GENERIC_EXECUTE

*  запись 2 — относится к самой папке и создаваемым вложенным папкам:

·  флаги АСЕ: CONTAINER_INHERIT_ACE

·  маска доступа: DELETE|FILE_GENERIC_READ|FILE_GENERIC_WRITE|FILE_GENERIC_EXECUTE.

Просмотреть флаги и маски доступа для файлов и каталогов можно с помощью программы CACLS, о которой мы поговорим несколько позже.

Рис. 3-1. Наследование прав доступа в Windows NT.

В операционной системе Windows NT установлены следующие правила наследования, которые работают одинаково как для DACL, так и для SACL (рис. 3-1):

*  Простой объект при создании получает разрешения, содержащиеся в списке Object Inherit ACL родительского контейнера. Информация из списков Effective ACL и Container Inherit ACL при этом не используется.

*  Если создаваемый объект — вложенный объект-контейнер, то список Container Inherit ACL объекта-родителя становится для нового объекта как списком Effective ACL, так и списком Container Inherit ACL. Кроме того, список Object Inherit ACL родительского объекта становится списком Object Inherit ACL нового вложенного объекта-контейнера.