Gibt es eine Möglichkeit, einen Prozess zu erstellen, der in Linux von jedem beendet werden kann?

Gibt es eine Möglichkeit, einen Prozess zu erstellen, der in Linux von jedem beendet werden kann?

Ich möchte beispielsweise einen Prozess im Hintergrund GEHEIM auf einem Ubuntu-Server laufen lassen, aber jedes Mal, wenn sich jemand außer mir beim Server anmeldet, muss der Prozess von diesem Benutzer beendet werden. Ist es möglich, einen solchen Prozess zu erstellen? (Ich habe das sudoKonto und kann Änderungen vornehmen /etc/bash.bashrc)

Danke!

Antwort1

Bitte beachten Sie, dass das Folgende Ihre Systemsicherheit auf verschiedene Weise gefährden kann.

Erstellen Sie ein Skript, das Ihren Prozess beendet (nennen wir ihn Prozess P). Geben Sie dann allen Benutzern die Berechtigung, dieses Skript in sudoers auszuführen. Fügen Sie abschließend einen geeigneten Aufruf für dieses Skript mit sudo in hinzu /etc/bashrc.

Nehmen wir beispielsweise an, Sie wissen, wann Ihr Prozess gestartet wurde /usr/local/sbin/myproc, und möchten alle diese Prozesse sofort beenden, wenn sich jemand anmeldet. Daher verwenden Sie zum Beenden die einfache Grep-and-Kill-Strategie.

Geben Sie also zunächst Folgendes ein /usr/local/sbin/killmyprocs:

#!/bin/sh

ps auxw|grep [m]yproc|awk '{ print $2 }'|xargs kill -TERM > /dev/null 2>&1

# end of file.

Wenn Sie dies tatsächlich umsetzen möchten, möchten Sie wahrscheinlich etwas Anspruchsvolleres tun. Stellen Sie also sicher, dass Sie ein Skript erstellen, das entsprechende Signale abfängt und die Dinge im Allgemeinen auf sichere Weise erledigt.

Zweitens erteilen Sie allen Benutzern die Berechtigung, dieses Skript auszuführen, /etc/sudoersindem Sie Folgendes hinzufügen:

ALL ALL = (root) NOPASSWD: /usr/local/sbin/killmyprocs

Der dritte und letzte Schritt besteht darin, Ihrem Skript einen Sudo-Aufruf hinzuzufügen /etc/bashrc:

[ "`id -n -u`" != "<my_username>" ] && sudo /usr/local/sbin/killmyprocs

Ersetzen Sie es durch Ihr eigenes Konto, um zu vermeiden, dass Ihre „geheimen“ Prozesse beendet werden, wenn Sie sich selbst anmelden.

Um es zusammenzufassen: 1) Erstellen Sie ein Skript, das keine Ausgabe erzeugt, aber die Prozesse beendet, die Sie beenden möchten, 2) Fügen Sie /etc/sudoersfür jeden Benutzer auf Ihrem System einen entsprechenden Eintrag hinzu, damit dieser das Skript als Root ausführen kann, 3) Fügen Sie Ihrem Skript einen Aufruf per sudo an /etc/bashrc(oder /etc/profile) hinzu.

Ein Vorbehalt: /etc/bashrc(oder /etc/profilewas das betrifft) nur für interaktive Shells als Quelle verwendet werden. Das bedeutet, dass es für einen Benutzer ziemlich einfach ist, ssh yourhost „ps auxw“ auszuführen und Ihren Prozess aus der Prozesstabelle zu finden. Er wird mit dem oben eingeführten Mechanismus nicht beendet, da Shell-Initialisierungsdateien nicht konsultiert werden. Es gibt einen Weg, dies zu umgehen, indem ForceCommandman ´sshd_config` verwendet, aber das bleibt dem Leser als Übung überlassen.

Abschließend möchte ich noch einmal daran erinnern, dass dies offensichtliche Sicherheitsimplikationen mit sich bringt. Das klingt auch sehr nach dem Versuch, ein System durch eine Hintertür zu öffnen, auf das Sie keinen vollständigen Zugriff haben, aber das ist hier nicht wirklich mein Anliegen (wenn Sie diese Dinge als Superuser fragen müssen, werden Sie sowieso früh genug erwischt).

Antwort2

Was meinen Sie mit „der Prozess muss von diesem Benutzer beendet werden“?

A) Sie möchten, dass der Benutzer Ihren Prozess beendet, der ihm/ihr nicht gehört?

Erstellen Sie ein Skript, um den Prozess zu beenden, und legen Sie dann „setuid“ fest chmod u+s(dies kann ein großes Sicherheitsloch darstellen, wenn Sie nicht wissen, was Sie tun).

Oder

B) Sie möchten, dass der Prozess die Anmeldung eines Benutzers bemerkt und sich selbst beendet?

Nun, das ist, was Sie tun würden.

verwandte Informationen