Matar procesos de usuario al cerrar sesión

Matar procesos de usuario al cerrar sesión

Tengo un servidor Ubuntu que maneja sesiones X remotas de los usuarios. Sin embargo, no quiero permitir que los usuarios ejecuten ningún tipo de proceso en segundo plano, así que aquí está mi pregunta:

¿Cómo evito que los usuarios tengan algún proceso en segundo plano o existe alguna forma sencilla de eliminar procesos de usuarios que no han iniciado sesión?

Respuesta1

Hago algo similar en mis servidores. La esencia general es esta

1) Agregue /etc/pam.d/loginal final de los sessionelementos:

session optional pam_exec.so quiet /etc/pam_session.sh

2) Luego crea /etc/pam_session.shcomo (y chmod +x):

#!/bin/bash
[[ "$PAM_USER" == "root" ]] && exit 0

SESSION_COUNT="$(w -h "$PAM_USER" | wc -l)"

if (( SESSION_COUNT == 0 )) && [[ "$PAM_TYPE" == "close_session" ]]; then
  pkill -u "$PAM_USER"
fi

Si lo desea, puede agregar algo como sleep 5; pkill -9 -u "$PAM_USER"después de pkillpara asegurarse de que esté realmente muerto.

Esto sólo se invocará cuando se cierren los shells de inicio de sesión, por lo que no afectará la actividad automatizada del sistema. Sin embargo, si desea estar aún más seguro, puede agregar una verificación para que algo como que el UID sea mayor que 1000.

Respuesta2

Puede utilizar este comando para averiguar qué usuarios han iniciado sesión en el sistema y eliminarlos:

$ who | awk '{ printf ("%s",$1 "\n"); }' | \
        grep -v root | xargs -I {} -t pkill -u $1{}

Sin embargo, sería necesario especificar cuándo ejecutarse, tal vez:

$ ps -eaf | egrep -q [g]nome-session || who | \
            awk '{ printf ("%s",$1 "\n"); }' | \
            grep -v root | xargs -I {} -t pkill -u $1{}

Es una idea, pero creo que necesita un mayor perfeccionamiento.

información relacionada