Сделать процесс unkillable в Linux

Я работаю над приложением для управления паролями, и по соображениям безопасности я хочу запустить процесс unkillable.

И кроме того, я не хочу, чтобы эта программа была демоном, так как мне нужно читать со стандартного ввода и писать на нее.

Есть ли способ сделать это?

12 голосов | спросил Mohammad Razeghi 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 04 Sep 2015 14:06:19 +0300 2015, 14:06:19

3 ответа


37

Сделать диспетчер паролей под отдельным пользователем. Вы не можете посылать сигналы на процессы (= kill) под другим пользователем, если вы не являетесь пользователем root.

Все процессы по-прежнему будут уничтожаться с помощью root.

Подробнее см. kill (2) .

ответил PSkocik 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 04 Sep 2015 14:14:37 +0300 2015, 14:14:37
14

Единственный способ сделать процесс unkillable - реализовать его как поток ядра , что не является чем-то тривиальным.

Вы все равно можете его убить, но это будет побочный ущерб ОС.

Вы также можете разработать собственный модуль ядра, который установил бы флаг SIGNAL_UNKILLABLE. Этот флаг предназначен только для init (или systemd, независимо от начального процесса запуска ядра), которые являются единственными пользовательскими процессами, защищенными от безусловного убийства, но ничто не препятствует тому, чтобы этот флаг присутствовал для обычного процесса.

ответил jlliagre 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 04 Sep 2015 19:13:55 +0300 2015, 19:13:55
10

Технически, нет способа сделать процесс неудовлетворительным.

Конечно, для пользователей, не являющихся root, они могут убивать только те процессы, у которых есть тот же идентификатор пользователя, что и они, поэтому, если вы можете создавать разные учетные записи, вы можете использовать «уникальный» идентификатор пользователя для этого процесса, а затем только root может убить его.

Простое, но менее надежное решение заключается в том, чтобы ваш процесс задерживал как можно больше сигналов (возможно, игнорируя их). Это подходит только для игрушечных примеров или внеконкурентных сред, поскольку невозможно поймать сигнал KILL (сигнал 9), но в противном случае вы можете избежать их уничтожения.

Наконец, вы можете организовать, чтобы ваш процесс был возрожден, если он был убит. Это также хрупкий (очень хрупкий), но он будет немного сложнее вычеркнуть. Это может быть выполнено с помощью собственного монитора или с помощью inittab. Для противника, который знает, что они делают, это можно легко обойти, убив сразу несколько процессов.

ответил GregD 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 04 Sep 2015 17:55:27 +0300 2015, 17:55:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132