Forcer la déconnexion immédiate de l'utilisateur authentifié (cas d'urgence)

24

Dans Active Directory, si vous souhaitez empêcher un utilisateur de se connecter, vous pouvez désactiver son compte ou simplement réinitialiser son mot de passe. Cependant, si un utilisateur est déjà connecté à un poste de travail et que vous devez l'empêcher d'accéder aux ressources le plus rapidement possible - comment procédez-vous? Je parle d'une situation d'urgence dans laquelle un travailleur est licencié avec effet immédiat et il y a un risque qu'il fasse des ravages s'il n'est pas immédiatement verrouillé du réseau.

Il y a quelques jours, j'ai été confronté à un cas similaire. Au début, je ne savais pas trop comment agir. Il est facile d'empêcher l'accès des utilisateurs aux partages réseau, mais cela ne suffit pas. Finalement, j'ai éteint l'ordinateur cible avec l' Stop-Computer -ComputerName <name> -Forceapplet de commande PowerShell et dans mon cas, cela a résolu le problème. Cependant, dans certains cas, cela peut ne pas être le meilleur choix, par exemple si l'utilisateur que vous devez couper est connecté sur plusieurs postes de travail ou sur un ordinateur qui fournit un service important et que vous ne pouvez tout simplement pas le désactiver.

Quelle est la meilleure solution possible pour forcer à distance une déconnexion immédiate de l'utilisateur de tous les postes de travail? Est-ce même possible dans Active Directory?

Erathiel
la source
5
Bonne question, et je suis intéressé à voir les réponses. Cependant, dans une situation comme celle-ci, l'employé licencié ne serait-il pas avec une escorte RH 100% du temps à partir du moment où il recevra la nouvelle de son licenciement jusqu'à ce qu'il soit escorté du bâtiment?
EEAA
Oui, bien sûr qu'ils devraient l'être. Je suis toutefois intéressé à résoudre ce problème en ce qui concerne Active Directory :)
Erathiel
Appeler la sécurité et les faire se rendre physiquement à l'emplacement de la personne et les retirer? S'ils sont en dehors de votre réseau, les bloquer sur votre pare-feu? Utilisez votre script PowerShell pour tuer tous les processus sur tous vos ordinateurs qui s'exécutent avec ce compte d'utilisateurs.
Zoredache

Réponses:

20

Meilleure solution: un gardien de sécurité escorte la personne ...

Deuxième meilleure solution:

  1. Tout d'abord, vérifiez le numéro de session avec qwinsta: QWINSTA / serveur: nomordinateur
  2. Notez l'ID de session.
  3. Utilisez ensuite la commande de déconnexion: 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.

J'ai écrit un script batch rudimentaire pour cela. J'en ai besoin unixtoolsdans le chemin aussi bien 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
la source
2
Est-il possible de combiner ces deux commandes dans un fichier batch / powershell automatisé? Il pourrait être très utile d'exécuter simplement un script rapide pour déconnecter toutes les sessions.
EtherDragon
1
Est-il possible d'obtenir une liste de tous les ordinateurs auxquels un utilisateur est connecté?
NothingsImpossible
@NothingsImpossible - la façon dont je le découvre est en regardant mon serveur de fichiers, car les utilisateurs ont un profil redirigé vers un serveur, j'y cherche des sessions de partage de fichiers ouvertes.
ETL
@NothingsImpossible J'ai tendance à réaliser cela en utilisant psloggedon
BE77Y
5

Pas entièrement basé sur AD, mais devrait faire ce que vous voulez.

Désactiver ou expirer le compte

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

ou

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

Déconnectez ensuite l'utilisateur de sa machine

shutdown -m "\\computername" -l

Une autre façon de déconnecter l'utilisateur consiste à utiliser un utilitaire Windows intégré, à partir d'une invite de commande administrative

logoff 1 /SEVER:computername

Cela déconnecte l'ID de session 1 de l'ordinateur distant. Si vous ne connaissez pas l'ID de session (1 par défaut), vous pouvez utiliser quser sur la machine distante pour le trouver.

David V
la source
1
Cela arrêtera la machine, ne déconnectera pas l'utilisateur, pensa-t-il, c'était la question.
slybloty
2
S'il vous plaît, ne vous méprenez pas, mais votre réponse est précisément ce que je ne voulais pas et j'ai inclus tout cela dans ma question: la désactivation / expiration du compte ou la modification du mot de passe ne force pas la déconnexion de l'utilisateur, cela les empêche simplement de se connecter. n'est d'aucune utilité dans le cas décrit dans le PO.
Erathiel
3
La shutdowncommande par défaut ne se ferme pas réellement vers le bas, mais déconnecte l'utilisateur .
Michael Hampton
Ajout d'une méthode alternative pour déconnecter l'utilisateur, faites-moi savoir si cela ressemble plus à ce que vous recherchez. Edit: Je n'ai pas vu la réponse d'ETL, alors je lui ai donné +1 pour m'avoir battu au punch.
David V
3
La politique de mon travail se présente généralement comme suit: la personne est appelée à une "réunion" (résiliation), tandis qu'à la réunion, le compte est désactivé et la session est déconnectée à distance (les postes de travail ont tous des serveurs VNC sécurisés installés).
Avery Payne
4

Vous pouvez verrouiller la session de l'utilisateur à distance avec wmic:

1 - Tout d'abord, changez le mot de passe utilisateur:

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

2 - Ensuite, désactivez le compte:

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

3 - Ensuite, déconnectez la session utilisateur:

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

Cela a une valeur ajoutée, car vous ne perdrez pas la session utilisateur en cours et donc lorsque vous déverrouillerez les postes de travail, vous pourrez voir s'il essayait de faire quelque chose de méchant avant d'être escorté jusqu'à la porte.

Tous les crédits du blog Command Line Kung Fu . Il y a un tas de choses folles liées à la sécurité / criminalistique là-dedans!

MISE À JOUR: Les deux premières étapes sont destinées aux utilisateurs locaux, dans un environnement Active Directory est en fait plus facile, désactivez le compte et modifiez le mot de passe dans AD, puis exécutez la 3e commande par rapport à l'adresse IP de l'utilisateur malveillant.

Gabriel Talavera
la source
Malheureusement, la commande wmic..."tsdiscon" ne fonctionne que sous XP . Sous Vista +, cette commande ne peut pas déconnecter la session de la console.
Je dis Reinstate Monica
0

Modifiez simplement les heures d'ouverture de session en ouverture de session refusée pour toutes les heures dans les propriétés de l'utilisateur. Cela les déconnectera immédiatement de l'endroit où ils sont connectés.

Guestposter
la source