Ich arbeite an einer Passwort-Manager-Anwendung und möchte aus Sicherheitsgründen einen nicht abschließbaren Prozess starten.
Außerdem möchte ich nicht, dass dieses Programm ein Daemon ist, da ich von der Standardeingabe lesen und darauf schreiben muss.
Gibt es eine Möglichkeit, dies zu tun?
Antworten:
Machen Sie die Passwort - Manager läuft unter einem separaten Benutzer und Griff / ignorieren / Blockendgeräte erzeugten Signale (
SIGINT
,SIGQUIT
,SIGHUP
,SIGTSTP
,SIGTTIN
, undSIGTTOU
).Sie können keine Signale an (= kill) -Prozesse senden, die unter einem anderen Benutzer ausgeführt werden (Benutzer, dessen tatsächliche und gespeicherte UID sich von Ihrer effektiven UID unterscheidet), es sei denn, Ihre effektive ID ist 0 (root).
Alle Prozesse können weiterhin von root abgebrochen werden.
Weitere Einzelheiten finden Sie unter kill (2) .
quelle
Die einzige Möglichkeit, einen Prozess zum Absturz zu bringen, besteht darin, ihn als Kernel-Thread zu implementieren , was nicht trivial ist.
Sie können es immer noch töten, aber das wäre ein Kollateralschaden beim Herunterfahren des Betriebssystems.
Sie können auch ein benutzerdefiniertes Kernelmodul entwickeln, das das
SIGNAL_UNKILLABLE
Flag für Ihren Prozess setzt. Dieses Flag ist so konzipiert, dass es nur fürinit
(odersystemd
unabhängig vom Startprozess des Kernels) gesetzt wird, die die einzigen Userland-Prozesse sind, die vor einem bedingungslosen Kill geschützt sind, aber nichts scheint zu verbieten, dass dieses Flag für einen regulären Prozess vorhanden ist.quelle
Technisch gesehen gibt es keine Möglichkeit, einen Prozess nicht zum Erliegen zu bringen.
Natürlich können Nicht-Root-Benutzer nur Prozesse beenden, die dieselbe Benutzer-ID wie sie haben. Wenn Sie also unterschiedliche Konten einrichten können, können Sie eine "eindeutige" Benutzer-ID für den Prozess verwenden, die dann nur von Root beendet werden kann.
Eine einfache, aber weniger robuste Lösung besteht darin, dass Ihr Prozess so viele Signale wie möglich erfasst (möglicherweise ignoriert). Dies ist nur für Spielzeugbeispiele oder nicht-kontroverse Umgebungen geeignet, da es keine Möglichkeit gibt, das KILL-Signal (Signal 9) abzufangen, ansonsten können Sie vermeiden, von ihnen getötet zu werden.
Schließlich können Sie veranlassen, dass Ihr Prozess erneut gestartet wird, wenn er getötet wird. Dies ist ebenfalls zerbrechlich (sehr zerbrechlich), erschwert jedoch das Löschen. Dies kann mithilfe eines eigenen Monitorprozesses oder mithilfe von inittab erfolgen. Für einen Gegner, der weiß, was er tut, kann dies leicht umgangen werden, indem mehrere Prozesse gleichzeitig beendet werden.
quelle
inittab
) ist es möglich, dass der Monitorprozess auch beendet werden kann, oder?