Как узнать наличие юзера сервере nt


Содержание

Как узнать наличие юзера сервере nt ?

Добрый день! Уважаемые читатели и гости IT блога Pyatilistnik.org. В прошлый раз мы с вами разобрали, как сделать таймер выключения компьютера. Сегодня я хочу вас научить определять >

Что такое ID сеанса

Когда пользователь входит на компьютер с включенными службами удаленных рабочих столов, для него запускается сеанс. Каждый сеанс идентифицируется уникальным идентификатором сеанса. Каждый такой сеанс ассоциируется с интерактивной оконной станцией (interactive window station) «WinSta0»; поэтому каждый сеанс связан со своей собственной оконной станцией «WinSta0». Для каждой оконной станции имеется три стандартных рабочих стола: рабочий стол Winlogon, рабочий стол с заставкой и интерактивный рабочий стол.

Когда пользователь выходит с сервера удаленных рабочих столов (RDC), то сеанс, который клиент имеет на сервере узла сеансов удаленных рабочих столов (ранее назывался сервер терминалов), удаляется. Однако если сеанс консоли служб удаленных рабочих столов не смог завершится, то оконные станции, связанные с сеансом консоли, не удаляются, все процессы продолжают висеть. Это влияет на поведение приложений в среде служб удаленных рабочих столов, когда они настроены для работы в контексте безопасности интерактивного пользователя, также известного как режим активации объекта «RunAs Interactive User». Вот тогда, то и выявляется ID сеанса, чтобы его грохнуть.

Методы определения ID сеанса пользователя RDP

Существует несколько методов, которые могут вам помочь определить номер сеанса и его ID на терминальных серверах и RDS фермах.

  • Утилита quser
  • Утилита qwinsta
  • Утилита Query session
  • Оснастка диспетчер задач
  • PowerShell командлет Get-TerminalSession
  • PowerShell командлет Get-TSSession

Определение ID сеанса через quser

И так у меня есть RDS ферма состоящая из хостов с Windows Server 2012 R2, в базе Active Directory есть пользователь Барбоскин Геннадий Викторович. Данный пользователь вошел на терминал, работал, но по какой-то причине он завис и чтобы корректно разлогинить его сессию нам необходимо вычислить ее номер сеанса и уникальный идентификатор. Попробуем это выполнить через утилиту quser.

QUSER — это утилита командной строки Windows, которая отображает информацию, о пользовательских сессиях на серверах и обычных компьютерах, удобна в случае удаленных рабочих столов. Может получать информацию локально и удаленно.

Вы можете использовать эту команду, чтобы выяснить, вошел ли конкретный пользователь на конкретный сервер Session Host. Команда возвращает:

  • Имя пользователя
  • Имя сеанса на сервере Session Host
  • ID сеанса
  • Состояние сеанса (активно или отключено)
  • Время простоя (количество минут с момента последнего нажатия клавиш или движения мыши во время сеанса)
  • Дата и время входа пользователя

Откройте командную строку cmd, лучше в режиме администратора и введите команду:

У вас будет выведен список всех текущих сессий на вашем терминальном сервере.Если пользователей много, то сложно сразу найти нужного, так как все идет не по алфавиту. Ранее я вам показывал, как фильтровать вывод результатов в командной строке Windows, там была команда findstr. Вводим команду:

В итоге я вижу, что номер сеанса rdp-tcp#24 и его ID 45, статус активно, это означает, что человек работает. Видно его время входа. Тот же результат можно получить и вот такой конструкцией:

Вы наверное спросите, почему сразу так не ввели, все просто, я лишь еще раз напомнил вам, о фильтрации в cmd, которая работает почти с любой командой, так сказать универсальный ключ.

Так же есть возможность запустить для конкретного сервера, для этого есть ключ /server

Определение ID сеанса через qwinsta

QWINSTA — Это утилита командной строки Windows, в задачи которой входит извлечение информации, о пользовательских сессиях на удаленных рабочих столах и выводя много полезной информации.

Для того, чтобы получить номер сеанса с ID, введите в командной строке:

Утилита выведет список всех авторизованных в системе пользователей, из полезной информации вы получите:

  • Сеанс — номер сеанса формата rdp-tcp#24
  • Пользователь — логин
  • ID — уникальный идентификатор сессии пользователя на терминальном столе
  • Статус — состояние сеанса (Активно или Диск (Отключено))
  • Тип
  • Устройство

Чтобы вывести определенного пользователя, введите команду:

Как узнать id пользователя через диспетчер задач

Покажу и графический метод. который позволяет вам получать ID и номер сеанса на терминальных столах. Откройте диспетчер задач и перейдите на вкладку «Пользователи». У вас будет отображен список сотрудников. Тут для удобства их можно выстроить по алфавиту. Все хорошо, но нет ID и номера сеанса.

Чтобы включить отображение нужных нам столбцов, вам необходимо щелкнуть правым кликом на область с именем столбцов. В контекстном меню поставьте галки на «Код» и «Сеанс».

В итоге у вас теперь появилась возможность легко просматривать идентификационный код сеанса и имя сеанса, в моем примере, это RDP-Tcp#24.

Как узнать id пользователя через query session

QUERY SESSION — это утилита командной строки так же выводящая информацию, о вошедших в систему пользователей. Вводите в командной строке query session, вывод утилиты копия qwinsta. Вы так же будите видеть номер сеанса, логин учетной записи, ID, статус подключения.

Получение информации о сеансе через Get-TerminalSession

PowerShell не зря называют могучим, он поистине может все. К сожалению родных командлетов, которые бы заменяли утилиты командной строки нет, но есть возможность установить дополнительные, из репозитория. Речь пойдет, о сборнике «PowerShell Community Extensions» (Pscx 3.2.2). Данный сборник включаем в себя огромный комплекс командлетов, нас будет интересовать Get-TerminalSession.

Установка «PowerShell Community Extensions» очень проста и выполняется одной командой. Перед установкой Pscx 3.2.2, вам необходимо обновить ваш PowerShell хотя бы до версии 5.1. Далее запускаете оболочку PowerShell от имени администратора и вводите команду:

Про сам сборник вы можете почитать по ссылке (https://www.powershellgallery.com/packages/Pscx/3.2.2)

Пишите на терминальном сервере Get-TerminalSession, или же можете запросить удаленно Get-TerminalSession -ComputerName 192 . 168 . 1 . 51

Получение информации о сеансе через Get-TSSession

Модуль PSTerminalServices, так же позволяет взаимодействовать с терминальными профилями В состав PSTerminalServices входят вот такие командлеты:

  • Disconnect-TSSession — отключает любого подключенного пользователя от сеанса.
  • Get-TSCurrentSession — предоставляет информацию о сеансе, в котором выполняется текущий процесс.
  • Get-TSProcess — получает список процессов, запущенных в определенном сеансе или во всех сеансах.
  • Get-TSServers — перечисляет все терминальные серверы в данном домене.
  • Get-TSSession — перечисляет сессии на данном терминальном сервере.
  • Send-TSMessage — отображает окно сообщения в указанном идентификаторе сеанса.
  • Stop-TSProcess — завершает процесс, запущенный в определенном сеансе или во всех сеансах.
  • Stop-TSSession — отключает сеанс, отключая любого пользователя, который может быть подключен.


Скачать PSTerminalServices вы можете по ссылке https://github.com/imseandavis/PSTerminalServices, там будет MSI пакет, если его уже по какой-то причине не будет, то можете загрузить PSTerminalServices по ссылке слева.

Установка PSTerminalServices проста до безобразия. На первом экране нажимаем «Next».

При необходимости изменяем путь установки данного модуля.

Илон Маск рекомендует:  Как восстановить пароль в контакте

Для продолжения нажимаем «Install»

Установка модуля завершена.

Теперь, чтобы модуль запускался вам нужно разрешить запуск скриптов, напоминаю, что для текущего пользователя, это можно сделать вот так:

Далее проверьте командой, что модуль PSTerminalServices доступен в системе, выполните:

Далее импортируем модуль и запускаем его:

На выходе вы получаете информацию, о всех ваших сеансах пользователей на терминальном столе

Как узнать наличие юзера сервере nt ?

Сообщения: 257
Благодарности: 9

Задача состоим в том, что есть домен. Надо автоматизировать задачу так
— в определённое время сканируется домен на список юзеров (юзеры могут например удаляться со временем и добавляться, поэтому нужен периодический скан «юзерлиста»)
— для каждого юзера выполняется скриптик на серваке и результат заносит этому же юзеру в домашний каталог

Вот такая задача.

По поводу dsquery — она в винде 2003. А есть аналог в ХР?

——-
«Винда съела дрова и резет здесь не фурычит.»
«Все говорят, что у меня /dev/hands кривой и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!»

Последний раз редактировалось skeletor, 16-03-2007 в 12:51 .

Сообщения: 851
Благодарности: 214

Понятно. Тогда так. Создаем VbScript такого содержания:
——————

‘ —— SCRIPT CONFIGURATION ——
strDomainDN = «dc=my,dc=domain» ‘ e.g. dc=rallencorp,dc=com
‘ —— END CONFIGURATION ———

strBase = » ;»
‘ To search the whole forest using the global catalog, uncomment the following line:
‘ strBase = » ;»

set objConn = CreateObject(«ADODB.Connection»)
objConn.Prov
objConn.Open «Active Directory Provider»
set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst
while Not objRS.EOF
Wscript.Echo objRS.Fields(0).Value
objRS.MoveNext
wend
—————————
Сохраняем, например, в users.vbs
Вызываем через батник со строками:
cscript.exe users.vbs > users.txt

——-
Программа выполняет то, что вы ей приказали делать, а не то, что бы вы хотели, чтобы она делала.
Компьютерная литература Мой сайт Active Directory Сборник рецептов

Сообщения: 1114
Благодарности: 4

Вызываем через батник со строками:
cscript.exe users.vbs > users.txt

А чего так сложно:
Cкрипт размещаем в секции Logon для пользователей. И делаем линк в Default Domain Policy.

——-
Кто не задает вопросы — тот не получает ответы

Сообщения: 851
Благодарности: 214

——-
Программа выполняет то, что вы ей приказали делать, а не то, что бы вы хотели, чтобы она делала.
Компьютерная литература Мой сайт Active Directory Сборник рецептов

Сообщения: 257
Благодарности: 9

——-
«Винда съела дрова и резет здесь не фурычит.»
«Все говорят, что у меня /dev/hands кривой и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!»

Как узнать от какого пользователя запущен apache?

Собственно сам вопрос.Сервер на FreeBSD с Apache/2.2.25. Есть доступ по SSH.

Нужна команда-ssh которая покажет имя пользователя ?

2 ответа 2

в первой колонке будет имя пользователя.

(минимальное количество символов в ответе — 20минимальное количество символов в ответе — 20минимальное количество символов в ответе — 20минимальное количество символов в ответе — 20)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками ssh freebsd apache2 или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.


дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.11.12.35408

Как узнать наличие юзера сервере nt ?

Добрый день.
Антивирусное ПО (Kaspersky Endpoint Security 10 для Windows) в системе мониторинга (KSC10) статистика «наиболее заражающее пользователи» NT AUTHORITY\​система более 4 тыс алертов за сутки
пример:
UDS:DangerousObject.Multi.Generic 13 ноября 2020 г. 9:39:03 C:\​Windows\​31779272.exe неизвестно Результат: Удалено: UDS:DangerousObject.Multi.Generic Пользователь: NT AUTHORITY\​система (Системный пользователь) Объект: C:\​Windows\​31779272.exe
UDS:DangerousObject.Multi.Generic 13 ноября 2020 г. 9:16:56 C:\​Windows\​33089992.exe неизвестно Результат: Удалено: UDS:DangerousObject.Multi.Generic Пользователь: NT AUTHORITY\​система (Системный пользователь) Объект: C:\​Windows\​33089992.exe

Есть ли какая то возможно ограничить использование учётной записи NT AUTHORITY\​система? Сеть доменная.

Ответы

Скорее всего, это у вас компьютеры кто-то по сети заражает: подключается по сети с правами администратора и копирует туда тело вируса (скорее всего, чтобы запустить его либо как службу, либо через WMI). Вариантов заражения тут два: либо производится подключение с правами администратора с заражённой машины, либо через использование уязвимости.

Чтобы найти, кто и откуда это делает по первому варианту, надо анализировать журнал событий безопасность на том компьютере, откуда пришло сообщение тревоги непосредственно перед (в промежутке порядка минуты, полагаю, может больше) временем возникновения тревоги: в событии успешного входа в систему будет указано под какими учётными данными произошло подключение, а если повезёт — то и с какого компьютера. Если подключение производится под учётными данными локального администратора, то, скорее всего, у локального администратора слабый пароль или одинаковый пароль на всех компьютерах. В таком случае поменяйте пароли на сложные и уникальные.

А по поводу использования уязвимостей (прищнаком чего будет отсутствие вхоодо по сети) нужно начать с того, что установить все обновления безопасности на все подверженные атакам компьютеры. Если не поможет (что вряд ли), то придётся анализировать сетевой трафик, чтобы установить источник атаки.

  • Предложено в качестве ответа Vector BCO Moderator 18 ноября 2020 г. 21:16
  • Помечено в качестве ответа Vector BCO Moderator 18 ноября 2020 г. 21:16

Все ответы

  • Предложено в качестве ответа Антон В Антонов Moderator 13 ноября 2020 г. 20:16
  • Изменено Anahaym 13 ноября 2020 г. 20:58

Мсье, Вам не кажется что подразумевая «лечить систему» можно, а даже нужно, добавить конкретики в столь пафосном посте в столько серьезном триде ? Мы (сообщество микрософт) ведь люди взрослые ? О какой именно системе идет речь ? Системы проверки подлинности ? Системы аутентификации ? Системы шифрования ? Системы подключаемых библиотек azure ?

Мсье, Вам не кажется что подразумевая «лечить систему» можно, а даже нужно, добавить конкретики в столь пафосном посте в столько серьезном триде ? Мы (сообщество микрософт) ведь люди взрослые ? А ваш пост выглядит как «иди почини компьютер», о какой именно системе идет речь ? Системы проверки подлинности ? Системы аутентификации ? Системы шифрования ? Системы подключаемых библиотек ?

Как не прескорбно но лечить нужно ту систему, которая ОС.

Начало положено, есть хотя бы антивирус который хоть частично но отлавливает проблему, хотя судя по лоличеству срабатываний — антивирус ловит только часть проблемы. Вторая же часть живет и здравствует, внутри ОС.

Ограничить пользователя система нельзя да и смысла нет так как это равносильно стрельбе в ногу, с тем же успехом можно выключить ПК.

Из практических советов можно говорить о письмах в поддержку каспера, отключении зараженных машин от сети компании, вплоть до конфискации, и разбор полетов. Как только поймете как лечить — можно дальше предпринимать какие то действия.

Так же стоит помнить о необходимости установки обновлений ОС на оставшихся машинах, обновлении и активации проверок антивируса, включении UAC, смена админских паролей, настройке бекапов критичных сервисов и пр. бестпрактисы которые многие игнорируют.

Дабы попробовать локализовать проблему проверяйте службы, отключая все что не подписано сертификатами МС, проверяйте шедульные задачи, парки автозапуска, ветки реестра автозапуска и пр.

The opinion expressed by me is not an official position of Microsoft

ОФФ: Как новым юзерам доступ на сервер NT4 сделать?

Какой доступ то нужен? К чему? Как сеть настроена? Под чем живет? Как установлен сервер НТ (домен-контроллер или просто сервер)? Какой уровень безопасности хочется иметь в итоге?

Книжки-ссылки ищи по администрированию сетей под ВинНТ-4

alexis, вопрос похож на «ДжЫп не едет. Че делать, подскажите книжки по ремонту»

пробуй в этом серваке идти в «Мой компутер». Там щелкай по нужному диску, заходи в его свойства (Properties). Там в закладку Sharing, там жми New Share, задавай имя диску (как его снаружи будет видно) и жми Permissions, там делай чтоб у Evrivan было FullControl

везде жми Ок и имей щастье.
Диск расшарен на всех с полными правами

7 способов посмотреть, кто работает на сервере терминалов

С чего начинается администрирование пользователей на сервере терминалов?

Илон Маск рекомендует:  Iis включение клиентских сертификатов

Конечно с просмотра «Активных» или «Отключенных» сессий пользователей.

Без этой картины администрирование сервера терминалов невозможно.

Помимо статьи, записал также, и подробное видео, о том как администрировать пользователей на сервере терминалов (Новичкам смотреть обязательно!)

И так, конечно мы должны во всех подробностях видеть, что у нас происходит на сервере терминалов!

Какие процессы запущены от имени тех или иных пользователей (в т.ч. процессы 1С) их идентификаторы, id сессий пользователей, это и многое другое помогает администратору всегда быть в курсе того что происходит на сервере и соответственно всем этим управлять, и вовремя реагировать на различные ситуации.

На разных версиях Windows server администраторы по-разному решают этот вопрос.

Кто-то смотрит пользователей используя простой «Диспетчер задач» на Windows server 2012 – 2020. Некоторые используют различные команды в CMD, ну а кое-кто использует PowerShell .


Но все администраторы хотят одного:

1. Чтоб быстро посмотреть всех пользователей кто работает на сервере.

2. Чтоб это было как можно информативней.

3. Чтоб бесплатно.

Поэтому поводу решил собрать все лучшие, простые и быстрые способы которые (на мое мнение) стоит использовать.

Уверен, что многим начинающим администраторам эти способы помогут в администрировании сервера терминалов.

И так способ первый и самый простой (На Windows server 2012 R2)

1. Диспетчер задач.

«Диспетчер задач» — вкладка «Пользователи» — позволяет нам видеть пользователей, которые работают на этом сервере.

Но по умолчанию стандартный «Диспетчер задач» — вкладка «Пользователи» нам не покажет, что пользователь работает на сервере удаленно, используя RDP, хорошо, что это можно легко исправить.

Правый клик мышкой на панели «Пользователь» и в появившимся контекстном меню

ставим птичку напротив «Сеанс» а также стоит поставить и напротив «Имя клиента».

Так мы будем знать, что этот пользователь работает у нас на сервере через RDP.

Минусы данного способа здесь очевидны, чтоб смотреть пользователей мы должны находится на сервере терминалов, где собственно и запускаем «Диспетчер задач», нет возможности сделать какую-то выборку, фильтр и т.д.

2. quser

Следующий метод это использование команды quser в CMD или PowerShell.

Quser – это аналог QUERY USER (Такое сокращение позволяет выполнять команду быстрее)

Здесь все просто запускаем CMD или PowerShell и пишем команду quser

Так мы увидим всех пользователей, что работают на этом сервере.

Метод очень простой быстрый и достаточно информативный.

Он покажет Вам — Пользователя, Сеанс, его ID, Статус , Бездействие сеанса, и время входа.

Если мы хотим посмотреть только какого-то конкретного пользователя, тогда можно написать например так:

Что PHP может узнать о браузере посетителя?

О чем это?

Возможно ли узнать более детальную информацию о браузере посетителя кроме строки, содержащейся в $_SERVER[«HTTP_USER_AGENT»]: поддерживает ли яву, апплеты, таблицы стилей и фреймы? А может это вообще гуглобот зашел?

Предистория

Захотелось заказчику, чтобы при заходе на сайт отображался его любимый логотип с пробегающей по нему искоркой света… Уговорить отказаться от этой идеи человека я так и не смог, но в итоге мы решили, что радость эта будет отображаться только раз, и только при заходе на главную страницу. Если человек попал на сайт с поисковика, он сразу переходит на страницу. Если он руками вписывает адрес в браузер, он перенаправляется на страницу с анимацией. После успешного отображения в куки пишется маркер, и видео больше не грузится. Но… Если на сайт зайдет не человек, а поисковик, то писать себе куки он не будет. Поэтому он всегда будет натыкаться на страницу с анимацией, и в выдаче поисковиков мы себя так и не увидим. Да и зачем поисковику логотип компании видеть :)

Как можно узнать что-либо о браузере клиента

Проблема в итоге была решена методом поиска подстроки имен пауков нескольких известных поисковиков в переменной $_SERVER[«HTTP_USER_AGENT»]. Но перед этим я походил по ману и обнаружил интересную функцию get_browser(). Она умеет выдавать массив параметров браузера гостя нашего сайта, назначения половины которых, правда, я так и не понял :) Единственная тонкость работы этой функции в том, что она требует наличия на хосте свежей версии файла browscap.ini, а также настройки php.ini. Очевидно что нашим ленивым (просьба не обижаться) админам влом постоянно обновлять этот файлик, так что на это обычно забивают и функция попросту недоступна. Проверить это можно, заглянув в phpinfo(), отыскав там диррективу browscap, и ничуть не удивившись что напротив нее гордо красуется надпись «no value», приступить к прочтению следующего параграфа.

Что же делать

Для начала нам нужен сам файл browscap.ini. Его можно скачать с http://browsers.garykeith.com/. Может он есть и еще где-то, но данный источник рекомендуемый для скачивания самим PHP, по-этому пользуемся именно им.
Возникает вопрос: а куда нам, собственно, теперь его пристроить? Админ нас к серверу не подпустит, да и в настройках ковыряться не даст. По-этому надо бы поискать другой вариант. А их в сети нашлось целых два.

  • Browser Capabilities PHP Project — PHP5 ONLY
  • Alexandre Alapetite’s version

Тут находятся детальные и простые инструкции по запуску. Если вкратце, остается скачать нужную библиотеку, подключить в нужное место, и вызвать соответствующую функцию. Для Browser Capabilities PHP Project вызов выглядит вот так:

if(ini_get(‘browscap’))
<
//неленивые админы попались

/* старт шутки */
//вероятность выполнение участка кода стремится к нулю поэтому пишем сюда
echo «Начальство — ты меня задрало!»;
/* конец шутки — всем смеяться :)*/

>
else
<
//используем нашу библиотеку
require_once(‘browscap.php’);
$bc = new Browscap(‘path/to/the/cache/dir’);
$browserInfo=$bc->getBrowser();

в результате чего получим примерно следующее
stdClass Object
(
[browser_name] => Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; en-us) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.1 Safari/525.18
[browser_name_regex] => ^mozilla/5\.0 \(macintosh; .; .*mac os x.*\) applewebkit/.* \(.*\) version/3\.1.* safari/.*$
[browser_name_pattern] => Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*
[Parent] => Safari 3.1
[Platform] => MacOSX
[Browser] => Safari
[Version] => 3.1
[MajorVer] => 3
[MinorVer] => 1
[Frames] => 1
[IFrames] => 1
[Tables] => 1
[Cookies] => 1
[BackgroundSounds] => 1
[JavaApplets] => 1
[JavaScript] => 1
[CSS] => 2
[CssVersion] => 2
[supportsCSS] => 1
[Alpha] =>
[Beta] =>
[Win16] =>
[Win32] =>
[Win64] =>
[AuthenticodeUpdate] =>
[CDF] =>
[VBScript] =>
[ActiveXControls] =>
[Stripper] =>
[isBanned] =>
[WAP] =>
[isMobileDevice] =>
[isSyndicationReader] =>
[Crawler] =>
[AOL] =>
[aolVersion] => 0
[netCLR] =>
[ClrVersion] => 0
)

UPD. Полученные данные свидетельствуют лишь о поддержке браузером некоторой технологии, а не о ее доступности, так как файл browscap.ini это по сути база данных всех веб-клиентов, в которой по значению User-Agent браузера предоставляется информация о поддерживаемых этим браузером технологиях. Тоесть для современных браузеров при отключенных куках и яве соответствующие параметры все равно будут возвращать еденицу.

Куда применять эту функцию, надеюсь, каждый найдет для себя сам :)

Как узнать S >

В среде Windows каждому доменному и локальному пользователю, группе и другим объектам безопасности, присваивается уникальный идентификатор — Security Identifier или SID. Именно SID, а не имя пользователя используется для контроля доступа к различным ресурсам: сетевым папкам, ключам реестра, объектам файловой системы, принтерам и т.д. В этой статье мы покажем несколько простых способов узнать SID пользователя или группы (локальных или из Active Directory), и обратную процедуру – определение имени пользователя или группы Windows по известному SID.

Получение учетки по SID:


На мой взгляд, проще всего для преобразования SID -> Username и Username -> SID проще всего воспользоваться командами командной строки или несложными командлетами PowerShell:

Как получить SID локального пользователя?

Чтобы получить SID локальной учетной записи на данном компьютере, можно воспользоваться утилитой wmic, которая позволяет обратится к пространству имен WMI компьютера. Для получения SID локального пользователя test_user можно использовать утилиту WMIC:

wmic useraccount where name=’test_user’ get sid

Команда вернула нам SID указанного пользователя — S-1-5-21-1175651296-1316126944-203051354-1005.

Если нужно узнать SID текущего пользователя (под которым выполняется команда), используйте такую команду:

wmic useraccount where name=’%username%’ get sid

Илон Маск рекомендует:  Что такое код ischarupper

С помощью двух .NET классов System.Security.Principal.SecurityIdentifier и System.Security.Principal.NTAccount вы можете получить SID пользователя с помощью PowerShell:

$objUser = New-Object System.Security.Principal.NTAccount(«LOCAL_USER_NAME»)
$strS >$strSID.Value

Узнать SID пользователя или группы в домене AD по имени

Вы можете узнать SID текущей доменной учетной записи командой:

Узнать SID доменного пользователя можно с помощью WMIC. В этом случае в команде нужно указать имя домена:

wmic useraccount where (name=’jjsmith’ and domain=′corp.winitpro.ru′) get sid

Для получения SID доменного пользователя можно воспользоваться командлетом Get-ADUser, входящего в состав модуля Active Directory Module для Windows PowerShell. Получим SID для аккаунта jjsmith:

Get-ADUser -Identity ‘jjsmith’ | select SID

Вы можете получить SID группы AD с помощью другого командлета — Get-ADGroup:

Get-ADGroup -Filter | Select SID

Если на вашем компьютере не установлен модуль AD для PowerShell, вы можете получить SID пользователя с помощью упомянутых ранее классов .Net:

$objUser = New-Object System.Security.Principal.NTAccount(«corp.wintpro.ru»,»jjsmith»)
$strS >$strSID.Value

Эта же команда PowerShell в одну строку:

(new-object security.principal.ntaccount “jjsmith»).translate([security.principal.securityidentifier])

Как узнать имя учетной записи пользователя или группы по SID?

Чтобы узнать имя учетной записи пользователя по SID (обратная процедура), можно воспользоваться одной из следующих команд:

wmic useraccount where s get name

На PowerShell получить имя пользователя по его SID можно с помощью модуля AD для PowerShell:

Get-ADUser -Identity S-1-5-21-247647651-3952524288-2944781117-23711116

Чтобы найти имя доменной группы по известному SID используйте команду:

Get-ADGroup -Identity S-1-5-21-247647651-3952524288-2944781117-23711116

Также можно узнать SD группу и пользователя с помощью встроенных классов PowerShell (без дополнительных модулей):

$objS )
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

Поиск объектов в Active Directory по SID

Если вы не знаете к какому типу объекта AD относится некий SID и какой точно командлет использовать для его поиска (Get-AdUser, Get-ADComputer или Get-ADGroup), вы можете использовать универсальный метод поиска объектов в Active Directory по SID с помощью командлета Get-ADObject.

$s >Get-ADObject –IncludeDeletedObjects -Filter «objectSid -eq ‘$sid'» | Select-Object name, objectClass

В нашем случае объект AD, который имеет данный SID, является компьютером (objectClass).

Как узнать SID пользователя

Операционная система Windows для идентификации использует специальный идентификатор безопасности (Security Identifier, SID), который присваивается каждой учетной записи пользователя (а также компьютера или группы) при ее создании. В отличие от имени каждый SID уникален, что позволяет системе однозначно идентифицировать пользователя. Поэтому операционная система оперирует именно SID-ами и использует их для контроля доступа к различным ресурсам — принтерам, файлам и папкам и т.п.

Примечание. Говоря об уникальности SID, надо сделать одну оговорку. В Windows существуют так называемые встроенные (BuiltIn) учетные записи, такие как Administrator или Guest. SID-ы этих записей одинаковы в каждом экземпляре Windows вне зависимости от версии ОС. Это дает администратору возможность более-менее централизованно управлять доступом при отсутствии доменной структуры.

SID для локальных учетных записей храниться базе данных диспетчера учетных записей (Security Account Manager, SAM) на локальном компьютере, для доменных — в базе Active Directory. И сегодня речь пойдет о том, как можно узнать SID пользователя по его имени и наоборот, как выяснить имя пользователя по его SID.

Whoami

Когда требуется посмотреть SID текущего пользователя, то проще всего воспользоваться утилитой whoami. Для этого надо открыть консоль cmd и выполнить команду:

В том случае, когда необходимо узнать SID произвольного пользователя, можно воспользоваться Windows Management Instrumentation (WMI). Один из инструментов для работы с WMI — утилита WMIC. Так например, узнать SID пользователя Kirill можно такой командой:


wmic useraccount where name=′Kirill′ get sid

А можно и наоборот, выяснить имя пользователя по его SID:

wmic useraccount where s >

Дополнительно в WMI-запросе можно указать имя компьютера (для локального) или домена (для доменного пользователя). Например эта команда выведет SID локального администратора:

wmic useraccount where (name=′administrator′ and domain=′%computername%′) get sid

а эта — доменного:

wmic useraccount where (name=′administrator′ and domain=′contoso′) get sid

Для обычного пользователя все также, узнаем SID по имени:

wmic useraccount where (name=′kirill′ and domain=′contoso′) get sid

wmic useraccount where (s >

Примечание. В запросе вместо имени компьютера\домена можно использовать переменные %computername% и %userdomain%.

PowerShell и WMI

PowerShell также позволяет работать с WMI. Для примера обратимся к классу win32_userAccount и выведем SID доменного:

и локального пользователя:

Также вместо имени компьютера и домена можно указывать переменные окружения $env:computername и $env:userdomain, например:

Для обратной операции (узнать имя пользователя по SID) нам потребуется использовать свойство SID класса win32_SID. Например:

Как вариант, для работы с WMI можно использовать командлет Get-WmiObject (или Get-CimInstance). Например так мы узнаем SID пользователя:

PowerShell и .NET

Также узнать SID пользователя можно с помощью .NET класса System.Security.Principal.NTAccount. Этот класс используется для представления пользователя или группы. Для получения SID локального пользователя надо создать новый объект этого класса и передать ему в виде параметра имя пользователя, а затем с помощью метода Translate перевести объект пользователя в объект класса System.Security.Principal.SecurityIdentifier, который предназначен для представления SID пользователя или группы:

$User = New-Object System.Security.Principal.NTAccount(″Kirill″)
$S >
$SID.Value

Для доменного пользователя процедура идентична, только в виде параметра передаются имя пользователя и имя домена:

$User = New-Object System.Security.Principal.NTAccount(″Contoso″,″Kirill″)
$S >
$SID.Value

Для обратной процедуры получения имени по SID делаем наоборот — сначала создаем объект класса System.Security.Principal.SecurityIdentifier и передаем ему в виде параметра SID пользователя, а затем переводим его в объект класса System.Security.Principal.NTAccount и выводим свойство Value, содержащее имя пользователя:

$S > $User = $SID.Translate([System.Security.Principal.NTAccount])
$User.Value

PsGetSid

Как видите, встроенных средств для выяснения SID в Windows предостаточно, но для полноты картины возьмем еще одно, от стороннего разработчика.

PsGetSid — утилита командной строки от Sysinternals, входящая в состав пакета PsTools. PsGetSid умеет получать SID пользователя по его имени и наоборот, работает как с локальными, так и с доменными аккаунтами. Утилита не требует установки, ее достаточно скопировать на нужный компьютер и запустить.

Для примера запросим SID пользователя по его имени:

Команда WHOAMI – получение информации о текущем пользователе Windows

&nbsp &nbsp Команда WHOAMI используется для получения сведений об имени пользователя и группе, а также о соответствующих идентификаторах безопасности (SID), привилегиях, идентификаторах входа (ID) текущего пользователя (токене доступа) на локальном компьютере. При запуске whoami.exe без параметров, отображается имя пользователя в формате NTLM (домен\пользователь).

Формат командной строки:

Параметры командной строки:

Примеры использования WHOAMI :

WHOAMI — отобразить имя текущего пользователя в формате «домен\имя»

WHOAM /UPN — отобразить имя текущего пользователя в формате «имя@домен»

WHOAM /FQDN — отобразить имя текущего пользователя в формате полного доменного имени (FQDN).

WHOAMI /LOGONID — отобразить идентификатор текущего пользователя.

WHOAMI /USER — отобразить имя и SID текущего пользователя.

WHOAMI /USER /FO LIST — то же, что и в предыдущем случае, но с выводом данных в виде списка.

WHOAMI /GROUPS — отобразить список групп, членом которых является текущий пользователь.

WHOAMI /GROUPS /FO CSV — то же, что и в предыдущем случае, но с выводом результатов в виде полей, разделяемых запятой.

WHOAMI /GROUPS /FO CSV > C:\MyGroups.csv — то же, что и в предыдущем примере, но с выводом результатов в файл C:\MyGroups.csv.

WHOAMI /PRIV — отобразить список привилегий текущего пользователя.

WHOAMI /PRIV /FO TABLE — то же, что и в предыдущем примере, но с отображением результатов в виде таблицы.

WHOAMI /ALL — отобразить информацию о SID текущего пользователя, принадлежности к группам и перечень привилегий.

Формат отображаемой информации:

Команду Whoami можно использовать в командных файлах в качестве средства проверки того факта, что командный файл был запущен от имени администратора в среде Windows 7/8. Для этого достаточно сравнить набор привилегий при выполнении команды в обычном режиме и при выполнении в режиме запуска от имени администратора. Например, если удаленное выключение компьютера доступно только с правами администратора системы, можно, используя команду поиска FIND , определить наличие строки «SeRemoteShutdownPrivilege» в результатах выполнения команды whoami /priv для текущего пользователя. Например, так:

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL