Идентификационни номера на акаунти в Windows 2000
Последна редакция: 31.07.07
Идентификационни номера на акаунти в Windows 2000 / XP / 2003 / VISTA
Както е описано в SDK на платформата, SID е структура от данни с променлива дължина, която идентифицира акаунт на потребител, група или компютър. На всеки акаунт се присвоява уникален идентификатор, SID, по време на създаването на акаунта. Системата работи със SID на акаунти, а не с имена на акаунти.
Списъците за дискреционен контрол на достъпа (DACL) съхраняват SID на акаунти (потребители и групи) и правата за достъп, присвоени на тези акаунти, за да осигурят контрол на достъпа до защитени обекти. При отваряне на обект потребителската програма изисква необходимите права за достъп до обекта и подсистемата за контрол на достъпа на ОС сравнява данните в DACL с исканите права и SID на потребителя, от чието име се изпълнява програмата (членството на потребителя в групи, чиито SID също са прикачени към контекста на сигурността на приложението, също се взема предвид). За контрол на достъпа операционната система не изисква имена на акаунти - акаунтите се идентифицират чрез SID.
Уникалността на SID се осигурява чрез формирането му от две полета:AUTHORITYиSUBAUTHORITY. Първото поле е с фиксирана дължина и дефинира класа на акаунта, второто поле е с променлива дължина и идентифицира акаунта в класа. Полето SUBAUTHORITY може да е с нулева дължина, в който случай SID идентифицира класа на акаунта.
В SDK на платформата структурата на SID е дефинирана, както следва:Ревизия- ревизия на SID. Това поле трябва да е равно на константатаSDK SID_REVISION(1).SubAuthorityCount- брой думи (DWORD) в полетоSubAuthority.Идентификационен орган-поле АВТОРИТЕТ.SubAuthority- поле SUBATHORITY.
Съгласно описанието на структурата на SID, AUTHORITY се представя като структураSID_IDENTIFIER_AUTHORITY, дефинирана в SDK на платформата, както следва: По този начин AUTHORITY се представя като последователност от 6 байта. Platform SDK дефинира константи за инициализиране на стойността на SID AUTHORITY при конструиране или анализиране на SID: Освен това има още една, която не е документирана в Platform SDK AUTHORITY: Тези константи могат да се използват например при инициализиране на деклариран екземпляр на структура:
SUBAUTHORITY е поле с променлива дължина, състоящо се от думи (DWORD), чийто брой се съхранява в структурата на SID. Декларирането на поле в структура като: ви позволява да получите достъп до всеки DWORD в SubAuthority, без да прибягвате до прехвърляне на указател. Но в същото време размерът на SID структурата без SUBAUTHORITY трябва да се изчисли като една DWORD от полето SUBAUTHORITY е декларирана в структурата.
По-рано беше отбелязано, че минималната дължина на SUBAUTHORITY е 0 думи. Максималната дължина се определя от константата SDK на платформатаSID_MAX_SUB_AUTHORITIES(15).
Максималният размер (в байтове), необходим за съхраняване на SID, може да се изчисли, както следва: Ако броят на думите в SUBAUTHORITY е известен, тогава размерът на SID може да се изчисли, както следва:
За да се покажат двоични данни на SID, те могат да бъдат представени като низ със следния формат: където: S - постоянен идентификатор на представянето на SID низ; R -SID_REVISION(1); I - стойност на SID AUTHORITY; s - стойности на думата на полето SUBAUTHORITY. При низово представяне всяко s съответства на една DWORD от SUBATHORITY
SID на групата администратори за локалния компютър като низ изглежда така:S-1-5-32-544В този запис: 1 -SID_REVISION; 5 - стойност AUTHORITY (съответства наSECURITY_NT_AUTHORITY); 32 - стойност на първата дума SUBAUTHORITY; 544 - стойност на втората дума SUBAUTHORITY. Броят на думите в SUBAUTHORITY е 2.
SID на акаунта "Everyone" като низ е:S-1-1-0В този запис: 1 -SID_REVISION; 1 - стойност на AUTHORITY (съответстваща наSECURITY_WORLD_SID_AUTHORITY); 0 - стойност на първата дума SUBAUTHORITY. Броят на думите в SUBAUTHORITY е 1.
SID на акаунта "NT Pseudo Domain" като низ е:S-1-5В този запис: 1 -SID_REVISION; 5 - стойност AUTHORITY (съответства наSECURITY_NT_AUTHORITY); Броят на думите в SUBAUTHORITY е 0.
SID на някой потребител на локален компютър като низ може да изглежда така:S-1-5-21-789336058-484763869-725345543-1003В този запис: 1 -SID_REVISION; 5 - стойност AUTHORITY (съответства наSECURITY_NT_AUTHORITY); 21 - стойност на първата дума SUBAUTHORITY; 789336058 - стойност на втората дума SUBAUTHORITY; 484763869 - значение на третата дума ПОДВЛАСТ; 725345543 - значението на четвъртата дума ПОДВЛАСТ; 1003 - стойност на петата дума SUBAUTHORITY. Броят на думите в SUBAUTHORITY е 5.
Системата има специален SID за обозначаване на ID на сесията (SID за влизане). Този SID може да се използва в списъците за контрол на достъпа за контрол на достъпа до обекти от потребители, които в момента работят интерактивно в системата. Идентификаторът на сесията SID съществува, докато потребителят излезе. Всяко ново влизане генерира различенSID за влизане. Разрешения заLogon SIDса зададени на прозоречната станция WinSta0, която показва прозорци на потребителски програми по време на своята сесия в системата. Когато изпълнявате графична програма като друг потребител, трябва да добавите разрешения към станцията за прозорци заLogon SIDна този потребител, за да могат прозорците на програмата да се показват. Тези действия се извършват, когато даден процес се стартира като друг потребител от функциятаCreateProcessAsUser.
Познаването на структурата на SID ви позволява да идентифицирате списък с вградени акаунти в Windows. За да получите списъка, попълнете полетата на структурата на SID в цикъл и се опитайте да получите името на акаунта, за който SID е попълнен (използвайкиLookupAccountName, който връща името на акаунта по SID). Списъкът на вградените акаунти, получени по този начин в различни Windows, е даден в таблицата.
Вградени акаунти в Windows
За да управляват SID, програмистите на Microsoft са предоставили няколко функции (вижте таблицата).
Функции за управление на SID
При писането на тази статия бяха забелязани някои особености в работата на функциите за управление на SID. Например, функцията IsValidSid проверява полетоРевизияне изцяло, а само ниските четири байта и счита SID със стойности, зададени в полетоРевизиякато 0x41, 0xF1 и т.н., за валидни. В този случай функциятаConvertSidToStringSidпреобразува само SID с "правилната"Ревизия, равна на 0x01, в низ. ФункциятаConvertSidToStringSidнеправилно низове SID, съдържащи ненулеви стойности в първите два AUTHORITY байта. Например, за два SID с празен SUBAUTHORITY и равен AUTHORITY за първия SID, за втория SID низът, върнат от функцията, ще бъде същият:"S-1-10".AddAccessAllowedAceви позволява да добавите запис с невалиден SID към DACL (полетоРевизияв SID е невалидно, например 0x41). Но не е възможно да се зададе ДЕСКРИПТОР ЗА ЗАЩИТА с такъв DACL на обект (функцията за настройка на разрешения връща грешка, указваща грешен формат на данните). Въпреки това,AddAccessAllowedAceпредотвратява създаването на записи за контрол на достъпа със SID, ако най-малко значимите 4 бита са неправилни вРевизия(напримерРевизияе 0x0F).