Я работаю над приложением диспетчера паролей и по соображениям безопасности хочу запустить неубиваемый процесс.
И, кроме того, я не хочу, чтобы эта программа была демоном, поскольку мне нужно читать со стандартного ввода и писать в него.
Есть ли способ сделать это?
Ответы:
Делает менеджер паролей проход под отдельным пользователем и ручки / игнорировать / блокировать сигналы , генерируемые терминальные (
SIGINT
,SIGQUIT
,SIGHUP
,SIGTSTP
,SIGTTIN
, иSIGTTOU
).Вы не можете отправлять сигналы (= kill) процессам, запущенным от имени другого пользователя (пользователя, чьи действительный uid и uid сохраненного набора отличаются от вашего эффективного uid), если ваш эффективный идентификатор не равен 0 (root).
Все процессы по-прежнему будут уничтожены пользователем root.
Для более подробной информации смотрите kill (2) .
источник
Единственный способ сделать процесс неубиваемым - это реализовать его как поток ядра , что не является чем-то тривиальным.
Вы все еще можете убить его, но это будет сопутствующий ущерб ОС.
Вы также можете разработать собственный модуль ядра, который установит
SIGNAL_UNKILLABLE
флаг для вашего процесса. Этот флаг предназначен для установки толькоinit
(илиsystemd
любого начального процесса, запускаемого ядром), которые являются единственными пользовательскими процессами, защищенными от безусловного уничтожения, но, похоже, ничто не запрещает этот флаг присутствовать для обычного процесса.источник
Технически, нет способа сделать процесс неубиваемым.
Конечно, для пользователей без полномочий root они могут уничтожать только процессы с одинаковым идентификатором пользователя, поэтому, если вы можете создавать разные учетные записи, вы можете использовать «уникальный» идентификатор пользователя для процесса, и тогда только root может уничтожить его.
Простое, но менее надежное решение состоит в том, чтобы ваш процесс перехватывал как можно больше сигналов (возможно, игнорируя их). Это подходит только для игрушечных примеров или не состязательной среды, так как нет способа поймать сигнал KILL (сигнал 9), но в противном случае вы можете избежать их гибели.
Наконец, вы можете организовать процесс возрождения, если вас убьют. Это также хрупкий (очень хрупкий), но будет немного сложнее удалить. Это можно сделать с помощью собственного процесса мониторинга или с помощью inittab. Для злоумышленника, который знает, что он делает, это можно легко обойти, убив несколько процессов одновременно.
источник
inittab
) возможно, что процесс мониторинга также может быть убит, не так ли?