Zastanawiam się nad bezpieczeństwem sygnałów UNIX.
SIGKILL
zabije proces. Co się stanie, gdy proces użytkownika innego niż root wyśle sygnał do procesu użytkownika root? Czy proces nadal wykonuje procedurę obsługi sygnału?
Śledzę przyjętą odpowiedź (gollum) i piszę man capabilites
, i znajduję wiele rzeczy na temat jądra Linuksa. Od 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
i SIGSTOP
...
SIGKILL
. Początkowo SIGINT
, SIGKILL
i SIGTERM
będzie miał dokładnie taki sam efekt, jedyną różnicą jest to, że proces odbierania może zmienić to ustawienie domyślne dla niektórych z nich.
SIGKILL
, co jest szczególnym przypadkiem i całkowicie zarządzanym przez jądro, sygnały są jedynie żądaniem. Proces otrzymywania może z nimi zrobić, co tylko zechce.