В операционной системе Windows вместо имен пользователей для идентификации используются SID (Security Identifiers). В этой статье познакомимся с ними.
Идентификаторы безопасности
Идентификаторы безопасности — это такие уникальные номера, которые есть у: пользователей, групп, доменов, служб и компьютеров.
В общем у тех объектов, которые могут захотеть получить доступ к другим объектам, таким как: файлы, драйверы, разделы дисков, реестр.
SID представляет собой число переменной длины. Оно состоит из:
- номера версии идентификатора;
- идентификатора полномочий, который показывает максимальный уровень полномочий. Для группы «Все» равно 1. Для конкретной учетной записи или группы равно 5;
- несколько чисел подчиненных полномочий;
- значения RID, которое гарантирует уникальность.
SID всегда начинается с «S«, например:
S-1-5-21-1463437245-1224812800-863842198-1128
- 1 — номер версии;
- 5 — идентификатор полномочий;
- 21, 1463437245, 1224812800, 863842198 — значения подчиненных полномочий;
- 1128 — RID.
Логика назначения SID
Каждый локальный пользователь создается на основе компьютерного или доменного идентификатора. А для уникальности и в конце записывается уникальный RID для каждого объекта. RID для новых пользовательских учетных данных начинается с 1000, и увеличивается с каждым новым пользователем и группой. До 1000 идут RID для стандартных пользователей, например 500 для пользователя «Администратор», 501 для «Гость».
Если компьютер повышается до контроллера домена, то за основу берется идентификатор компьютера и из него создается идентификатор домена. А идентификатор компьютера генерируется заново.
Стандартные SID
Есть предопределенные идентификаторы. Они одинаковые на всех машинах во всем мире. Так файл, доступный группе Everyone (Все), на одной машине, будет открыт и на другой, если перенести жесткий диск туда.
В системе Windows существуют следующие стандартные SID:
- s-1-0-0 — Nobody (Никто) — используется, когда идентификатор неизвестен;
- s-1-1-0 — Everyone (Все) — группа, включающая всех пользователей за исключением анонимных;
- S-1-2-0 — Local (Локальная) — группа пользователей, вошедших в терминалы, которые физически подключены к системе;
- S-1-3-0 — Creator Owner ID (ID Владельца) — идентификатор владельца, используемый в наследуемых ACL;
- S-1-3-1 — Creator Owner ID (ID Группы Владельца) — тоже что и выше, но для группы владельца;
- S-1-5-18 — LocalSystem — используется службами;
- S-1-5-19 — LocalService — используется службами;
- S-1-5-20 — NetworkService — используется службами.
Работа с утилитой PsGetsid.exe
Для просмотра идентификаторов можно воспользоваться программой PsGetsid из набора Sysinternals. Выполнив команду без параметров вы увидите имя компьютера и его SID:
>PsGetsid.exe PsGetSid v1.45 - Translates SIDs to names and vice versa Copyright (C) 1999-2016 Mark Russinovich Sysinternals - www.sysinternals.com SID for \\PC-1: S-1-5-21-679991269-3265548881-4162047351
Указав имя домена — увидите идентификатор домена:
>PsGetsid.exe test.domain.local PsGetSid v1.45 - Translates SIDs to names and vice versa Copyright (C) 1999-2016 Mark Russinovich Sysinternals - www.sysinternals.com SID for TEST\test.domain.local: S-1-5-21-1241004363-267861926-1289139162
Указав свое имя узнаете свой идентификатор, он будет зависеть от SID домена. И на всех компьютерах в домене будет одинаковым:
>PsGetsid.exe testuser PsGetSid v1.45 - Translates SIDs to names and vice versa Copyright (C) 1999-2016 Mark Russinovich Sysinternals - www.sysinternals.com SID for TEST\testuser: S-1-5-21-1241004363-267861926-1289139162-1155
Как видно выше, к доменному SID просто добавили RID. При этом, локальные пользователи с одинаковыми именами на всех компьютерах будут разными.
В качестве параметра можно указать сам идентификатор, утилита в этом случае вернет имя пользователя:
>PsGetsid.exe S-1-5-21-1241004363-267861926-1289139162-1155 PsGetSid v1.45 - Translates SIDs to names and vice versa Copyright (C) 1999-2016 Mark Russinovich Sysinternals - www.sysinternals.com Account for PC-1\S-1-5-21-1241004363-267861926-1289139162-1155: User: TEST\testuser
Можно узнать имя администратора домена, для этого используем идентификатор домена и стандартный для администратора RID = 500:
>PsGetsid.exe S-1-5-21-1241004363-267861926-1289139162-500 PsGetSid v1.45 - Translates SIDs to names and vice versa Copyright (C) 1999-2016 Mark Russinovich Sysinternals - www.sysinternals.com Account for PC-1\S-1-5-21-1241004363-267861926-1289139162-500: User: TEST\Administrator
Любой компьютер в домене имеет свой SID, он также будет состоять из SID домена и своего RID. Чтобы его узнать пишите <домен\имя_компьютера$>:
>PsGetsid64.exe TEST\SRV-1$ PsGetSid v1.45 - Translates SIDs to names and vice versa Copyright (C) 1999-2016 Mark Russinovich Sysinternals - www.sysinternals.com SID for TEST\SRV-1$: S-1-5-21-1241004363-267861926-1289139162-1610
SIP Процессов
Так как процессы запускаются от имени какого-либо пользователя, то процессы тоже имеют SID. Посмотреть их можно с помощью программы Process Explorer. Для этого нужно открыть свойства выбранного процесса и перейти на вкладку «Security«:
Выше я смотрю SID пользователя под которым работает один из процессов svhost.exe.