Принудительное завершение аутентифицированного пользователя (аварийный случай)

24

В Active Directory, если вы хотите запретить пользователю вход в систему, вы можете отключить его учетную запись или просто сбросить пароль. Однако, если у вас есть пользователь, который уже вошел на рабочую станцию, и вам нужно как можно быстрее запретить ему доступ к каким-либо ресурсам - как вы это делаете? Я говорю о чрезвычайной ситуации, при которой работника увольняют с немедленным эффектом, и существует риск того, что он может нанести ущерб, если не будет немедленно заблокирован из сети.

Несколько дней назад я столкнулся с подобным случаем. Сначала я не был уверен, как действовать. Предотвратить доступ пользователей к сетевым ресурсам легко, но этого недостаточно. В конце концов я выключил целевой компьютер с помощью Stop-Computer -ComputerName <name> -Forceкомандлета PowerShell, и в моем случае это решило проблему. Однако в некоторых случаях это может быть не лучшим выбором, например, если пользователь, которого вы хотите отключить, вошел в систему на нескольких рабочих станциях или на компьютере, который предоставляет важную услугу, и вы просто не можете его отключить.

Какое наилучшее из возможных решений для удаленного принудительного выхода пользователя из системы со всех рабочих станций? Это возможно даже в Active Directory?

Erathiel
источник
5
Хороший вопрос, и мне интересно увидеть ответы. Однако в такой ситуации разве уволенный сотрудник не будет сопровождать HR в 100% случаев с момента, когда он получит известие об увольнении, пока он не будет сопровожден из здания?
EEAA
Да, конечно, они должны быть. Однако я заинтересован в решении этой проблемы в Active Directory :)
Erathiel
Позвонить в службу безопасности и попросить их физически перейти к месту нахождения человека и удалить его? Если они находятся за пределами вашей сети, заблокировать их на брандмауэре? Используйте сценарий powershell, чтобы убить все процессы на всех ваших компьютерах, которые работают с этой учетной записью пользователя.
Зоредаче

Ответы:

20

Лучшее решение: охранник сопровождает человека ...

Второе лучшее решение:

  1. Сначала проверьте номер сеанса с помощью qwinsta: QWINSTA / server: computername
  2. Запишите идентификатор сессии.
  3. Затем используйте команду выхода из системы: LOGOFF sessionID / server: имя_компьютера.
C:\>qwinsta /?
Display information about Remote Desktop Sessions.

QUERY SESSION [sessionname | username | sessionid]
              [/SERVER:servername] [/MODE] [/FLOW] [/CONNECT] [/COUNTER] [/VM]

  sessionname         Identifies the session named sessionname.
  username            Identifies the session with user username.
  sessionid           Identifies the session with ID sessionid.
  /SERVER:servername  The server to be queried (default is current).
  /MODE               Display current line settings.
  /FLOW               Display current flow control settings.
  /CONNECT            Display current connect settings.
  /COUNTER            Display current Remote Desktop Services counters information.
  /VM                 Display information about sessions within virtual machines.


C:\>logoff /?
Terminates a session.

LOGOFF [sessionname | sessionid] [/SERVER:servername] [/V] [/VM]

  sessionname         The name of the session.
  sessionid           The ID of the session.
  /SERVER:servername  Specifies the Remote Desktop server containing the user
                      session to log off (default is current).
  /V                  Displays information about the actions performed.
  /VM                 Logs off a session on server or within virtual machine. The unique ID of the session needs to be specified.

Я написал элементарный пакетный скрипт для этого. Я требую некоторых unixtoolsв пути, а также psexec.

@ECHO OFF
:: Script to log a user off a remote machine
::
:: Param 1: The machine
:: Param 2: The username

psexec \\%1 qwinsta | grep %2 | sed 's/console//' | awk '{print $2}' > %tmp%\sessionid.txt
set /p sessionid=< %tmp%\sessionid.txt
del /q %tmp%\sessionid.txt
psexec \\%1 logoff %sessionid% /v
ETL
источник
2
Можно ли объединить эти две команды в автоматический пакетный файл / PowerShell? Может быть очень полезно просто запустить быстрый скрипт для выхода из всех сеансов.
EtherDragon
1
Можно ли получить список всех компьютеров, к которым подключен пользователь?
NothingsImpossible
@NothingsImpossible - способ узнать это, посмотрев на мой файловый сервер, так как у пользователей профиль перенаправлен на сервер, и я ищу там сеансы открытого обмена файлами.
ETL
@NothingsImpossible Я стремлюсь добиться этого с помощью psloggedon
BE77Y
5

Не полностью на основе AD, но должен делать то, что вы хотите.

Отключить или истечь срок действия аккаунта

import-module activedirectory
set-aduser -identity "username" -accountexperationdate "12:09 pm"

или

set-aduser -identity "username" -enabled $false

Затем выйдите из системы на своем компьютере.

shutdown -m "\\computername" -l

Другой способ выйти из системы - использовать встроенную утилиту Windows из командной строки администратора.

logoff 1 /SEVER:computername

Это завершает сеанс с идентификатором 1 с удаленного компьютера. Если вы не знаете идентификатор сеанса (1 по умолчанию), вы можете использовать quser для удаленного компьютера, чтобы найти его.

Дэвид V
источник
1
Это выключит машину, а не выйдет из системы, подумал, о чем вопрос.
Слыблоты
2
Пожалуйста, не поймите меня неправильно, но ваш ответ - именно то, чего я не хотел, и я включил все это в свой вопрос: отключение / истечение срока действия учетной записи или изменение пароля не приводит к принудительному выходу пользователя из системы, а просто запрещает вход в него, в котором бесполезен в случае, описанном в ОП.
Эратиэль
3
Команда shutdownпо умолчанию фактически не закрывается, но выходит из системы пользователя .
Майкл Хэмптон
Добавлен альтернативный метод для выхода из системы, дайте мне знать, если это больше похоже на то, что вы ищете. Редактировать: не видел ответа ETL, поэтому дал ему +1 за избиение меня до удара.
Дэвид V
3
Политика в моей работе, как правило, выглядит следующим образом: человека вызывают на «собрание» (завершение), в то время как на собрании учетная запись отключается и сеанс выходит из системы удаленно (на всех рабочих столах установлены защищенные серверы VNC).
Эйвери Пэйн
4

Вы можете заблокировать сеанс пользователя удаленно с помощью wmic:

1 - Сначала измените пароль пользователя:

C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
  create "net user [user] [NewPassword]"

2 - Затем отключите учетную запись:

C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
  create "net user [user] /active:no"

3 - Затем отключите сеанс пользователя:

C:\> wmic /node:[IPaddr] /user:[Admin] /password:[password] process call
  create "tsdiscon"

Это имеет дополнительную ценность, так как вы не потеряете текущий сеанс пользователя и, следовательно, когда вы разблокируете рабочие станции, вы сможете увидеть, пытался ли он сделать что-то неприятное, прежде чем проводить его до двери.

Все кредиты на Командную строку кунг-фу блог . Там куча сумасшедших вещей, связанных с безопасностью / криминалистикой!

ОБНОВЛЕНИЕ: первые два шага предназначены для локальных пользователей, в среде активного каталога на самом деле проще: отключите учетную запись и измените пароль в AD, а затем выполните 3-ю команду для IP-адреса злонамеренного пользователя.

Габриэль Талавера
источник
К сожалению, команда wmic..."tsdiscon" работает только на XP . В Vista + эта команда не может отключить сеанс консоли.
Я говорю Восстановить Монику
0

Просто измените часы входа в систему, чтобы запретить вход для всех часов в свойствах пользователя. Это немедленно выведет их из системы, где бы они ни находились.

Guestposter
источник