Auf einem gemeinsam genutzten Server möchte ich einige Benutzer mit sehr niedriger Priorität haben, sodass sie, wenn ein anderer Benutzer (auch ohne Root-Berechtigungen) die Ressourcen benötigt, einen der Prozesse der Benutzer mit niedriger Priorität beenden können.
Kann man so etwas zulassen?
users
not-root-user
privileges
Aslan986
quelle
quelle
Antworten:
Erteilen Sie den anderen Benutzern die Berechtigung, die Prozesse als Benutzer mit niedriger Priorität zu beenden
Ein Benutzer kann nur seine eigenen Prozesse signalisieren, es sei denn, er verfügt über Root-Rechte. Durch die Verwendung
sudo -u
eines Benutzers mit der richtigen Einrichtung in dersudoers
Datei kann die Identität des Benutzers mit niedriger Priorität angenommen und der Prozess abgebrochen werden.Beispielsweise:
Dies würde es ermöglichen alle Benutzer in der Gruppe
killers
laufen/bin/kill
wielowpriouser
.Siehe auch das
sudoers
Handbuch auf Ihrem System.Auf einem OpenBSD-System kann dasselbe über das native
doas
Hilfsprogramm mit einer Konfiguration wie folgt gemacht werdenDann
Siehe die Handbücher für
doas
unddoas.conf
.quelle
kill
. Beachten Sie auch, dass ich die Verwendung einer Benutzergruppe (killers
) vorschlage , nicht aller Benutzer.kill -HUP
, nicht nur zu sendenkill -TERM
.lowpriouser
. Wenn Sie die Signale auf einschränken möchtenTERM
, schreiben Sie ein Wrapper-Shell-Skript/bin/kill
und erlauben Sie den Benutzern, dieses anstelle von zu verwenden/bin/kill
.%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
Sie sollten die Prozesse nicht beenden, da sie nur wenige Ressourcen verbrauchen, wenn sie eine niedrige Priorität haben.
Um sie tatsächlich auf niedrige Priorität zu setzen, ändern Sie ihre Priorität entweder manuell oder verwenden Sie einen Daemon, wie
autonice
ich ihn vor vielen Jahren für DEC OSF / 1 geschrieben habe (ca. 1994), der nach lang laufenden Jobs sucht und ihre Priorität schrittweise verringert, je länger sie ausgeführt werden .EDIT gibt es ein Paket namens
and
, das diese Funktionalität für moderne Unices bietet.quelle
Ich denke, Sie nähern sich dem Problem aus einem falschen Blickwinkel: Wenn ein Prozess mit Einstellungen niedriger Priorität (CPU, E / A) ausgeführt wird, sollte dies keine großen Auswirkungen auf andere Prozesse haben, da die Ausführung nicht geplant ist. Wenn der Hauptspeicher knapp ist und der Prozess nicht lange ausgeführt werden sollte (z. B. aufgrund von CPU- und E / A-Einschränkungen), werden die "sauberen" Seiten gelöscht und die "schmutzigen" Seiten festgeschrieben oder ausgelagert werden und die Leistung anderer Prozesse nicht mehr beeinträchtigen.
Fazit: Mit der richtigen Prioritäteneinstellung und ausreichend Swap-Platz sollte es unnötig sein, Jobs mit niedriger Priorität abzubrechen, um Platz für wichtigere Aufgaben zu schaffen. Stattdessen wird der Kernel dafür sorgen, dass der erstere zugunsten des letzteren eingeschlafen wird.
quelle