Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода лр2 СПЗ.doc
Скачиваний:
1
Добавлен:
14.11.2019
Размер:
64.51 Кб
Скачать

Лабораторная работа № 7 (6 часов) .

Тема: Списки контроля доступа Access Control List (ACL).

Цель: Ознакомиться со списками контроля доступа.

Теоретические сведения:

Security descriptor содержит информацию о владельце объекта, а также может включать следующие списки контроля доступа Access-Contol List (ACL):

ACL - acces control list - фундаментальная часть Windows NT . ACL определяет, какой у вас доступ на те или иные ресурсы . Состоит из 2-х частей :      1. DACL - определяет права доступа к ресурсам      2. SACL - контролирует эти права Следующий код определяет, распространяется ли ACL на диск С: #include "stdafx.h" #include "stdio.h" #include <windows.h> int main() {  char * vol = "c:\\";  DWORD f = 0 ;  if(GetVolumeInformation(vo1,NULL,0,NULL,NULL,&f,NULL,0))  {   printf ("%s support ACLs",vo1,(f & FS_PERSISTENT_ACLS) ? "" : "NOT");  }  else  {   printf ("error");  }  return 0; } DACL сосотоит из одного или нескольких ACE - access control entries . ACE состоит из SID (Security ID) - и описания того, что может делать этот SID с ресурсом. SID представляет пользователя, группу или компьютер. Например, если аккаунт, который определяет ваши права на ресурс , есть EveryOne (Deny Full Control), то SID = S-1-1-0 . Каждый дескриптор имеет свое описание, которое можно найти в sddl.h .

Например, пусть у нас имеется ресурс, к которому надо  привязать 3 SID - Full Control , Read , Deny Access .   1. Инициализация :     PSID pEveryoneSID = NULL, pAdminSID = NULL, pNetworkSID  = NULL;     PACL pACL = NULL;     PSECURITY_DESCRIPTOR pSD = NULL;   2. Создаем 3 SID-а:         SID_IDENTIFIER_AUTHORITY SIDAuthNT = SECURITY_NT_AUTHORITY;           //deny Access         SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY; //read         AllocateAndInitializeSid(&SIDAuthNT, 2,SECURITY_BUILTIN_DOMA IN_RID,                                   DOMAIN_ALIAS_RID_ADMI NS,0, 0, 0, 0, 0, 0,&pAdminSID)  //admin   3. Создаем ACL с 3-мя ACE :      if (ERROR_SUCCESS != SetEntriesInAcl(NUM_ACES,ea,NULL,&pACL))throw GetLastError();   4. Создаем Дескриптор        pSD = (PSECURITY_DESCRIPTOR) LocalAlloc(LPTR,SECURITY_DESCRIPTOR_MIN_ LENGTH);   5. Добавляем ACL к дескриптору :         if (!SetSecurityDescriptorDacl(pSD,TRUE,pACL,FALSE)) {throw GetLastError();}         else {SECURITY_ATTRIBUTES sa;sa.nLength = sizeof(SECURITY_ATTRIBUTES);                 sa.bInheritHandle = FALSE;sa.lpSecurityDescriptor = pSD;   6. Привяжем SID к конкретному файлу      if (!CreateDirectory("C:\\Program Files\\MyStuf f", &sa)) throw GetLastError();     Этот пример создает всего лишь 3 SID на файл и не создает каких-то прав доступа .  Следующий пример создает ACL для директории :  if (ConvertStringSecurityDescriptorToSecurityDescriptor(   szSD,SDDL_REVISION_1,&(sa.lpSecurityDescriptor),NULL))          {       CreateDirectory("C:\\MyDir", &sa )          }  С использованием стандартной библиотеки ATL создание сидов упрощается :   //The user accounts   CSid sidBlake("Northwindtraders\\blake");   CSid sidAdmin = Sids::Admins();   CSid sidGuests = Sids::Guests();   //Create the ACL, and populate with ACEs.   //Note the deny ACE is placed before the allow ACEs.   CDacl dacl;   dacl.AddDeniedAce(sidGuests, GENERIC_ALL);   dacl.AddAllowedAce(sidBlake, GENERIC_READ);   dacl.AddAllowedAce(sidAdmin, GENERIC_ALL);   //Create the security descriptor and attributes.   CSecurityDesc sd;   sd.SetDacl(dacl);   CSecurityAttributes sa(sd);   //Create the directory with the security attributes.   if (CreateDirectory("c:\\MyTestDir", &sa)) cout << "Directory created!" << endl;        В Windows 2000 , кроме ACL , существуют другие защитные механизмы :    1. NET Framework Roles       NET-приложения могут использовать principal identity и роли .       Пример применения роли в веб-сервисе :       WindowsPrincipal wp = (HttpContext.Current.User as WindowsPrincipal);       if (wp.IsInRole("Managers" ))       Cоздание самой роли на c# :       GenericIdentity id = new GenericIdentity("Blake");       String[] roles = {"Manager","Tester"};       GenericPrincipal pr = new GenericPrincipal(id,roles);    2. COM+ Roles    3. IP restrictions       Позволяет ограничить доступ к IIS по определенным ip-адресам или доменам .