Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Seznam řízení přístupu (ACL) je seznam položek řízení přístupu (ACL) vytvořených operačním systémem k řízení chování zabezpečení přidruženého k danému (chráněnému) objektu určitého typu. Ve Windows existují dva typy seznamů ACL:
Volitelný ACL je seznam nula nebo více ACE, které popisují práva přístupu k chráněnému objektu. Je volitelné, protože udělený přístup je na uvážení vlastníka nebo libovolného uživatele s příslušnými právy.
Seznam systémový ACL je seznam nulových nebo více prvků řízení přístupu (ACE), které popisují zásady auditování a alarmů pro chráněný objekt.
Pojem "diskreční" označuje rozdíl mezi povinnou a diskreční kontrolou. V prostředí, které používá povinné ovládací prvky, nemusí být vlastník objektu schopen udělit přístup k objektu. V volitelném prostředí, jako je například Windows, může vlastník objektu udělit takový přístup. Povinné kontroly jsou obvykle spojeny s těsnými bezpečnostními prostředími, jako jsou například ty, které používají rozdělené zabezpečení, kde systém musí zabránit zpřístupnění citlivých informací mezi uživateli ve stejném systému.
Řidič, který vytváří ACL, se řídí několika klíčovými kroky:
Přidělte úložiště pro ACL
Inicializujte ACL.
Přidejte nula (nebo více) ACEs do seznamu ACL.
Následující příklady kódu předvádějí, jak sestavit ACL.
dacl = ExAllocatePool(PagedPool, PAGE_SIZE);
if (!dacl) {
return;
}
status = RtlCreateAcl(dacl, PAGE_SIZE, ACL_REVISION);
if (!NT_SUCCESS(status)) {
ExFreePool(dacl);
return;
}
Předchozí fragment kódu vytvoří prázdnou ACL. Ukázka kódu přiděluje značné množství paměti, protože neznáme velikost potřebnou pro ACL.
V tomto okamžiku je seznam ACL prázdný, protože neobsahuje žádné položky ACE. Prázdný seznam ACL odepře přístup každému, kdo se pokouší o přístup k objektu, protože neexistují žádné položky, které takový přístup udělují. Následující fragment kódu přidá ACE do této ACL:
status = RtlAddAccessAllowedAce(dacl, ACL_REVISION, FILE_ALL_ACCESS, SeExports->SeWorldSid);
if (!NT_SUCCESS(status)) {
ExFreePool(dacl);
return;
}
Přidaná funkce ACE uděluje přístup k jakékoli entitě, která přistupuje k objektu, což je účelem SID (SeWorldSid). Tento identifikátor SID je obvykle reprezentován jako přístup "Všichni" v jiných systémových nástrojích systému Windows.
Při vytváření seznamů ACL je důležité umístit položky ACE s přístupem zakázaným na začátek seznamu ACL a položky ACE s přístupem povoleným na konec seznamu ACL. Toto pořadí je důležité. V opačném případě referenční monitor zabezpečení udělí přístup, pokud najde ACE povolující přístup před ACE zamítajícím přístup, když vyhodnocuje ACL. Toto chování je dobře zdokumentované v sadě Microsoft Windows SDK, ale souvisí s konkrétním mechanismem, který monitor zabezpečení používá k určení, zda má být udělen nebo odepřen přístup.