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?


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.


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.


Ich nehme an, Sie möchten das grep -v rootin awk '! /root/ { ... }oder sogar einfach awk '$1 != "root"'
berücksichtigen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.