Forzar el cierre de sesión inmediato del usuario autenticado (caso de emergencia)

24

En Active Directory, si desea evitar que un usuario inicie sesión, puede deshabilitar su cuenta o simplemente restablecer su contraseña. Sin embargo, si tiene un usuario que ya inició sesión en una estación de trabajo y necesita evitar que accedan a los recursos lo más rápido posible, ¿cómo lo hace? Hablo de una situación de emergencia en la que un trabajador es despedido con efecto inmediato y existe el riesgo de que cause estragos si no se bloquea la red de inmediato.

Hace unos días me enfrenté a un caso similar. Al principio no estaba seguro de cómo actuar. Evitar el acceso del usuario a los recursos compartidos de red es fácil, pero esto no es suficiente. Finalmente, apagué la computadora de destino con el Stop-Computer -ComputerName <name> -Forcecmdlet de PowerShell y en mi caso esto resolvió el problema. Sin embargo, en algunos casos, esta podría no ser la mejor opción, por ejemplo, si el usuario que necesita cortar está conectado en varias estaciones de trabajo o en una computadora que proporciona un servicio importante y simplemente no puede apagarlo.

¿Cuál es la mejor solución posible para forzar de forma remota el cierre de sesión inmediato de un usuario desde todas las estaciones de trabajo? ¿Es esto posible en Active Directory?

Erathiel
fuente
55
Buena pregunta, y estoy interesado en ver las respuestas. Sin embargo, en una situación como esta, ¿el empleado despedido no estaría con una escolta de recursos humanos el 100% del tiempo desde que recibe la noticia de su despido hasta que es escoltado desde el edificio?
EEAA
Sí, claro que deberían estarlo. Sin embargo, estoy interesado en resolver este problema de Active Directory-wise :)
Erathiel
Llame a seguridad y haga que se dirijan físicamente a la ubicación de la persona y los retiren. Si están fuera de su red, ¿los bloquea en su firewall? Use su script de PowerShell para eliminar cualquier proceso en todas sus computadoras que se ejecute con esa cuenta de usuario.
Zoredache

Respuestas:

20

La mejor solución: un guardia de seguridad escolta a la persona ...

Segunda mejor solución:

  1. Primero, verifique el número de sesión con qwinsta: QWINSTA / server: computername
  2. Escriba la ID de la sesión.
  3. Luego use el comando de cierre de sesión: LOGOFF sessionID / server: computername.
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.

Escribí un script por lotes rudimentario para eso. Requiere un poco unixtoolsen el camino, así como 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
fuente
2
¿Es posible combinar estos dos comandos en un archivo automatizado por lotes / powershell? Podría ser muy útil ejecutar un script rápido para cerrar sesión en todas las sesiones.
EtherDragon
1
¿Es posible obtener una lista de todas las computadoras a las que está conectado un usuario?
Nada imposible
@NothingsImpossible: la forma en que descubro esto es mirando mi servidor de archivos, ya que los usuarios tienen el perfil redirigido a un servidor, busco sesiones abiertas para compartir archivos.
ETL
@NothingsImpossible Tiendo a lograr eso usando psloggedon
BE77Y
5

No está completamente basado en AD, pero debe hacer lo que quiera.

Deshabilitar o caducar cuenta

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

o

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

Luego desconecte al usuario de su máquina

shutdown -m "\\computername" -l

Otra forma de cerrar la sesión del usuario es utilizar una utilidad integrada de Windows, desde un símbolo del sistema administrativo

logoff 1 /SEVER:computername

Esto cierra la sesión ID 1 de la computadora remota. Si no conoce el ID de la sesión (1 es el predeterminado), puede usar quser contra la máquina remota para encontrarlo.

David V
fuente
1
Eso apagará la máquina, no cerrará la sesión del usuario, pensó, que era la pregunta.
slybloty
2
No me malinterpretes, pero tu respuesta es precisamente lo que no quería y he incluido todo eso en mi pregunta: deshabilitar / caducar la cuenta o cambiar la contraseña no obliga al usuario a cerrar sesión, simplemente evita que inicien sesión en no sirve de nada en el caso descrito en el OP.
Erathiel
3
El shutdowncomando por defecto en realidad no se cierra, pero cierra la sesión del usuario .
Michael Hampton
Se agregó un método alternativo para cerrar la sesión del usuario, avíseme si esto es más parecido a lo que está buscando. Editar: No vi la respuesta de ETL, así que le di +1 por ganarme el golpe.
David V
3
La política en mi trabajo suele ser así: se llama a la persona a una "reunión" (finalización), mientras que en la reunión, la cuenta se deshabilita y la sesión se cierra de forma remota (todos los escritorios tienen servidores VNC seguros instalados).
Avery Payne
4

Puede bloquear la sesión del usuario de forma remota con wmic:

1 - Primero, cambie la contraseña del usuario:

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

2 - Luego, deshabilita la cuenta:

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

3 - Luego, desconecta la sesión del usuario:

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

Esto tiene un valor agregado, ya que no perderá la sesión de usuario actual y, por lo tanto, cuando desbloquee las estaciones de trabajo, podrá ver si estaba tratando de hacer algo desagradable antes de ser escoltado hasta la puerta.

Todos los créditos para Command Line Kung Fu Blog . ¡Hay un montón de cosas locas relacionadas con la seguridad / forense allí!

ACTUALIZACIÓN: Los dos primeros pasos están destinados a usuarios locales, en un entorno de directorio activo es realmente más fácil, deshabilita la cuenta y cambia la contraseña en AD, y luego ejecuta el tercer comando contra la dirección IP del usuario malicioso.

Gabriel Talavera
fuente
Lamentablemente, el comando wmic..."tsdiscon" solo funciona en XP . En Vista +, este comando no puede desconectar la sesión de la consola.
Digo reinstalar Mónica
0

Simplemente cambie las horas de inicio de sesión a inicio de sesión denegado para todas las horas en las propiedades del usuario. Eso los desconectará inmediatamente de donde estén conectados.

Invitado
fuente