Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Lista kontroli dostępu (ACL) to lista wpisów kontroli dostępu utworzonych przez system operacyjny w celu kontrolowania zachowania zabezpieczeń skojarzonego z danym (chronionym) obiektem pewnego rodzaju. W systemie Windows istnieją dwa typy list ACL (Access Control Lists):
Dyskrecjonalna lista ACL to lista zawierająca zero lub więcej ACE, które opisują prawa dostępu do chronionego obiektu. Jest to dyskrecjonalne, ponieważ udzielony dostęp jest według uznania właściciela lub dowolnego użytkownika z odpowiednimi prawami.
Lista ACL systemu to lista zera lub większej liczby ACL, które opisują zasady inspekcji i alarmów dla chronionego obiektu.
Termin "uznaniowy" odnosi się do rozróżnienia między kontrolą obowiązkową a uznaniową. W środowisku, które używa obowiązkowych kontrolek, właściciel obiektu może nie być w stanie udzielić dostępu do obiektu. W środowisku uznaniowym, takim jak Windows, właściciel obiektu może udzielić takiego dostępu. Obowiązkowe mechanizmy kontroli są zwykle kojarzone z ciasnymi środowiskami zabezpieczeń, takimi jak te korzystające z zabezpieczeń z podziałem na przedziały, w których system musi zapobiec ujawnieniu poufnych informacji między użytkownikami w tym samym systemie.
Kierowca konstruujący listę ACL postępuje według kilku kluczowych kroków:
Przydziel pamięć dla listy ACL.
Zainicjuj ACL.
Dodaj zero (lub więcej) wpisów ACE do listy ACL (Lista Kontroli Dostępu).
W poniższych przykładach kodu pokazano, jak skonstruować ACL:
dacl = ExAllocatePool(PagedPool, PAGE_SIZE);
if (!dacl) {
return;
}
status = RtlCreateAcl(dacl, PAGE_SIZE, ACL_REVISION);
if (!NT_SUCCESS(status)) {
ExFreePool(dacl);
return;
}
Poprzedni fragment kodu tworzy pustą ACL. Przykładowy kod przydziela znaczną ilość pamięci, ponieważ nie znamy rozmiaru wymaganego dla listy kontroli dostępu (ACL).
W tym momencie lista ACL jest pusta, ponieważ nie ma wpisów ACE. Pusta lista ACL odmawia dostępu każdemu, kto próbuje uzyskać dostęp do obiektu, ponieważ nie ma wpisów, które udzielają takiego dostępu. Poniższy fragment kodu dodaje ACE do tej listy kontroli dostępu (ACL):
status = RtlAddAccessAllowedAce(dacl, ACL_REVISION, FILE_ALL_ACCESS, SeExports->SeWorldSid);
if (!NT_SUCCESS(status)) {
ExFreePool(dacl);
return;
}
Dodany ACE przyznaje dostęp każdemu podmiotowi, który uzyskuje dostęp do obiektu, co jest celem identyfikatora SID dostępu do świata (SeWorldSid). Ten identyfikator SID jest zazwyczaj przedstawiany jako uprawnienia "Wszyscy" w innych narzędziach systemowych Windows.
Podczas konstruowania list ACL, należy umieścić wpisy ACE odmowy dostępu na początku listy ACL, a wpisy ACE zezwalające na dostęp na końcu listy ACL. Ta kolejność jest ważna. W przeciwnym razie monitor odniesień zabezpieczeń udzieli dostępu, jeśli znajdzie ACE z dostępem zezwolonym przed ACE z odmową dostępu podczas oceny ACL. To zachowanie jest dobrze udokumentowane w zestawie Microsoft Windows SDK, ale odnosi się do określonego mechanizmu używanego przez monitor odwołań zabezpieczeń w celu określenia, czy dostęp powinien zostać udzielony, czy odrzucony.