Me pregunto sobre la seguridad de las señales UNIX.
SIGKILL
matará el proceso. Entonces, ¿qué sucede cuando el proceso de un usuario no root envía una señal al proceso de un usuario root? ¿El proceso todavía lleva a cabo el controlador de señal?
Sigo la respuesta aceptada (de gollum), escribo man capabilites
y encuentro muchas cosas sobre el kernel de Linux. De 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
, que es un caso especial y administrado completamente por el núcleo, las señales son simplemente una solicitud. El proceso de recepción puede hacer lo que quieran con ellos.SIGKILL
ySIGSTOP
...SIGKILL
. InicialmenteSIGINT
,SIGKILL
ySIGTERM
tendrá exactamente el mismo efecto, la única diferencia es que el proceso de recepción puede cambiar este valor predeterminado para algunos de ellos.Respuestas:
En Linux depende de las capacidades del archivo.
Tome la siguiente
mykill.c
fuente simple :constrúyelo:
Ahora, como usuario root, inicie un proceso de suspensión en segundo plano:
Ahora, como usuario normal, intenta matarlo:
Ahora, como usuario root, cambie las
/tmp/mykill
mayúsculas:E intente nuevamente como usuario normal:
Finalmente, elimine
/tmp/mykill
por razones obvias;)fuente
Nada:
fuente
kill(2)
La página man explica:fuente
la señal se llevaría pero el propietario del proceso pertenece a la raíz. por lo tanto, el otro usuario no tiene derecho a finalizar el proceso, por lo que recibirá un problema de error de permiso.
la finalización del proceso solo es posible cuando es propietario de la propiedad (derechos propios) del proceso.
fuente