Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...
Топ:
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Процедура выполнения команд. Рабочий цикл процессора: Функционирование процессора в основном состоит из повторяющихся рабочих циклов, каждый из которых соответствует...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
|
из
5.00
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
|
|
В качестве примера рассмотрим программу, задача которой - получение текстового значения Sid владельца файла из дескриптора защиты файла.
#define _WIN32_WINNT 0x0500
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include <sddl.h>
#include <Aclapi.h>
void main(void){
PSID pSid;
PSECURITY_DESCRIPTOR pSD;
PACL pDACL;
LPTSTR StringSid = NULL;
ULONG Error;
HANDLE hFile;
hFile = CreateFile(TEXT("MyFile.txt"), READ_CONTROL, 0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
Error = GetSecurityInfo(hFile,
SE_FILE_OBJECT, // тип объекта
OWNER_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION,
&pSid, // Sid владельца
NULL, // Sid группы
&pDACL, NULL, // списки прав доступа
&pSD // дескриптор защиты);
if(Error!= ERROR_SUCCESS) printf("GetSecurityInfo Error\n");
if (!ConvertSidToStringSid(pSid, &StringSid)) /* память для строки выделяет сама функция */
printf("Convert SID to string SID failed.");
wprintf(L"StringSid %s\n", StringSid);
LocalFree(pSD);
LocalFree(StringSid);
}
Задача данной программы - открыть существующий файл MyFile.txt и применить функцию GetSecurityInfo для извлечения идентификатора безопасности владельца из дескриптора защиты файла. Затем идентификатор преобразуется в текстовую форму и выводится на экран.
Написание, компиляция и прогон программы получения списка контроля доступа к файлу из его дескриптора защиты
На основе предыдущей программы рекомендуется написать программу, которая выводит на экран список прав доступа к обозначенному файлу.
Субъекты безопасности. Процессы, потоки. Маркер доступа
Так же как и объекты, субъекты должны иметь отличительные признаки - контекст пользователя, для того, чтобы система могла контролировать их действия. Сведения о контексте пользователя хранятся в маркере (употребляются также термины "токен", "жетон") доступа. При интерактивном входе в систему пользователь обычно вводит свое имя и пароль. Система (процедура Winlogon) по имени находит соответствующую учетную запись, извлекает из нее необходимую информацию о пользователе, формирует список привилегий, ассоциированных с пользователем и его группами, и все это объединяет в структуру данных, которая называется маркером доступа. Маркер также хранит некоторые параметры сессии, например, время окончания действия маркера. Таким образом, именно маркер является той визитной карточкой, которую субъект должен предъявить, чтобы осуществить доступ к какому-либо объекту.
Вслед за оболочкой (Windows Explorer) все процессы (а также все потоки процесса), запускаемые пользователем, наследуют этот маркер. Когда один процесс создает другой при помощи функции CreateProcess, дочернему процессу передается дубликат маркера, который, таким образом, распространяется по системе.
Основные компоненты маркера доступа показаны на рис. 13.2.

Рис. 13.2. Основные компоненты маркера доступа
Включая в маркер информацию о защите, в частности, DACL, Windows упрощает создание объектов со стандартными атрибутами защиты. Как уже говорилось, если процесс не позаботится о том, чтобы явным образом указать атрибуты безопасности объекта, на основании списка DACL, присутствующего в маркере, будут сформированы права доступа к объекту по умолчанию. Настройку стандартной защиты можно осуществить при помощи функции SetTokenInformation. При этом, поскольку объекты в Windows отличаются большим разнообразием, в списке DACL "по умолчанию" можно указать только так называемые базовые права доступа, из которых система будет формировать стандартные права доступа в зависимости от вида создаваемого объекта. То, как это делается и как сформировать список DACL, по умолчанию присутствующий в маркере, подробно описано в [4], [5].
Задание
Осуществить просмотр данных маркера доступа с помощью утилиты WhoAmi
Если процесс обладает правом TOKEN_QUERY доступа к объекту, то большую часть содержимого маркера можно считать при помощи функции GetTokenInformation. Чтобы получить описатель маркера, необходимо воспользоваться функцией OpenProcessToken.
В качестве примера рассмотрим программу, задача которой - получение текстового значения Sid владельца процесса из маркера доступа данного процесса.
#define _WIN32_WINNT 0x0500
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <stdio.h>
#include <sddl.h>
void main(void){
DWORD TokenUserBufSize=256;
LPTSTR StringSid;
TOKEN_USER *ptUser;
HANDLE hHeap;
HANDLE hToken = NULL;
hHeap = GetProcessHeap();
ptUser = (TOKEN_USER *)HeapAlloc(hHeap, HEAP_ZERO_MEMORY, TokenUserBufSize);
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
printf("OpenProcessToken Error\n");
if (!GetTokenInformation(hToken, // описатель маркера доступа
TokenUser, // нужна информация о пользователе
ptUser, // буфер для информации
TokenUserBufSize, &TokenUserBufSize))
printf("GetTokenInformation Error\n");;
if (!ConvertSidToStringSid(ptUser->User.Sid, &StringSid))
printf("Convert SID to string SID failed.");
wprintf(L"StringSid %s\n", StringSid);
CloseHandle(hToken);
LocalFree(StringSid);
HeapFree(hHeap,0,ptUser);
}
Задача данной программы - получить описатель текущего процесса при помощи функции OpenProcessToken и применить функцию GetTokenInformation для извлечения из него идентификатора безопасности владельца. После чего идентификатор преобразуется в текстовую форму и выводится на экран.
В следующей лекции будет приведен пример программы получения из маркера доступа информации о привилегиях пользователя.
|
|
|
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
© cyberpediasu.com 2017-2026 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!