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

2.3. Структури, використовувані для роботи з маркером доступу

Програми не мають безпосереднього доступу до внутрішньої структури маркера доступу. Тому при роботі з маркерами доступу функції використовують спеціальні структури або переліки, які дозволяють отримувати інформацію з маркера доступу або змінювати необхідну інформацію в маркері доступу. Далі приведені типи структур і переліків, які використовуються при роботі з маркерами доступу.

Для отримання інформації про користувача, пов'язаного із заданим маркером доступу, використовується структура типу:

typedef struct _TOKEN_USER {

SID_AND_ATTRIBUTES User; // SID користувача і атрибути

} TOKEN_USER *PTOKEN_USER;

Структура типу sid_and_attributes визначена таким чином:

typedef struct _SID_AND_ATTRIBUTES {

PSID Sid; // покажчик на SID користувача

DWORD Attributes; // атрибути SID

} SID_AND_ATTRIBUTES * PSID_AND_ATTRIBUTES;

Атрибути ідентифікатора безпеки задаються прапорами, кожен з яких визначає деяку властивість ідентифікатора безпеки. В даний час для ідентифікатора безпеки користувача не визначені атрибути, тому це поле не використовується.

Для отримання інформації про групи, пов'язані із заданим маркером доступу, використовується структура типу:

typedef struct _TOKEN_GROUPS {

DWORD GroupCount; // кількість груп

SID_AND_ATTRIBUTES Groups [ANYSIZE_ARRAY] ; // SID і атрибути груп

} TOKEN_GROUPS *PTOKEN_GROUPS;

У полі Attributes структури типу SID_AND_ATTRIBUTES можуть бути встановлені наступні прапори:

- se_group_mandatory — не можна скинути прапор se_group_enabled;

- se_group_enabled_by_default — прапор перевірки доступу встановлений за умовчанням;

- se_group_enabled — група перевіряється при доступі до об'єкту;

- se_group_owner — користувач, пов'язаний з маркером доступу, є власником групи; або група може бути власником об'єкту;

- se_group_use_for_deny_only — група використовується тільки при перевірці заборони доступу до об'єкту;

- se_group_logon_id — sid ідентифікує сесію, що виконала вхід в систему для користувача, пов'язаного з групою;

- se_group_resource — локальна група домена.

Структура sid_and_attributes була описана вище, при описі структури типу token_user.

Для отримання інформації про привілеї, якими володіє маркер доступу, використовується структура типу:

typedef struct _TOKEN_PRIVILEGES {

DWORD PrivilegeCount;

LUID_AND_ATTRIBUTES Privileges [ANYSIZE_ARRAY] ;

} TOKEN_PRIVILEGES * PTOKEN_PRIVILEGES ;

У полі Attributes структури типу LUID_AND_ATTRIBUTES можуть бути встановлені наступні прапори:

- SE_PRIVILEGE_ENABLED_BY_DEFAULT — привілей встановлений за умовчанням;

- SE_PRIVILEGE_ENABLED — привілей встановлений;

- SE_PRIVILEGE_USED_FOR_ACCESS — привілей використовувався для доступу до об'єкту або сервісу.

Для отримання інформації про ідентифікатор безпеки, який використовуватиметься системою в алгоритмі установки за умовчанням власника нового об'єкту, що створюється процесом з даним маркером доступу, використовується структура типу:

typedef struct _TOKEN_OWNER {

PSID Owner; // SID власника об'єкту за умовчанням

} TOKEN_OWNER * PTOKEN_OWNER;

Відзначимо, що в цьому випадку ідентифікатор безпеки має бути ідентифікатором безпеки одного з користувачів або груп, пов'язаних з даним маркером доступу.

Для отримання інформації про ідентифікатор безпеки, який використовуватиметься системою в алгоритмі установки за умовчанням первинної групи нового об'єкту, що створюється процесом з даним маркером доступу, використовується структура типу:

typedef struct _TOKEN_PRIMARY_GROUP {

PSID PrimaryGroup; // SID первинної групи за умовчанням

} TOKEN_PRIMARY_GROUP *PTOKEN_PRIMARY_GROUP;

Відзначимо, що в цьому випадку ідентифікатор безпеки має бути ідентифікатором безпеки однієї з груп, пов'язаних з даним маркером доступу.

Для отримання інформації про список управління доступом DACL, який використовуватиметься в алгоритмі установки за умовчанням списку DACL нового об'єкту, що створюється процесом з даним маркером доступу, використовується структура типу:

typedef struct _TOKEN_DEFAULT_DACL {

PACL DefaultDacl; // покажчик на список DACL за умовчанням

} TOKEN_DEFAULT_DACL *PTOKEN_DEFAULT_DACL;

Для отримання інформації про джерело, що викликало створення даного маркера доступу, використовується структура типу:

typedef struct _TOKEN_SOURCE {

CHAR SourceName[TOKEN_SOURCE_LENGTH]; // ім'я джерела

LUID Sourceldentifier; // локальний ідентифікатор джерела

} TOKEN_SOURCE * PTOKEN_SOURCE ;

Відмітимо, що поле sourceName є простим символьним масивом, що містить ім'я джерела маркера доступу.

Інформація про тип маркера доступу представляється перелічуваною константою наступного типу:

typedef enum _TOKEN_TYPE {

TokenPrimary = 1, // первинний маркер доступу

Tokenlmpersonation // заміщаючий маркер доступу

} TOKEN_TYPE;

Інформація про рівень заміщення первинного маркера доступу представляється перелічуваною константою наступного типу:

typedef enum _SECURITY_IMPERSONATION_LEVEL {

SecurityAnonymous, // анонімний рівень заміщення

Securityldentification, // ідентифікуючий рівень заміщення

Securitylmpersonation, // рівень підміни контексту безпеки

SecurityDelegation // рівень делегування повноважень

} SECURITY_IMPERSONATION_LEVEL * PSECURITY_IMPERSONATION_LEVEL ;

Для отримання статистичних даних про маркер доступу використовується структура наступного типу:

typedef struct _TOKEN_STATISTICS {

LUID Tokenld; // локальний ідентифікатор маркера доступу

LUID Authenticationld; // локальний ідентифікатор сесії

// яку представляє маркер доступу

LARGE_INTEGER ExpirationTime; //не підтримується

TOKEN_TYPE TokenType; // тип маркера доступу

SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;// рівень заміщення

DWORD DynamicCharged; // об'єм буфера, використовуваного для зберігання

// інформації про захист за умовчанням і ідентифікаторі

// безпеці первинної групи маркера доступу

DWORD DynamicAvailable; // об'єм вільної пам'яті в буфері

DWORD GroupCount; // кількість груп, пов'язаних з маркером доступу

DWORD PrivilegeCount; // кількість привілеїв, доступних в

// маркері доступу

LUID Modifiedld; // локальний ідентифікатор, який змінюється

// кожного разу при модифікації маркера доступу

} TOKEN_STATISTICS *PTOKEN_STATISTICS;

Для отримання інформації про обмежуючі ідентифікатори безпеки використовується структура типа TOKEN_GROUPS. Для отримання інформації про ідентифікатор сесії, в якій був створений маркер доступу, використовується змінна типу DWORD. Цей ідентифікатор використовується тільки в тому випадку, якщо маркер доступу був створений для термінальної сесії. У решті випадків значення цього ідентифікатора дорівнює 0.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]