How to prevent simultaneous login with same user on Active Directory?

 Thank to: https://abhishek.nagar.me/

Restrict Multiple Logins in Domain (AD)

I have always asked this question to my colleagues as to "How do i restrict Multiple Logins in an Active Directory Setup"

So here is the answer

Create a file when a user login and check for such file each time the login request is received  if file exists logoff, if file is not present Login and create the file. Its that simple

Below is the step by step process to achieve this using Group Policy

Assumptions:

  1. Windows 2003 AD is being used
  2. //<server>/logon is shared and write access is given to everyone

The Steps

Step 1) Create 2 batch files in C:\WINDOWS\SYSVOL\sysvol\domain.name\scripts\logon

File 1: login.bat

:: BEGIN CALLOUT A
If Exist \\server\logons\%username%.txt Goto notlogon
Echo %username% logged in from %computername% > \\server\logons\%username%.txt
Echo %username% logged in from %computername% > \\server\logons\%computername%.txt
:: END CALLOUT A
Goto end
:notlogon
Logoff
:end

  1. :: BEGIN CALLOUT A: Esta línea indica el comienzo de un comentario. En algunos scripts, los comentarios se utilizan para etiquetar secciones o partes del código para una mejor comprensión o documentación.

  2. If Exist \\server\logons\%username%.txt Goto notlogon: Esta línea verifica si existe un archivo de registro para el usuario actual en la ubicación especificada en el servidor. Si existe un archivo de registro, el script saltará a la etiqueta notlogon. Esto implica que si el usuario ya ha iniciado sesión previamente, no se realizarán acciones adicionales y el script terminará.

  3. Echo %username% logged in from %computername% > \\server\logons\%username%.txt: Esta línea escribe un mensaje en un archivo de registro en el servidor. El mensaje indica el nombre de usuario que inició sesión y el nombre de la computadora desde la que se realizó el inicio de sesión. El archivo de registro se crea en la carpeta logons en el servidor y lleva el nombre del usuario seguido de .txt.

  4. Echo %username% logged in from %computername% > \\server\logons\%computername%.txt: Similar al paso anterior, esta línea también escribe un mensaje en un archivo de registro en el servidor. Sin embargo, esta vez el archivo de registro se crea con el nombre de la computadora desde la que se realizó el inicio de sesión, en lugar del nombre de usuario.

  5. :: END CALLOUT A: Esta línea indica el final del comentario iniciado en la línea 1.

  6. Goto end: Esta línea redirige la ejecución del script a la etiqueta end, lo que significa que el script continuará ejecutándose desde ese punto.

  7. :notlogon: Esta línea es una etiqueta que marca el comienzo de una sección del script. Se utiliza en combinación con el comando Goto para saltar a esta sección si se cumple una condición específica (en este caso, si no existe un archivo de registro para el usuario).

  8. Logoff: Esta línea ejecuta el comando logoff, que termina la sesión actual del usuario.

  9. :end: Esta línea es otra etiqueta que marca el final de una sección del script. En este caso, es el punto final del script, después del cual no se realizarán más acciones.

File 2: logout.bat

:: BEGIN CALLOUT A
If Not Exist \\server\logons\%computername%.txt goto notlogon
Del \\server\logons\%username%.txt
Del \\server\logons\%computername%.txt
:: END CALLOUT A
Goto end
:notlogon
Logoff
:end

  1. :: BEGIN CALLOUT A: Esta línea indica el inicio de un comentario. Los comentarios se utilizan para describir partes del código y no se ejecutan como instrucciones.

  2. If Not Exist \\server\logons\%computername%.txt goto notlogon: Esta línea verifica si no existe un archivo de registro específico para la computadora actual en la ubicación especificada en el servidor. Si el archivo no existe, el script salta a la etiqueta notlogon.

  3. Del \\server\logons\%username%.txt: Esta línea elimina el archivo de registro asociado al nombre de usuario en la ubicación especificada en el servidor.

  4. Del \\server\logons\%computername%.txt: Similar al paso anterior, esta línea elimina el archivo de registro asociado al nombre de la computadora en la ubicación especificada en el servidor.

  5. :: END CALLOUT A: Esta línea indica el final de un comentario.

  6. Goto end: Esta línea redirige la ejecución del script a la etiqueta end, lo que significa que el script continuará ejecutándose desde ese punto.

  7. :notlogon: Esta línea es una etiqueta que marca el inicio de una sección del script. Se utiliza en combinación con el comando Goto para saltar a esta sección si no se cumple una condición específica (en este caso, si no existe un archivo de registro para la computadora).

  8. Logoff: Esta línea ejecuta el comando logoff, que termina la sesión actual del usuario.

  9. :end: Esta línea es otra etiqueta que marca el final de una sección del script. En este caso, es el punto final del script, después del cual no se realizarán más acciones.


Step 2) Modify Group Policy

Edit the Group Policy related to the OU where you want to disable multiple logins, In Group Policy Object Editor locate to

User Configuration > Windows Settings > Scripts (Logon/Logoff)

Add the login.bat created earlier in Logon and logout.bat in Logoff

Adding Login Script on Group Policy

thats it now when you login a file would be created in //<server>/logon with the username and computername of the loggedin user and he/she will not be able to login to other computer and once he logoff these would be automatically deleted and the user will be allowed to login on any Client.

Comentarios

Entradas populares de este blog

Guía de herramientas básicas para estudiantes: 31 apps y webs imprescindibles para ayudarte con los estudios

Comando FOR para archivos BAT

How to Setup and Configure Your Own GitLab Server on Ubuntu 20.04