Je travaille sur une application de gestion de mot de passe, et pour des raisons de sécurité, je veux lancer un processus impossible à tuer.
Et d'ailleurs, je ne veux pas que ce programme soit un démon car j'ai besoin de lire à partir d'une entrée standard et d'y écrire.
Y a-t-il un moyen de faire cela?
Réponses:
Faire le gestionnaire de mot de passe fonctionner sous un utilisateur distinct et poignée / ignore / bloquer les signaux générés bornes (
SIGINT
,SIGQUIT
,SIGHUP
,SIGTSTP
,SIGTTIN
, etSIGTTOU
).Vous ne pouvez pas envoyer de signaux aux processus (= kill) exécutés sous un autre utilisateur (utilisateur dont l'uid réel et l'uid enregistré sont différents de votre uid effectif) à moins que votre identifiant effectif soit 0 (root).
Tous les processus seront toujours éliminables par root.
Pour plus de détails, voir kill (2) .
la source
La seule façon de rendre un processus impossible à tuer est de le mettre en œuvre thread noyau , ce qui n'est pas anodin.
Vous pouvez toujours le tuer, mais ce serait un dommage collatéral de l'arrêt du système d'exploitation.
Vous pouvez également développer un module de noyau personnalisé qui définirait l'
SIGNAL_UNKILLABLE
indicateur de votre processus. Cet indicateur est conçu pour être défini uniquement pourinit
(ousystemd
, quel que soit le processus initial de lancement du noyau) qui sont les seuls processus de l'espace utilisateur protégés contre une destruction inconditionnelle, mais rien ne semble interdire que cet indicateur soit présent pour un processus régulier.la source
Techniquement, il n'y a aucun moyen de rendre un processus impossible à tuer.
Bien sûr, pour les utilisateurs non root, ils ne peuvent tuer que les processus qui ont le même ID utilisateur, donc si vous pouvez créer des comptes différents, vous pouvez utiliser un ID utilisateur "unique" pour le processus et alors seul root pourrait le tuer.
Une solution simple, mais moins robuste, consiste à faire en sorte que votre processus capture autant de signaux que possible (peut-être en les ignorant). Cela ne convient qu'aux exemples de jouets ou aux environnements non antagonistes car il n'y a aucun moyen d'attraper le signal KILL (signal 9), mais sinon vous pouvez éviter d'être tué par eux.
Enfin, vous pouvez faire en sorte que votre processus réapparaisse s'il est tué. C'est également fragile (très fragile), mais il sera un peu plus difficile à effacer. Cela peut être accompli en utilisant votre propre processus de surveillance ou en utilisant inittab. Pour un adversaire qui sait ce qu'il fait, cela peut être facilement contourné en tuant plusieurs processus à la fois.
la source
inittab
), il est possible que le processus de surveillance puisse également être tué, non?