Eu estou pensando sobre a segurança dos sinais UNIX.
SIGKILL
vai matar o processo. Então, o que acontece quando o processo de um usuário não root envia um sinal para o processo de um usuário root? O processo ainda executa o manipulador de sinal?
Sigo a resposta aceita (gollum's), digito man capabilites
e encontro muitas coisas sobre o kernel do 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 é um caso especial e gerenciado completamente pelo kernel, os sinais são apenas uma solicitação. O processo de recebimento pode fazer o que eles quiserem com eles.SIGKILL
eSIGSTOP
...SIGKILL
faria. InicialmenteSIGINT
,SIGKILL
eSIGTERM
terá exatamente o mesmo efeito, a única diferença é que o processo de recebimento pode alterar esse padrão para alguns deles.Respostas:
No Linux, isso depende dos recursos do arquivo.
Pegue a seguinte
mykill.c
fonte simples :construa:
Agora, como usuário root, inicie um processo de suspensão em segundo plano:
Agora, como usuário normal, tente matá-lo:
Agora, como usuário root, altere os
/tmp/mykill
limites:E tente novamente como usuário normal:
Finalmente, exclua
/tmp/mykill
por razões óbvias;)fonte
Nada:
fonte
kill(2)
A página de manual explica:fonte
o sinal seria carregado, mas o proprietário do processo pertence à raiz. portanto, o outro usuário não tem o direito de encerrar o processo, para que você receba um problema de erro de permissão.
encerrar o processo só é possível quando você possui a propriedade (direitos adequados) do processo.
fonte