Poniższy artykuł pochodzi z serii Przygotowań do egzaminu 70-536.
W tej lekcji nauczymy się podstaw ACL jego sposobu analizowania i konfigurowania z poziomu aplikacji.
Co to jest Lista Discretionary Access Control
A discretionary access control list (DACL) jest mechanizmem do autoryzacji, który identyfikuje użytkowników oraz grupy, które mają dostęp lub jego brak do obiektu. Windows Vista oraz Windows Server 2008, tak jak i wszystkie poprzednie, śledzą przywileje użytkowników, którzy mają dostęp do zasobów za pomocą DACL.
Jeśli DACL nie identyfikuje jednoznacznie użytkownika lub grupy, której użytkownik jest członkiem, wtedy użytkownik nie ma dostępu do obiektu. Domyślnie DACL jest kontrolowany przez właściciela obiektu lub przez osobę, która obiekt stworzyła i zawiera wpisy "access control entries” (ACE), które określają dostęp użytkowników do obiektu. ACE jest wpisem w obiekcie DACL, który przyznaje uprawnienia użytkownikowi lub grupie.
Uprawnienia jawne i dziedziczone
Kiedy przypiszemy DACL bezpośrednio do obiektu, stworzymy wtedy jawne uprawnienie. Przypisywanie jawnych uprawnień do poszczególnych folderów, plików, kluczy rejestru i obiektów AD DS, może być ciężkim zadaniem i złym rozwiązaniem. Tak naprawdę zarządzanie ogromną ilością ACL obniża wydajność systemu.
Aby zarządzanie uprawnieniami stało się bardziej efektywne, Windows zawiera koncepcję dziedziczenia. Windows świeżo po instalacji posiada jedynie uprawnienia dziedziczone. Przykładem dziedziczonych uprawnień może być system plików. Np. każdy nowy folder, który utworzymy na C:\ dziedziczy uprawnienia przypisane właśnie głównemu katalogowi na C:\
ACE w .NET Framework
Różne zasoby mają swoje uprawnienia, które możemy wykorzystać do zdefiniowania ACE. Uprawnienia do różnych zasobów działają podobnie, a wszystkie klasy dziedziczą po wspólnej klasie bazowej.
Aby ustawić uprawnienia plików i folderów należy posłużyć się enumem FileSystemRights. Ta enumeracja posiada 24 elementy, które odpowiadają za standardowe i specjalne uprawnienia, które możemy zobaczyć i edytować za pomocą Właściwości w Windows Explorerze. Poniżej lista elementów odpowiadających za uprawnienia dla plików i folderów:
|
FileSystemRights Member
|
Standard Permission
|
Description
|
| Write |
Write |
Użytkownik może tworzyć plik ale niekoniecznie go przeczytać |
| Read |
Read |
Użytkownik może przeglądać zawartość pliku lub folderu |
| ListDirectory |
List Folder Contents |
Użytkownik może przeglądać folder |
| ReadAndExecute |
Read & Execute |
Użytkownik może przeglądać pliki i je odpalać |
| Modify |
Modify |
Użytkownik może czytać, edytować oraz kasować pliki i foldery |
| FullControl |
Full Controll |
Pełna kontrola |
Co to jest lista Security Access Control ?
A security access control list (SACL) jest mechanizmem do logowania zdarzeń, który określa jak badany jest dostęp do pliku bądź folderu. W przeciwieństwie do DACL, SACL nie może ograniczać dostępu do plików i folderów. Mozna za to zarejestrować zdarzenie gdy użytkownik uzyskuje dostęp.
Jak przeglądać i konfigurowac ACL z wewnątrz Assembly
Przestrzeń System.Security.AccessControl zawiera szereg klas do przeglądania i konfigurowania list ACL dla różnych typów obiektów. Dla każdego rodzaju zasobu, przestrzeń ta dostarcza 3 klasy ACL:
<Type>Security – najczęściej używana klasa, która dostarcza metody do pobierania kolekcji DACLs (GetAccessRules) lub SACLs (GetAuditRules) i dodawania lub usuwania (AddAccessRule, RemoveAccessRule, AddAuditRule, RemoveAuditRule). Klasa dziedziczy po NativeObjectSecurity
<Type>AccessRule – reprezentuje zestaw praw użytkownika: zezwalających lub zabraniających. AccessRule dziedziczy po AuthorizationRule.
<Type>AuditRule – reprezentuje zestaw praw dostępu, które mają być skontrolowane dla danego użytkownika lub grupy. AuditRule dziedziczy po AuthorizationRule.
Jak analizować ACL
Aby przeprowadzić analize ACL, musimy wykonać 3 kroki:
1. Tworzymy instancje klasy, która dziedziczy po NativeObjectSecurity, są to klasy takie jak: DirectorySecurity, FileSecurity, RegistrySecurity, lub MutexSecurity.
2. Wywołjemy metode GetAccessRules w celu pobrania AuthorizationRuleCollection.
3. Iterujemy po elementach AuthorizationRuleCollection w celu pobrania i analizowania poszczeólnych ACL.
Poniższy przykład prezentuje jak wyświetlić DACL dla folderu. Ta sama technika może być wykorzystywana również do analizowania pliku, folderu, klucza rejestru itp.
1: DirectorySecurity ds = new DirectorySecurity(@"C:\Program Files",
2: AccessControlSections.Access);
3:
4: AuthorizationRuleCollection arc = ds.GetAccessRules(true, true,
5: typeof(NTAccount));
6: foreach (FileSystemAccessRule ar in arc)
7: Console.WriteLine(ar.IdentityReference + ": " + ar.AccessControlType +
8: " " + ar.FileSystemRights);
Jak konfigurować ACL
Aby skonfigurować ACL należy:
1. Wywołać metodę GetAccessControl do pobrania instanci klasy, która dziedziczy z NativeObjectSecurity, takiej jak DirectorySecurity, FileSecurity, RegistrySecurity, lub
MutexSecurity.
2. Dodaj lub usuń wpisy ACL z obiektu.
3. Wywołaj metodę SetAccessControl aby zaakceptować zmiany.
Poniższy kod pokazuje jak dodać prawa dostępu do folderu, przyznając “Gościowi” prawa odczytu do folderu C:\Test.
1: string dir = @"C:\test";
2: DirectorySecurity ds = Directory.GetAccessControl(dir);
3: ds.AddAccessRule(new FileSystemAccessRule("Guest",
4: FileSystemRights.Read, AccessControlType.Allow));
5: Directory.SetAccessControl(dir, ds);
To wszystko na dzisiaj. Następny artykuł jak zwykle w środę :) Wybaczcie dzisiejsze ewentualne pomyłki ale art pisany był trochę w spartańskich warunkach :)
Kolejny artykuł w serii to 70-536 Encrypting and Decrypting Data