私はパスワードマネージャーアプリケーションに取り組んでおり、セキュリティ上の理由から、殺せないプロセスを立ち上げたいと思っています。
さらに、標準入力から読み取り、書き込む必要があるため、このプログラムをデーモンにしたくないのです。
これを行う方法はありますか?
私はパスワードマネージャーアプリケーションに取り組んでおり、セキュリティ上の理由から、殺せないプロセスを立ち上げたいと思っています。
さらに、標準入力から読み取り、書き込む必要があるため、このプログラムをデーモンにしたくないのです。
これを行う方法はありますか?
回答:
プロセスを強制終了できないようにする唯一の方法は、プロセスをカーネルスレッドとして実装することです。これは簡単なことではありません。
あなたはまだそれを殺すことができますが、それはOSのシャットダウンの付随的な損害になるでしょう。
SIGNAL_UNKILLABLE
プロセスにフラグを設定するカスタムカーネルモジュールを開発することもできます。このフラグは、無条件のキルに対して保護されている唯一のユーザーランドプロセスであるinit
(またはsystemd
カーネル起動の初期プロセス)にのみ設定されるように設計されていますが、そのフラグが通常のプロセスに存在することを禁止するものはありません。
技術的には、プロセスを殺すことはできません。
もちろん、非rootユーザーの場合は、同じユーザーIDを持つプロセスのみを強制終了できます。そのため、異なるアカウントを作成できる場合は、プロセスに「一意の」ユーザーIDを使用して、rootのみが強制終了できます。
シンプルだが堅牢ではない解決策は、プロセスにできるだけ多くの信号をキャッチさせることです(おそらくそれらを無視します)。これは、KILLシグナル(シグナル9)をキャッチする方法がないため、おもちゃの例または非敵対的な環境にのみ適していますが、それ以外の場合は殺されないようにすることができます。
最後に、プロセスが強制終了された場合に再生成するように手配できます。これも壊れやすい(非常に壊れやすい)ですが、消去するのが少し難しくなります。これは、独自の監視プロセスを使用するか、inittabを使用して実行できます。彼らが何をしているかを知っている敵にとって、これは一度に複数のプロセスを殺すことによって簡単に回避することができます。
inittab
)モニタープロセスも強制終了される可能性があります。