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/login
al final de los session
elementos:
session optional pam_exec.so quiet /etc/pam_session.sh
2) Luego crea /etc/pam_session.sh
como (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 pkill
para 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.