我正在使用密码管理器应用程序,出于安全原因,我想启动一个不可杀伤的进程。
而且我不希望该程序成为守护程序,因为我需要从标准输入中读取并写入它。
有没有办法做到这一点?
我正在使用密码管理器应用程序,出于安全原因,我想启动一个不可杀伤的进程。
而且我不希望该程序成为守护程序,因为我需要从标准输入中读取并写入它。
有没有办法做到这一点?
Answers:
使进程不可杀灭的唯一方法是将其实现为内核线程,这并非易事。
您仍然可以杀死它,但这将是操作系统关闭的附带损害。
您可能还会开发一个自定义内核模块,该模块将为SIGNAL_UNKILLABLE
您的进程设置标志。该标志仅设计用于init
(或systemd
与内核启动无关的任何初始进程)设置,这是唯一防止无条件终止的用户级进程,但似乎没有什么禁止该标志出现在常规进程中的。
从技术上讲,没有办法使过程不可杀灭。
当然,对于非root用户,他们只能杀死与他们具有相同用户ID的进程,因此,如果您可以创建不同的帐户,则可以为该进程使用“唯一”用户ID,然后只有root可以杀死它。
一个简单但不那么健壮的解决方案是让您的过程捕获尽可能多的信号(也许忽略它们)。这仅适用于玩具示例或非对抗性环境,因为无法捕获KILL信号(信号9),但否则可以避免被它们杀死。
最后,您可以安排进程被杀死后重新生成。这也是易碎的(非常脆弱),但会使它更难清除。这可以使用您自己的监视进程或使用inittab来完成。对于知道自己在做什么的对手,可以通过一次杀死多个进程来轻松地避免这种情况。
inittab
),监视进程也有可能被杀死,不是吗?