Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры ОС1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.61 Mб
Скачать

18.Организация подсистемы безопасности в ос Windows: маркеры, привилегии пользователей, олицетворение.

Понятие «Маркер»

У каждого процесса в системе есть структура, описывающая его права доступа. В данном случае процесс выступает как субъект, функционирующий от лица пользователя. Эта структура называется маркером пользователя. (Token). Маркер процесса можно открыть с помощью Open Process Token. На выходе функции мы получим описатель, на основе которого можно запросить определенную информацию. Get Token Information. В эту информацию входит: имя пользователя, идентификатор пользователя, перечни групп, в которые входит пользователь. Первый маркер пользователя создается при входе пользователя в систему (winlogon) и назначается первому процессу, выступающему от лица пользователя (userinit). Маркер создается ядром ОС, взаимодействует со специальным хранилищем информации о пользователе и программами управления этим хранилищем.

Когда пользователь запускает новый процесс, ядро ОС копирует данные маркера пользователя из одного процесса в другой.

Понятие олицетворения

Impersonation. Все нити процесса функционируют от лица пользователя процесса, но иногда возникает необходимость, чтобы какая-либо нить функционировала от лица другого пользователя. В этом случае применяется механизм олицетворения.

  1. Impersonate Logged On User - Олицетворение по тому пользователю, который есть в системе.

  2. Impersonate Anonymous Token – Олицетворение по пользователю-гостю.

  3. Impersonate Named Pipe Client – Олицетворение по тому пользователю, который находится на другой стороне именованного канала.

  4. Impersonate Self – Понижение собственных полномочий.

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

Typedef enum…{

Security Anonymous – наименьшие полномочия (нельзя получать и олицетворять)

Security Identification – можно получать, нельзя олицетворять

Security Impersonation – можно олицетворять, но только не на удаленной машине

Security Delegation – наибольшие полномочия(можно олицетворять на удаленной машине)

} SECURITY_IMPRSONATION_LEVEL;

Revent To Self – возвращает права нити.

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

19. Организация подсистемы безопасности в ос Windows: получение доступа к объекту.

Общая схема получения доступа к объекту.

20. Процессы в ос Windows: понятие Win32 api; main() и WinMain(), создание и завершение процессов и нитей, основные функции работы с процессами и нитями.

Интерфейс между прикладными процессами и ядром ОС в WINDOWS наз-ся Win32API. Этот интерфейс не является «родным», а был разработан дополнительно для управления вызова большинства ф-ций ОС. «Родной» интерфейс - Native API. Многие программы, написанные самой Microsoft используют NativeAPI, который оказался наиболее быстрым.

Особенностью программного интерфейса от Windows состоит в том, что в нем очень большое кол-во ф-ций и с каждой новой версией Windows их количество растёт. Многие ф-ции описанные в Win32API, на самом деле не сущ-ют, т.к. являются макросами, которые компилятор заменяет на вызов правильной функции, такое действие треб-ся из-за UNICODE.

В ОС WINDOWS существуют следующие типы процессов: ―обычные процессы; ―службы; ―драйверы как компоненты системного процесса;

Обычные процессы в ОС Windows делятся на 2 класса: оконные и консольные. На самом деле, с точки зрения ядра ОС, такого подразделения нет. Любой процесс может создать и консоль и граф. Окно. Подразделение появляется только на этапе сборщика при компиляции программы. Сборщик подключает либо оконную, либо консольную библиотеку. Оконные GUI (graphic user interface). Консольные CUI.

Соответствующие стартовые ф-ции программы разных типов различаются:

ASCII

UNICODE

GUI

WinMain

wWinMain

GUI

main

wmain

Для создания процесса в ОС WINDOWS исп-ся ф-ция CreateProcess, которая создает новый процесс, новое адресное пространство, и одну нить процесса, которая начинает вып-ся с точки входа процесса. После вып-я функции упр-е передается в осн. ф-цию процесса. В качестве параметров она принимает путь к файлу программы, параметры командной строки, атрибуты безопасности, флаги создания процессов, наследование описателей помеченных как наследуемые,переменных окружения нового процесса и текущий каталог процесса.

По возврату из функции CreatProcess, если не требуется использовать описатели и нити, их нужно закрыть с помощью спец. функции: CloseHandle. Условия заверения процесса:

1) одна из нитей процесса вызвала функцию void ExitProcess(DWORD dwExitCode)

2) одна из нитей другого прецсса вызывает функцию BOOL TerminateProcess(Handel hProcess, DWORD dwExitCode)

3) основная нить процесса выдет из функции main. В результате вызовется функция ExitProcess.

4) каждая нить процесса вызывает функцию ExitThread(DWORD dwExitCode)

Оптимальный способ завершения процесса: все нити процесса, кроме первой, вызывают фукнцию ExitThread либо выходят из основной функции нити. Основная нить выходит из функции main. В этом случае гарантируется, что не будет потеря данных.

Первичная нить создается автоматически при создании процесса. Остальные нити создаются функцией CreateThread и CreateRemoteThread.

Нить завершается если

– Функция нити возвращает управление.

– Нить самоуничтожается, вызвав ExitThread.

– Другая нить данного или стороннего процесса вызывает TerminateThread.

– Завершается процесс, содержащий данную нить.

Если нить создаётся с флагом CREATE_SUSPEND, то запуск осуществляется при помощи спец. функции:

ResumeThread(HANDLE hThread) возобновить выполнения нити

SuspendThread(HANDLE hThread) заморозить нити

Функция WaitForSingleObject() приостанавливает выполнение нити до тех пор, пока не произойдет одно из двух событий:

– истечет таймаут ожидания;

– ожидаемый объект перейдет в сигнальное (signaled) состояние.

По возвращаемому значению можно понять, какое из двух событий произошло. Ожидать с помощью wait‑функций можно большинство объектов ядра, например, объект «процесс» или «нить», чтобы определить, когда они завершат свою работу.

Функции WaitForMultipleObjects передается сразу массив объектов. Можно ожидать срабатывания сразу всех объектов или какого-то одного из них.