Je m'interroge sur la sécurité des signaux UNIX.
SIGKILL
va tuer le processus. Alors, que se passe-t-il lorsqu'un processus d'utilisateur non root envoie un signal au processus d'un utilisateur root? Le processus exécute-t-il toujours le gestionnaire de signaux?
Je suis la réponse acceptée (gollum), et je tape man capabilites
, et je trouve beaucoup de choses sur le noyau 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
, cas particulier géré entièrement par le noyau, les signaux ne sont que des requêtes. Le processus de réception peut faire tout ce qu'ils veulent avec eux.SIGKILL
etSIGSTOP
...SIGKILL
. InitialementSIGINT
,SIGKILL
etSIGTERM
aura exactement le même effet, la seule différence est que le processus de réception peut modifier ce paramètre par défaut pour certains d’entre eux.Réponses:
Sous Linux, cela dépend des capacités du fichier.
Prenez la
mykill.c
source simple suivante :construit le:
Maintenant, en tant qu'utilisateur root, démarrez un processus de veille en arrière-plan:
Maintenant, en tant qu'utilisateur normal, essayez de le tuer:
Maintenant, en tant qu'utilisateur root, modifiez les
/tmp/mykill
majuscules:Et essayez à nouveau en tant qu'utilisateur normal:
Enfin, veuillez supprimer
/tmp/mykill
pour des raisons évidentes;)la source
Rien:
la source
kill(2)
La page de manuel explique:la source
le signal serait acheminé mais le propriétaire du processus appartiendrait à root. donc, l'autre utilisateur n'a pas le droit de mettre fin au processus, vous recevrez donc un problème d'erreur d'autorisation.
mettre fin au processus n'est possible que si vous possédez la propriété (les droits appropriés) du processus.
la source