Сделать процесс неубиваемым в Linux

Lenny до сих пор устарел, что можно также обновить его так или иначе. Это было выпущено 14-го февраля 2009. В годах Linux это - почти старинная вещь. (И Debian только обещает поддержку в течение трех лет так или иначе.)

14
06.09.2015, 14:36
3 ответа

Запустить диспетчер паролей под отдельным пользователем и обрабатывать / игнорировать / блокировать сигналы, генерируемые терминалом ( SIGINT , SIGQUIT ], SIGHUP , SIGTSTP , SIGTTIN и SIGTTOU ).

Вы не можете отправлять сигналы (= kill) процессам, запущенным под другим пользователем (пользователем, чей реальный uid и сохраненный установленный uid отличаются от вашего эффективного uid), если ваш эффективный идентификатор не равен 0 (root).

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

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

41
27.01.2020, 19:50

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

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

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

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

11
27.01.2020, 19:50

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

Его все равно можно убить, но это будет побочный ущерб при выключении операционной системы.

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

15
27.01.2020, 19:50

Теги

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