Меня интересует безопасность сигналов UNIX.
SIGKILL
убьет процесс. Итак, что происходит, когда процесс, не являющийся пользователем root, отправляет сигнал процессу пользователя root? Процесс все еще выполняет обработчик сигнала?
Я следую принятому ответу (gollum's) и печатаю man capabilites
, и я нахожу много вещей о ядре Linux. От 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
, что является особым случаем и полностью управляется ядром, сигналы являются просто запросом. Процесс получения может делать с ними все, что угодно.SIGKILL
иSIGSTOP
...SIGKILL
. ПервоначальноSIGINT
,SIGKILL
иSIGTERM
будет иметь точно такой же эффект, единственное отличие состоит в том, что процесс получения может изменить это значение по умолчанию для некоторых из них.Ответы:
В Linux это зависит от возможностей файла.
Возьмите следующий простой
mykill.c
источник:построить это:
Теперь как пользователь root запустите процесс сна в фоновом режиме:
Теперь, как обычный пользователь, попробуйте убить его:
Теперь как пользователь root измените
/tmp/mykill
прописные буквы:И попробуйте снова как обычный пользователь:
Наконец, пожалуйста, удалите
/tmp/mykill
по понятным причинам;)источник
Ничего такого:
источник
kill(2)
Справочная страница объясняет:источник
сигнал будет нести, но владелец процесса принадлежит root. Таким образом, другой пользователь не имеет права прекратить процесс, поэтому вы получите проблему с ошибкой разрешения.
Завершение процесса возможно только в том случае, если вы владеете правом собственности на данный процесс.
источник