我有一個 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{}
這是一個想法,但我認為還需要進一步完善。