注销时杀死用户进程

注销时杀死用户进程

我有一个 Ubuntu 服务器来处理来自用户的远程 X 会话。但是,我不想允许用户运行任何类型的后台进程 - 所以这是我的问题:

如何防止用户拥有任何后台进程,或者是否有任何简单的方法来终止未登录用户的进程?

答案1

我在我的服务器上做了类似的事情。它的总体要点是这样的

/etc/pam.d/login1)在项目底部添加session

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

2)然后创建/etc/pam_session.sh为(和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

如果你愿意,你可以sleep 5; pkill -9 -u "$PAM_USER"在 之后添加类似的内容pkill以确保它确实已经死了。

这只会在登录 shell 退出时被调用,因此它不会影响自动化系统活动。但是,如果您想要更安全,您可以添加检查,例如 UID 是否大于 1000。

答案2

您可以使用此命令来找出哪些用户登录到系统并杀死他们:

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

不过,它需要确定何时运行,也许:

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

这是一个想法,但我认为还需要进一步完善。

相关内容