Ich frage mich über die Sicherheit von UNIX-Signalen.
SIGKILL
bricht den Prozess ab. Was passiert also, wenn ein Nicht-Root-Benutzer ein Signal an den Prozess eines Root-Benutzers sendet? Führt der Prozess den Signalhandler noch aus?
Ich folge der akzeptierten Antwort (gollum's), tippe man capabilites
und finde viele Dinge über den Linux-Kernel. Von man capabilities
:
NAME
capabilities - overview of Linux capabilities
DESCRIPTION
For the purpose of performing permission checks, traditional UNIX
implementations distinguish two categories of processes: privileged
processes (whose effective user ID is 0, referred to as superuser or
root), and unprivileged processes (whose effective UID is nonzero).
Privileged processes bypass all kernel permission checks, while
unprivileged processes are subject to full permission checking based
on the process's credentials (usually: effective UID, effective GID,
and supplementary group list).
Starting with kernel 2.2, Linux divides the privileges traditionally
associated with superuser into distinct units, known as capabilities,
which can be independently enabled and disabled. Capabilities are a
per-thread attribute.
SIGKILL
und SIGSTOP
...
SIGKILL
abgebrochen. Am Anfang SIGINT
, SIGKILL
und SIGTERM
wird genau die gleiche Wirkung hat, ist der einzige Unterschied , dass der Empfangsprozess für einige von ihnen diese Standardeinstellung ändern.
SIGKILL
, was ein Sonderfall ist und vollständig vom Kernel verwaltet wird, sind Signale lediglich eine Anfrage. Der Empfangsprozess kann mit ihnen alles machen, was sie wollen.