Ich habe einen Ubuntu-Server, der Remote-X-Sitzungen von Benutzern verwaltet. Ich möchte jedoch nicht zulassen, dass Benutzer Hintergrundprozesse ausführen. Hier ist also meine Frage:
Wie verhindere ich, dass Benutzer Hintergrundprozesse ausführen, oder gibt es eine einfache Möglichkeit, Prozesse von Benutzern zu beenden, die nicht angemeldet sind?
Antwort1
Ich mache etwas Ähnliches auf meinen Servern. Der allgemeine Kern davon ist dieser
/etc/pam.d/login
1) Fügen Sie am Ende der Elemente Folgendes hinzu session
:
session optional pam_exec.so quiet /etc/pam_session.sh
2) Erstellen Sie dann /etc/pam_session.sh
als (und 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
Wenn Sie möchten, können Sie sleep 5; pkill -9 -u "$PAM_USER"
nach dem etwas wie hinzufügen pkill
, um sicherzustellen, dass es wirklich tot ist.
Dies wird nur aufgerufen, wenn Login-Shells beendet werden, sodass es die automatisierte Systemaktivität nicht beeinträchtigt. Wenn Sie jedoch noch sicherer sein möchten, können Sie eine Prüfung hinzufügen, z. B. ob die UID größer als 1000 ist.
Antwort2
Mit diesem Befehl können Sie herausfinden, welche Benutzer beim System angemeldet sind, und diese beenden:
$ who | awk '{ printf ("%s",$1 "\n"); }' | \
grep -v root | xargs -I {} -t pkill -u $1{}
Es müsste jedoch eine Ausführungsbegrenzung vorgenommen werden, beispielsweise:
$ ps -eaf | egrep -q [g]nome-session || who | \
awk '{ printf ("%s",$1 "\n"); }' | \
grep -v root | xargs -I {} -t pkill -u $1{}
Es ist eine Idee, aber ich denke, sie muss noch weiter verfeinert werden.