Beenden Sie die Benutzerprozessen beim Abmelden

7

Ich habe einen Ubuntu-Server, der Remote-X-Sitzungen von Benutzern verarbeitet. Ich möchte jedoch nicht zulassen, dass Benutzer Hintergrundprozesse ausführen. Hier ist meine Frage:

Wie verhindere ich, dass Benutzer Hintergrundprozesse ausführen, oder gibt es eine einfache Möglichkeit, Prozesse von Benutzern abzubrechen, die nicht angemeldet sind?

Wiesław Herr
quelle
2
Sofern es keine eindeutige Möglichkeit gibt, "Hintergrund" -Prozesse zu identifizieren (ich glaube nicht), ist diese Einschränkung nicht durchsetzbar.
Goldlöckchen
Was behandelt die Remote-Sitzungen? ein Display Manager?
Gilles 'SO - hör auf böse zu sein'
Was ist das eigentliche Problem? Zu viele Prozesse bleiben bestehen? Benutzer, die Prozesse laufen lassen, die Systemressourcen verbrauchen? Möglicherweise können Sie solche Probleme mit lösen ulimit.
Asche

Antworten:

1

Ich mache etwas Ähnliches auf meinen Servern. Der allgemeine Kern davon ist dies

1) Fügen Sie /etc/pam.d/loginam Ende der sessionElemente hinzu:

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

2) Dann erstellen Sie /etc/pam_session.shals (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 etwas wie sleep 5; pkill -9 -u "$PAM_USER"nach dem hinzufügen, pkillum sicherzustellen, dass es wirklich tot ist.

Dies wird nur aufgerufen, wenn Login-Shells beendet werden, sodass die automatisierte Systemaktivität nicht beeinträchtigt wird. Wenn Sie jedoch noch sicherer sein möchten, können Sie eine Überprüfung hinzufügen, ob die UID größer als 1000 ist.

Patrick
quelle
0

Mit diesem Befehl können Sie herausfinden, welche Benutzer am System angemeldet sind, und sie beenden:

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

Vielleicht müsste man wissen, wann man rennen soll:

$ 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 weiter verfeinert werden.

slm
quelle
Ich nehme an, Sie möchten das grep -v rootin awk '! /root/ { ... }oder sogar einfach awk '$1 != "root"'
berücksichtigen