Open Source im professionellen Einsatz

Prozesse auf Zeit

Startet »minimail« in Zeile 45 mit »spawn« die zugehörige POE-Session, springt es zunächst den ab Zeile 34 in »PoCoTimedProcess.pm« definierten »_start «-Handler an. Dieser extrahiert (wiederum durch eine Closure) alle wichtigen Parameter wie »heartbeat« (Checkfrequenz für den Timeout), »timeout« (Anzahl der Sekunden bis zum Tunnelabbruch) und »command« (das SSH-Kommando zum Aufbau des Tunnels) aus dem Objekthash »self« und legt sie im Session-eigenen Heap ab. Anschließend setzt er zwei Events zur späteren Abarbeitung durch den POE-Kernel ab: »keep-alive« und »heartbeat«. Ersterer setzt die Heap-Variable »countdown« auf das Maximum zurück: Die in »timeout« liegende Maximalzahl der Sekunden, die ein Tunnel offen bleibt. Den Zustand »heartbeat« hingegen ruft POE wegen der Delay-Methode in Zeile 66 regelmäßig auf, wenn die in der Heap-Variablen »heartbeat« liegende Sekundenzahl verstrichen ist.

Der Tunnel ist zu diesem Zeitpunkt noch geschlossen, doch sobald die »launch()«-Methode den Event »up« absetzt und POE den zugehörigen Handler »up« (Zeile 84) aktiviert, startet ein POE-Rädchen vom Typ »POE::Wheel::Run« (Zeile 98) den SSH-Prozess. Die in den Zeilen 110 und 111 definierten Handler für die Unix-Signale »TERM« und »INT« sorgen dafür, dass ein abgeschossener »minimail«-Prozess auch einen eventuell geöffneten Tunnel mit einreißt.

Erreicht der Tunnel seine maximale Lebensdauer, setzt Zeile 78 den Event »down« ab und der gleichnamige Handler ab Zeile 118 schickt dem SSH-Prozess ein Kill-Signal. Damit andere Handler darüber Bescheid wissen, dass es den Tunnel nun nicht mehr gibt, setzt »down()« wiederum die Variable »is_up« auf den Wert »0«. Das auslösende Signal ist damit fertig bearbeitet, würde Zeile 130 den POE-Kernel nicht über »sig_handled()« darüber informieren, dann zöge dieser jetzt die Notbremse und beendete den Daemon.

Damit aus dem abgeschossenen Prozess kein Zombie entstehen kann, der sich mit Artgenossen zusammenschließt und im Lauf der Zeit den Rechner lahmzulegten droht, definiert Zeile 109 einen »sig_child«-Handler, der den sterbenden Prozess abfängt und den ab Zeile 45 definierten Handler »sig_child« startet. Mit dessen Hilfe verpasst POE dem abnippelnden Tunnel mit »waitpid()« noch die letzte Ölung und bewahrt ihn damit vor dem ewig lodernden Höllenfeuer. Der Handler löscht schließlich die letzte noch verbliebene Referenz auf das POE::Wheel, worauf POE den Kernel ordnungsgemäß zusammenfaltet.

Da ein Daemon sich nicht mit einem interaktiv eingegebenen Passwort identifizieren kann, erfordert das obige SSH-Kommando, dass der User vorher mit

ssh-keygen -t rsa

ein Schlüsselpaar erzeugt, dessen Daten typischerweise in den Dateien »id_rsa« (Private Key) und »id_rsa.pub« (Public Key) im Directory ».ssh« unter dem Homeverzeichnis des ausführenden Users landen.

Schlüssel statt Passwort

Damit der Hoster den Daemon hereinlässt, muss der User den mit der Option »no passphrase« erzeugten Public Key auf den Server spielen. Hierzu kopiert er einfach den lokalen Inhalt der Datei »id_rsa.pub« in die Datei ».ssh/authorized_keys« auf dem Hostingserver. Das von Hand eingebene SSH-Kommando oben (ohne die Option -N) sollte sich nun ohne Rückfragen auf dem Hostingserver einloggen.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook