Подсистема защиты в операционных системах семейства Windows основана на SID, маркерах и дескрипторах защиты. Описание SID было приведено выше, сейчас же мы рассмотрим реализацию двух других терминов.
Маркер доступа
Маркер доступа представляет собой набор сведений, присваиваемых любому процессу при его создании и определяющих те операции, которые процесс может выполнять. Он содержит следующую информацию.
• Привилегии, которые предоставлены процессу или потоку (эта информация необходима для определения тех операций, которые может выполнять процесс в операционной системе).
• Тип олицетворения, если маркер является олицетворяющим (эта информация необходима для определения тех прав, которые будут заимствоваться процессом у другого процесса).
Примечание
Олицетворение позволяет одному процессу заимствовать права другого (как будто он имеет маркер доступа другого процесса). Например, олицетворение часто применяется в клиент-серверных приложениях, где сервер может применять олицетворение для получения доступа к ресурсам компьютера от имени клиента (и с его правами доступа). При этом процесс, получивший олицетворяющий маркер (в нашем примере сервер), не может передавать его другому процессу.
Существует несколько уровней олицетворения: anonymous (олицетворение запрещено), identification (можно получать SID и привилегии клиента, но олицетворять клиента запрещено), impersonation (можно как идентифицировать, так и олицетворять клиента) и delegation (позволяет олицетворять клиента как на локальном, так и на удаленном компьютере). Вы уже встречались с этими уровнями при описании оснастки Службы компонентов.
• Информацию о том, кто создал данный маркер (диспетчер сеансов, RPC-cepвер и т. д.).
• DACL по умолчанию (эта информация необходима для определения тех атрибутов защиты, которые будут присваиваться создаваемым с помощью данного маркера объектам, если дескриптор защиты для создаваемого объекта не определен, и объект не наследует DACL родительского объекта).
• Сведения об учетной записи, которой принадлежит маркер, и группах, в которые входит данная учетная запись (эта информация необходима для определения прав доступа процесса к требуемым ему объектам).
Поскольку маркер содержит переменные сведения (набор привилегий и групп), его длина не является постоянной.
Начальный маркер доступа создается во время входа пользователя в систему и присваивается начальному процессу userinit.ехе. Этот процесс запускает все основные процессы пользователя, а поскольку маркер доступа родительского процесса передается и процессам, которые он создает (дочерним процессам), все процессы, создаваемые пользователем, имеют один и тот же маркер доступа.
Кроме основных маркеров доступа и маркеров олицетворения, в операционных системах семейства Windows могут использоваться ограниченные маркеры. Ограниченным называется такой маркер, выданный дочернему процессу, в котором отсутствует какая-нибудь привилегия родительского маркера.
Дескрипторы защиты
Если маркер доступа выдается процессу и определяет те права, которыми обладает запущенный процесс, то дескриптор защиты выдается объектам операционной системы (файлы, каталоги) и определяет тех пользователей, которые могут получить доступ к объекту, а также права, которыми эти пользователи обладают. Дескриптор защиты состоит из следующих элементов.
• DACL (список управления избирательным доступом) – определяет пользователей, которые могут получить доступ к данному объекту, и их права. Каждый АСЕ (элемент списка DACL) содержит SID учетной записи пользователя или группы, маску доступа, а также флаги наследования (определяют, был ли данный АСЕ унаследован от DACL родительского объекта и будет ли он наследоваться DACL дочерних объектов). При этом АСЕ может быть четырех основных типов.
– Доступ разрешен (access allowed). Разрешает пользователю, определенному SID, права доступа к объекту, определенные в маске доступа.
– Доступ отклонен (access denied). Запрещает пользователю, определенному SID, права доступа к объекту, определенные в маске доступа.