Automatické šíření zděděných ACL
Funkce SetNamedSecurityInfo a SetSecurityInfo podporují automatické šíření zděděných položek řízení přístupu (ACL). Pokud například tyto funkce použijete k přidání zděděděné ACE do adresáře v systému souborů NTFS, systém použije ACE podle potřeby na seznamy řízení přístupu (ACL) všech existujících podadresářů nebo souborů.
Přímo použité ACL mají přednost před zděděnými ACL. Systém tuto prioritu implementuje tak, že přímo použije ACL před zděděné seznamy řízení přístupu do volitelného seznamu řízení přístupu (DACL). Při volání SetNamedSecurityInfo a SetSecurityInfo funkce nastavit informace o zabezpečení objektu, systém ukládá aktuální model dědičnosti na seznamy ACL všech objektů v hierarchii pod cílovým objektem. U objektů, které byly převedeny na aktuální model dědičnosti, jsou SE_DACL_AUTO_INHERITED a SE_SACL_AUTO_INHERITED bity nastaveny v ovládacím poli popisovače zabezpečení popisovač zabezpečení objektu.
Když sestavíte nový popisovač zabezpečení, který odráží aktuální model dědičnosti, je nutné, aby nedošlo ke změně sémantiky popisovače zabezpečení. Proto nejsou povoleny a odepřít ace nikdy ve vztahu k sobě navzájem. Pokud je takový pohyb nutný (například k umístění všech neinheritovaných ACL na přední straně seznamu ACL), je seznam ACL označen jako chráněný, aby se zabránilo sémantické změně.
Systém při šíření zděděných objektů ACL do podřízených objektů používá následující pravidla:
- Pokud podřízený objekt bez daCL dědí ACE, je výsledkem podřízený objekt s seznamem DACL, který obsahuje pouze zděděnou ACE.
- Pokud podřízený objekt s prázdným seznamem DACL dědí ACE, je výsledkem podřízený objekt s seznamem DACL, který obsahuje pouze zděděnou ACE.
- Pokud z nadřazeného objektu odeberete zděděnou ACE, automatická dědičnost odebere všechny kopie ACE, které byly zděděny podřízenými objekty.
- Pokud výsledkem automatické dědičnosti je odebrání všech ACL ze seznamu DACL podřízeného objektu, má podřízený objekt prázdný seznam DACL, nikoli žádný seznam DACL.
Tato pravidla můžou mít neočekávaný výsledek převodu objektu bez seznamu DACL na objekt s prázdným seznamem DACL. Objekt bez seznamu DACL umožňuje úplný přístup, ale objekt s prázdným seznamem DACL neumožňuje přístup. Příkladem toho, jak tato pravidla můžou vytvořit prázdný seznam DACL, předpokládejme, že do kořenového objektu stromu objektů přidáte zděděděnou ACE. Automatická dědičnost rozšíří zděděnou funkci ACE do všech objektů ve stromu. Podřízené objekty, které začaly bez daCL, teď mají seznam DACL s zděděnou ACE. Pokud z kořenového objektu odeberete zděděnou ACE, systém automaticky rozšíří změnu do podřízených objektů. Podřízené objekty, které začaly bez seznamu DACL (umožňující úplný přístup), teď mají prázdný seznam DACL (umožňující žádný přístup).
Chcete-li zajistit, aby podřízený objekt bez daCL nebyl ovlivněn zděděnými acEs, nastavte příznak SE_DACL_PROTECTED v popisovači zabezpečení objektu.
Informace o tom, jak správně vytvořit seznam DACL, naleznete v tématu Vytvoření seznamu DACL.