Maksymalny rozmiar listy kontroli dostępu (ACL) na obiektach katalogu Active Directory
January 19, 2020 ‐ 3 minut(a) czytania
Wszystkie obiekty w usłudze Active Directory i wszystkie dające się zabezpieczyć obiekty na komputerze lokalnym lub w sieci posiadają tzw. deskryptory zabezpieczeń, które pomagają kontrolować dostęp do obiektów. Deskryptory zabezpieczeń zawierają informacje o tym, kto jest właścicielem obiektu (owner), kto może uzyskać do niego dostęp i w jaki sposób oraz jakie są zasady audytowania dostępu.
Deskryptory zabezpieczeń obiektu zawierają listy kontroli dostępu (access-contol list, ACL) opisujące wszystkie uprawnienia zabezpieczeń, które dotyczą tego obiektu. Co do zasady deskryptory mogą zawierać dwa rodzaje list ACL:
- Arbitralna lista kontroli dostępu (discretionary access control list, DACL), które identyfikuje użytkowników i grupy, którym zezwala się lub odmawia dostępu;
- Systemowa lista kontroli dostępu (system access control list, SACL), która kontroluje sposób audytowania dostępu.
Ten model kontroli dostępu może być stosowany do zabezpieczania jednostkowych obiektów takich jak pliki i foldery, obiektów Active Directory, kluczy rejestru, drukarek i innych urządzeń, portów, usług, procesów i wątków. Granularności ustawień pozwala elastycznie dostosować zabezpieczenia do wymagań organizacji, wydeloegować uprawnienia do obiektów oraz ich atrybutów.
Nie ma różny bez kolców, mechanizm ma ograniczenia pojemnościowe oraz nie jest specjalnie wygodny w utrzymaniu. Dzisiaj na tapetę weźmy ograniczenia rozmiaru.
The number of bytes of memory allocated for the ACL. The size of an ACL varies with the number and size of its ACEs. The maximum size of an ACL is 64K, or approximately 1,820 ACEs, depending on the size of the ACEs. However, for performance reasons, the maximum size is not practical, it will vary from 1820 to 2000.
Źródło: How Security Descriptors and Access Control Lists Work
The maximum size for an ACL, including its ACEs, is 64 KB (Reference: http://msdn2.microsoft.com/en-us/library/Aa374931.aspx )
It’s about the 64KB ACL size limit of Windows. It stands on every object supporting ACL
Źródło: Maximum number of ACEs in an ACL
Jeśli jest ograniczenie to trzeba się zastanowić nad dwiema rzeczami. Po pierwsze, czy da się przekroczyć opisany limit (a zatem czy jest on zablokowany i narzędzie zwróci błąd przy przekroczeniu rozmiaru) oraz co się dzieje, gdy zostanie przekraczony (jeśli narzędzie nie blokuje zmian powyżej limitu)? Po drugie czy i jak można monitorować wielkość list ACL?
Microsoft, a nie mógłbyś precyzyjnie określić liczbę wpisów w ACL? I ile to jest
„w przybliżeniu 1820”? Nie da rady, bo poszczególne wpisy (access control entry, ACE) różnią się długością, w zależności od ustawień.
Zastanówmy się, więc jak precyzyjnie zmierzyć rozmiar listy, we właściwościach obietków zobaczymy zinterpretowaną listę (nazwy podmiotów (użytkownicy, grupy, komputery) i ich uprawnienia).
Jak zmierzyć rozmiar listy kontroli dostępu ACL?
Pomysł pierwszy, zrzućmy listę do pliku i sprawdźmy jego rozmiar. W tym celu zrzućmy ACL za pomocą programu icacls.
icacls C:\Scripts /save C:\Temp\AclFile.txt /T
Następnie sprawdźmy rozmiar pliku.
Write-Host((Get-Item “C:\Temp\AclFile.txt”).length/1KB)
Przyznacie, że w przypadku plików i folderów sprawa jest nieskomplikowana i bez trudnu można by to zautomatyzować (jeśli zajdzie taka potrzeba).
A co właściwie zapisało się w pliku? Jak wygląda lista i w jakim formacie icacls zapisał dane do pliku?
Powyższy format zapisu to Security Descriptor Definition Language (SDDL). Mało czytelny, ale skondensowany. I o to chodzi, gdy ma się „tylko” 64k miejsca. Rzućmy jeszcze okiem na ACE strings (jeden z formatów za pomocą których wyświetlane są listy ACL w PowerShell).
(Get-Acl -Path “C:\Scripts");(Get-Acl -Path "C:\Scripts").Access
Następnie analogicznie dla obietków katalogu Active Directory.
Get-Acl -Path "AD:CN=Domain Users,CN=Users,DC=pfe,DC=academy” | Format-List -Property PSPath,Sddl
Jeśli przyjmiemy, że przy kodowaniu Win-1250, jeden znak zajmuje 8 bitów, czyli 1 bajt, to możemy w prosty sposób przeliczyć wielkość ACL.
((Get-Acl -Path “AD:CN=Domain Users,CN=Users,DC=pfe,DC=academy”).Sddl | Measure-Object -Character).Characters*8/1kb
Udanych pomiarów w waszych środowiskach! Na koniec jeszcze kilka odnośników do materiałów źródłówych:
Twoje okno na chmurę