Cómo eliminar todas las sesiones de un usuario de Linux excepto la primera y limitar a los usuarios a una sesión de inicio de sesión

Cómo eliminar todas las sesiones de un usuario de Linux excepto la primera y limitar a los usuarios a una sesión de inicio de sesión

Necesito saber cómo eliminar todos los procesos de un usuario que ha iniciado sesión, excepto el primero en Linux Redhat 6.

por ejemplo, AZainel usuario inicia sesión varias veces desde diferentes máquinas, por lo que necesito permitir solo el primer proceso y eliminar todos los demás para este usuario:

who -u
AZain    pts/2        2016-06-23 08:34   .         27191 (localhost)
AZain    pts/4        2016-06-23 09:01   .         28885 (localhost)
root     pts/0        2016-06-23 08:14   .         25962 (10.11.155.23)
AZain    pts/1        2016-06-23 08:34 00:27       27169 (10.11.155.23)
AZain    pts/3        2016-06-23 09:01   .         28867 (10.11.155.14)

Editar: Estoy intentando hacerlo porque tengo una aplicación que consume licencias para los usuarios. Entonces, cada nueva sesión para el mismo usuario consumiría más licencia. Si pudiera evitar nuevos inicios de sesión para el mismo usuario, sería genial.

Respuesta1

Este es un clásicoProblema XY- está intentando limitar la cantidad de instancias de software con licencia que se ejecutan por usuario, pero está concentrado en limitar los inicios de sesión del shell. Este es el problema equivocado para resolver.

Una mejor solución es:

  • Cambie el nombre del programa, por ejemplo, de /usr/local/bin/fooa/usr/local/bin/foo.real

  • Escriba un script contenedor con el mismo nombre y ruta que el programa original (p. ej. /usr/local/bin/foo) para comprobar si el usuario ya lo está ejecutando.

    En caso afirmativo, salga con un mensaje de error apropiado. Si no, ejecute el programa original ( /usr/local/bin/foo.real)

Un ejemplo muy sencillo:

#! /bin/sh

if pgrep -u "$USER" foo.real >/dev/null 2>&1 ; then
  echo "You are already running foo" >&2
  exit 1
else
  foo.real
fi

Nota: Esto funciona para usuarios con buen comportamiento que entienden el tema de la licencia y no les importa seguir las reglas. No impedirá que un usuario astuto se ejecute foo.realpor sí mismo. Podrías detener a usuarios astutos pero no muy inteligentes alias foo.real=fooagregando /etc/profileo /etc/bash.bashrc.

Podría ejecutar un trabajo cron raíz que detectara instancias de foo.realejecución que no tenían un script de shell llamado foocomo proceso principal. El trabajo cron podría eliminar dichas instancias y/o enviarle una advertencia por correo electrónico (para evitar enviarse spam, realice un seguimiento de los ID de proceso de foo.real y no se envíe por correo varias advertencias sobre el mismo PID).


Por cierto, si su software con licencia viene con algún tipo de administrador de licencias, consulte su documentación para ver si puede restringir la cantidad de instancias por usuario.

información relacionada