Wymuś natychmiastowe wylogowanie uwierzytelnionego użytkownika (przypadek awaryjny)

24

W usłudze Active Directory, jeśli chcesz uniemożliwić użytkownikowi logowanie się, możesz wyłączyć jego konto lub po prostu zresetować hasło. Jeśli jednak użytkownik jest już zalogowany na stacji roboczej i musisz uniemożliwić mu jak najszybszy dostęp do jakichkolwiek zasobów - jak to zrobić? Mówię o sytuacji awaryjnej, w której pracownik zostaje zwolniony ze skutkiem natychmiastowym i istnieje ryzyko, że sieją spustoszenie, jeśli nie zostaną natychmiast odcięte od sieci.

Kilka dni temu miałem do czynienia z podobną sprawą. Na początku nie byłem pewien, jak się zachować. Zapobieganie dostępowi użytkowników do udziałów sieciowych jest łatwe, ale to nie wystarczy. W końcu wyłączyłem komputer docelowy za pomocą polecenia Stop-Computer -ComputerName <name> -Forcecmdlet programu PowerShell, co w moim przypadku rozwiązało problem. Jednak w niektórych przypadkach może to nie być najlepszy wybór, powiedzmy, jeśli użytkownik, którego chcesz odciąć, jest zalogowany na kilku stacjach roboczych lub na komputerze, który zapewnia ważną usługę i po prostu nie możesz jej wyłączyć.

Jakie jest najlepsze możliwe rozwiązanie do zdalnego wymuszenia natychmiastowego wylogowania użytkownika ze wszystkich stacji roboczych? Czy jest to w ogóle możliwe w Active Directory?

Erathiel
źródło
5
Dobre pytanie, a ja chcę zobaczyć odpowiedzi. Jednak w takiej sytuacji, czy zwalniany pracownik nie byłby w eskorcie HR przez 100% czasu od momentu otrzymania wiadomości o wypowiedzeniu do momentu eskorty z budynku?
EEAA
Tak, na pewno powinni. Jestem jednak zainteresowany rozwiązaniem tego problemu pod
kątem
Zadzwoń do ochrony i poproś, aby fizycznie udali się do lokalizacji osoby i ją usunęli? Jeśli znajdują się poza Twoją siecią, zablokuj je na zaporze? Użyj skryptu PowerShell, aby zabić wszelkie procesy na wszystkich komputerach, które działają z tym kontem użytkowników.
Zoredache

Odpowiedzi:

20

Najlepsze rozwiązanie: pracownik ochrony eskortuje osobę ...

Drugie najlepsze rozwiązanie:

  1. Najpierw sprawdź numer sesji za pomocą qwinsta: QWINSTA / server: nazwa_komputera
  2. Zapisz identyfikator sesji.
  3. Następnie użyj komendy logoff: LOGOFF sessionID / server: nazwa_komputera.
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.

Napisałem do tego podstawowy skrypt wsadowy. Potrzebuję też trochę unixtoolsna ścieżce 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
źródło
2
Czy można połączyć te dwa polecenia w zautomatyzowany plik wsadowy / PowerShell? Bardzo przydatne może być po prostu uruchomienie szybkiego skryptu, aby wylogować wszystkie sesje.
EtherDragon
1
Czy można uzyskać listę wszystkich komputerów, z którymi użytkownik jest połączony?
Nic nie jest możliwe
@NotingsImpossible - dowiedziałem się o tym, patrząc na mój serwer plików, ponieważ użytkownicy przekierowali profil na serwer, szukam tam otwartych sesji udostępniania plików.
ETL
@NotingsImpossible Zwykle osiągam to za pomocą psloggedon
BE77Y
5

Nie do końca oparty na AD, ale powinien robić, co chcesz.

Wyłącz lub wygaśnij konto

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

lub

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

Następnie wyloguj użytkownika ze swojego komputera

shutdown -m "\\computername" -l

Innym sposobem wylogowania użytkownika jest użycie wbudowanego narzędzia systemu Windows z administracyjnego wiersza polecenia

logoff 1 /SEVER:computername

Wylogowuje identyfikator sesji 1 z komputera zdalnego. Jeśli nie znasz identyfikatora sesji (domyślnie 1), możesz użyć kwerendy na zdalnym komputerze, aby go znaleźć.

David V.
źródło
1
To wyłączy maszynę, a nie wyloguje użytkownika, pomyślał, o to właśnie chodziło.
slybloty
2
Proszę, nie zrozum mnie źle, ale twoja odpowiedź jest dokładnie tym, czego nie chciałem i zawarłem to wszystko w swoim pytaniu: wyłączenie / wygaśnięcie konta lub zmiana hasła nie wymusza wylogowania użytkownika, a jedynie uniemożliwia mu zalogowanie się, w którym nie ma zastosowania w przypadku opisanym w PO.
Erathiel
3
shutdownPoleceń domyślnie nie faktycznie zamknięty, ale wylogowuje użytkownika .
Michael Hampton
Dodano alternatywną metodę wylogowania użytkownika, daj mi znać, jeśli jest to bardziej zbliżone do tego, czego szukasz. Edycja: Nie widziałem odpowiedzi ETL, więc dał mu +1 za pokonanie mnie do ciosu.
David V
3
Zasady w mojej pracy zwykle wyglądają tak: osoba jest wywoływana na „spotkanie” (zakończenie), podczas gdy na spotkaniu konto jest wyłączone, a sesja wylogowywana zdalnie (wszystkie komputery mają zainstalowane zabezpieczone serwery VNC).
Avery Payne
4

Możesz zablokować sesję użytkownika zdalnie za pomocą wmic:

1 - Najpierw zmień hasło użytkownika:

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

2 - Następnie wyłącz konto:

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

3 - Następnie odłącz sesję użytkownika:

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

Ma to wartość dodaną, ponieważ nie stracisz bieżącej sesji użytkownika, a zatem po odblokowaniu stacji roboczych będziesz mógł zobaczyć, czy próbował zrobić coś paskudnego przed eskortą do drzwi.

Wszystkie kredyty na blogu Kung Fu z wiersza poleceń . Jest tam mnóstwo szalonych rzeczy związanych z bezpieczeństwem / kryminalistyką!

AKTUALIZACJA: Pierwsze dwa kroki są przeznaczone dla użytkowników lokalnych, w środowisku Active Directory jest faktycznie łatwiejsze, wyłącz konto i zmień hasło w AD, a następnie uruchom trzecie polecenie przeciwko adresowi IP złośliwego użytkownika.

Gabriel Talavera
źródło
Niestety polecenie wmic..."tsdiscon" działa tylko na XP . W systemie Vista + to polecenie nie może rozłączyć sesji konsoli.
Mówię: Przywróć Monikę
0

Po prostu zmień godziny logowania na odmowy logowania we wszystkich godzinach we właściwościach użytkownika. To natychmiast wyloguje ich z miejsca, w którym są zalogowani.

Guestposter
źródło