- Поиск по домену windows
- Постановка задачи
- Решение задачи
- Получение компьютеров через LDAP запрос
- Получить список компьютеров по ОС из PowerShell
- Поиск компьютеров в SCCM
- Поиск по домену windows
- Что такое Sid windows
- База Security Account Manager
- 1 способ узнать sid пользователя, команда WMIC
- 2 способ узнать sid пользователя, команда Whoami
- 3 способ узнать sid пользователя, ADUC и ADSIedit
- 4 способ узнать sid пользователя, утилита PsGetSid
- 5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
- 6 способ узнать sid пользователя, Get-ADUser
- Как массово определить SID пользователя
Поиск по домену windows
Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов по системному администрированию Pyatilistnik.org. В прошлый раз мы с вами разобрали вопрос, почему у вас отсутствует в системе библиотека vcruntime140.dll и научились ее успешно устанавливать. В сегодняшней публикации я бы вас хотел научить производить поиск в Active Directory по компьютерам с определенной операционной системой. Я расскажу в каких ситуациях вам, это будет полезно.
Постановка задачи
Вы наверняка знаете, что с конца 2019 года компания Microsoft перестает в базовом варианте поддерживать операционные системы Windows Server 2008 R2 и Windows 7, останется только расширенная поддержка для корпоративных пользователей. Вам как системному администратору можете поступить задача, определить сколько у вас таких рабочих станций или серверов, доступны ли они по сети, когда последний раз обращались к контроллеру домена и были изменены их данные.
Второй вариант, когда вам необходимо найти компьютеры с определенными операционными системами, связан с лицензированием, чтобы понять сколько у вас используется.
Решение задачи
Так как у меня доменная инфраструктура и единой точкой получения информации является база Active Directory и это удобно. Получить данные мы можем тремя методами:
- Использование LDAP запроса к контроллеру домена
- Через оболочку PowerShell
- Через SCCM
Получение компьютеров через LDAP запрос
И так получить я хочу компьютеры у которых в качестве операционной системы выступает Windows Server 2008 R2. Для этого откройте оснастку «Active Directory Пользователи и компьютеры». В оснастке ADUC найдите раздел «Сохраненные запросы» и через правый клик по контейнеру, выберите пункт «Создать — Запрос«.
Задаете понятное имя LDAP запроса и нажимаем кнопку «Запрос«.
Выбираете «Пользовательский поиск», в поле выбираете «Компьютер — Операционная система».
В значении пишите Windows Server 2008 и нажимаете кнопку добавить.
Сохраняем настройки, нажимая кнопку «Ок».
В результате мы получили вот такой LDAP зарос:
На выходе вы получите список компьютеров с нужной вам операционной системой, у меня получилось 86 серверов, большая часть из них имеет статус отключен, об этом говорит стрелка вниз на значке. Так же удобно будет добавить столбец последнего изменения.
Получить список компьютеров по ОС из PowerShell
Запускаем оболочку PowerShell, для того чтобы получить список всех компьютеров с нужной операционной системой введите вот такую команду:
На выходе получите список из имени и версии ОС
Согласитесь, что это не информативно. Хочется, чтобы были данные:
- Имя
- Версию операционной системы
- Дату последнего обращения (LastLogonDate)
- Дату изменения (Modified)
- Статус (Включена/Отключена)
- Сетевая доступность (Отвечает на ping или нет)
Эту задачу я выполню с помощью вот такого кода, который я писал еще пару лет назад:
$Comps = Get-ADComputer -Filter < OperatingSystem -Like '*Windows Server 2008*' >-Properties OperatingSystem, LastLogonDate, Modified | Select Name, OperatingSystem, LastLogonDate, Modified, Enabled | Sort-Object Enabled # | Format-Table -AutoSize
foreach ($comp in $Comps)
<
$comp_info = $null
$comp_info = New-Object psobject -Property @ <"Name" = $comp.Name; "Ping" = $(Test-Connection -ComputerName $comp.Name -Quiet -Count 1 -Verbose -ErrorAction SilentlyContinue);`
«OperatingSystem» = $comp.OperatingSystem; «LastLogonDate» = $comp.LastLogonDate; «Modified» = $comp.Modified; «Enabled» = $comp.Enabled>
$comps2 += $comp_info
>
# Скрипт с сайта Pyatilistnik.org
$comps2 | select Name, OperatingSystem, LastLogonDate, Modified, Enabled, Ping | sort Ping | Format-Table -AutoSize
Если нужно выгрузить в файл, то просто добавьте в конце | Out-File C:\Scripts\Windows-Server.txt или для csv файла | Export-CSV All-Windows.csv -NoTypeInformation -Encoding UTF8
В итоге я получил вот такой замечательный текстовый файл, в котором я вижу, какой компьютер живой и отвечает по сети, а какой нет и когда он последний раз обращался к контроллеру домена.
Поиск компьютеров в SCCM
SCCM, это мощнейшее средство, которое позволяет вам получать любые данные. Переходим на вкладку «Мониторинг — Отчеты — Операционная система» и выберите там пункт «Компьютеры с Windows Server»
Выбираем коллекцию и нажимаем построить отчет.
На выходе вы получите отчет по вашим хостам. В принципе данную информацию можно получить и через запрос в SCCM, как это делать смотрите по ссылке.
Поиск по домену windows
Добрый день уважаемые читатели, сегодня мы продолжим изучение Active Directory, а точнее его сущностей. Под сущностью понимается некий объект, в нашем случае это учетная запись пользователя, но их список куда больше. Наша сегодняшняя задача изучить как узнать sid пользователя windows в домене.
Что такое Sid windows
Давайте для начала с вами выясним определение SID или Security Identifier > это идентификатор безопасности, который используется в семействе операционных систем Windows для идентификации объекта:
- Группа безопасности
- Пользователь
- Компьютер
- Организационная единица
- Принтер
SID во время создания объекта, присваивается ему , в домене Active Directory за это отвечает мастер роль RID. В рамках домена, каждый SID должен быть уникален, в отличии от имени, так как Ивановых Иванов Ивановичей, может быть много, а вот отличаться они будут логином и SID. Для операционной системы Windows, важнее сиды объектов, она же их использует и для контроля прав доступа на различные корпоративные ресурсы:
- Папки и файлы
- Принтеры
- Доступ к внешним ресурсам
Структура SID
Давайте разбираться из каких частей состоит Security IDentifier.
Впереди идет версия сида, далее Генеральная область Authority — это ссылка на систему источник, которая его выпустила. В операционных системах Windows версия Security IDentifier сейчас одна и равна она 1, Генеральная область Authority имеет значения 1,3,5, для Microsoft Exchange она 9. Далее в сиде следует 1 или более идентификаторов Sub Authority, а за ними идет RID (Relative IDentificator) локальный для данного Sub Authority номер субъекта безопасности.
По мимо этого, в любой ос Windows существуют встроенные или BuiltIn группы и учетные записи, например администратор или гость, в каждой ос виндоус они имеют одинаковые SID значения. Посмотреть вы их можете в оснастке Управление компьютером.
Сделаны они для того, что если у вас нет Active Directory, то вы могли бы администрировать данные системы с помощью них. Все SID для данных учетных записей находятся в локальной базе данных Windows, под названием Security Account Manager или SAM. Все сиды пользователей домена лежат в базе Active Directory в файле NTDS.dit.
База Security Account Manager
Давайте посмотрим за, что отвечает Security Account Manager:
- Сопоставление имен с SID и обратно, некий такой DNS для учетных записей
- Проверяет пароли, авторизовывает (принимает участие в процессе входа пользователей в ОС)
- Ведет статистику, кто последний входил, количество входов, кто сколько раз ввел не тот пароль, короче аудит
- Контролирует политика паролей учетных записей, в случае чего может блокировать учетные записи.
- Ведет учет, кто в какие группы входит
- Производит защиты самого себя
- Дает программный интерфейс для управления базой учетных записей
Хранится SAM (Security Account Manager) в реестре Windows. Как открыть реестр windows, я уже описывал не однократно, переходим в ветку.
Если вы кликните правым кликом и из контекстного меню выберете Разрешения, то обнаружите, что права доступа есть только у системы, а вот у администраторов локальной станции их нет, но при желании можно их получить, это лишний механизм защиты, так как можно вытащить хэши учетных записей и попытаться их взломать.
SAM это библиотека samsrv.dll, которая работает в Windows в виде процесса lsass.exe, увидеть это можно в диспетчере задач.
1 способ узнать sid пользователя, команда WMIC
Для примера я все буду показывать на своей рабочей станции с установленной в ней Windows Server 2012 R2, станция принадлежит домену Active Directory. Первый метод, это использование старого, доброго WMIC инструментария (Windows Management Instrumentation). Все, что вам нужно, это знать имя пользователя, точнее его логин. Чтобы посмотреть список локальных пользователей введите команду
На выходе вы получите список локальных пользователей.
Чтобы выяснить все логины доменных пользователей вводим команду
Я вам это уже рассказывал в заметке Как узнать имена учетных записей Администраторов домена. На выходе получите, что то такое
Далее зная логин все просто вводим
Как видите все работает.
Можно наоборот по SID узнать логин пользователя, потребуется это в тех случаях, когда например в списках доступа у вас видится сид, и вы хотите узнать кому он принадлежал.
Еще с помощью WMI вы можете реализовать вот, что укажите имя компьютера (для локального) или домена (для доменного пользователя). Ниже пример получения SID локальной рабочей станции
Для доменной структуры
Получить логин по SID аналогично предыдущей команду.
2 способ узнать sid пользователя, команда Whoami
Тоже довольно старенькая команда из cmd.exe. Вводим
Получаем полный сид текущего залогиненного пользователя.
Если ввести Whoami /logonid, то можно получить logonid, выглядит он вот так S-1-5-5-0-595920
Если ввести ключ /all, то вы увидите, все sid локальных (bultin) групп и пользователей
Так же вы увидите сведения о привилегиях.
На мой взгляд, данный метод, немного проще первого, так как требует ввода меньшего количества ключей.
3 способ узнать sid пользователя, ADUC и ADSIedit
В третьем способе мы воспользуемся средствами графического интерфейса, а точнее самой оснастке Active Directory пользователи и компьютеры. В ней есть встроенный механизм называется редактор атрибутов Active Directory. Открываем вкладку Вид и ставим галку Дополнительные параметры, да забыл отметить нужно быть членом группы Администраторы схемы.
После чего заходим в свойства учетной записи, вкладка Редактор атрибутов и находим там поле objectSid.
Так же SID можно посмотреть и во встроенной оснастке ADSIedit, подключаетесь там к контексту именования имен и заходите в свойства нужной учетной записи.
Да чуть не забыл в Windows Server 2012 R2 есть такое средство как Центр администрирования Active Directory, ищите там нужную учетную запись и в ней находите пункт SID.
4 способ узнать sid пользователя, утилита PsGetSid
Есть такая замечательная утилита от Microsoft од названием PsGetSid.
Когда вы скачаете и разархивируете файл, вы получите папку с большим набором утилит, среди них будет PsGetSid.
смысл у данной утилиты очень простой, она входит в состав Sysinternals и умеет получать SID пользователя по его имени и наоборот, умеет получать как локальных пользователей, так и доменных.
Вводим команду psgetsid имя компьютера\логин учетки
и наоборот, выясним имя по SID:
5 способ узнать sid пользователя, PowerShell и System.Security.Principal.NTAccount
Пятым методом будет использование в powershell класса System.Security.Principal.NTAccount. Для домена Active Directory.
Для локального пользователя команда будет такой.
6 способ узнать sid пользователя, Get-ADUser
Снова воспользуемся командлетами powershell Get-ADUser. вводим команду для получения SID доменного пользователя.
получить наоборот логин по sid
Как массово определить SID пользователя
Все описанные выше методы хороши, когда вам нужно найти SID для одного или двух пользователей, а как быть если у вас это пачка логинов. Например мне это нужно было при предоставлении прав. Предположим, что у меня есть текстовый файл со списком логинов, каждый на новой строке. Мне нужно для каждого определить его Security Identifier.
В этом нам поможет скрипт PowerShell. Откройте ISE.
foreach ($line in (Get-Content $users_file))
<
$username = ($Line -split «\\»)[1]
$user = Get-ADUser $username -Server «DC4.root.pyatilistnik.org»
$Result = [ordered]@ <
user = $line
SID = $user.SID
>
New-Object PSObject -Property $Result
>
На выходе будет удобный список, при желании можно все экспортировать в csv или txt файл.