![注销时杀死用户进程](https://linux22.com/image/31521/%E6%B3%A8%E9%94%80%E6%97%B6%E6%9D%80%E6%AD%BB%E7%94%A8%E6%88%B7%E8%BF%9B%E7%A8%8B.png)
我有一个 Ubuntu 服务器来处理来自用户的远程 X 会话。但是,我不想允许用户运行任何类型的后台进程 - 所以这是我的问题:
如何防止用户拥有任何后台进程,或者是否有任何简单的方法来终止未登录用户的进程?
答案1
我在我的服务器上做了类似的事情。它的总体要点是这样的
/etc/pam.d/login
1)在项目底部添加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{}
这是一个想法,但我认为还需要进一步完善。