Eu tenho um servidor Ubuntu que lida com sessões X remotas de usuários. No entanto, não quero permitir que os usuários executem qualquer tipo de processo em segundo plano - então aqui está minha pergunta:
Como evito que os usuários tenham algum processo em segundo plano ou existe alguma maneira simples de eliminar processos de usuários que não estão logados?
Responder1
Eu faço algo semelhante em meus servidores. A essência geral disso é esta
1) Adicione /etc/pam.d/login
na parte inferior dos session
itens:
session optional pam_exec.so quiet /etc/pam_session.sh
2) Em seguida, crie /etc/pam_session.sh
como (e 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
Se quiser, você pode adicionar algo como sleep 5; pkill -9 -u "$PAM_USER"
depois de pkill
para garantir que está realmente morto.
Isso só será invocado quando os shells de login saírem, portanto não afetará a atividade automatizada do sistema. No entanto, se quiser ficar ainda mais seguro, você pode adicionar uma verificação para algo como o UID ser maior que 1000.
Responder2
Você poderia usar este comando para descobrir quais usuários estão logados no sistema e eliminá-los:
$ who | awk '{ printf ("%s",$1 "\n"); }' | \
grep -v root | xargs -I {} -t pkill -u $1{}
Seria necessário definir quando executar, talvez:
$ ps -eaf | egrep -q [g]nome-session || who | \
awk '{ printf ("%s",$1 "\n"); }' | \
grep -v root | xargs -I {} -t pkill -u $1{}
É uma ideia, mas acho que precisa de mais refinamento.