Forum: PC-Programmierung Prozessausgabe mitlesen mit ptrace


von Daniel A. (daniel-a)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich bin auf die Idee zu kommen, das es noch ganz praktisch wäre, wenn 
ich bei meinem Server nicht nur beim Login eine Mail bekomme, sondern 
auch noch beim Logout ein transcript von allem, was während der session 
ausgegeben wurde an mich gesendet würde. Ich bin mir noch nicht ganz 
sicher, wie ich dass am besten Umsetze, aber alle write calls mittels 
ptrace abzufangen erschien bei meinen versuchen mit strace ein 
brauchbarer weg zu sein.

Ich will also ein Programm schreiben, welches die Ausgabe eines 
Prozesses, dessen PID ich ihm übergebe, ebenfalls ausgibt oder in ein 
File schreibt, damit ich damit die Ausgabe des ersten Prozesses 
mitschneiden kann, der in einer neuen session nach einem login läuft.

Ich hänge beim Programm im Anhang momentan an 2 stellen fest:
 1) Aus irgendeinem Grund sehe ich jeden syscall doppelt.
 2) Solange ich mich mit PTRACE_ATTACH an einen Prozess hänge, 
funktionieren bei diesem einige Interrupts wie z.B. SIGINT (ctrl+c) 
nicht mehr wie gewünscht.

Woran könnte das liegen?

von Georg A. (georga)


Lesenswert?

Ja, ich weiss, ist jetzt nicht zielführend: Aber warum sooo kompliziert? 
Starte 'screen -L' und alle Ein- und Ausgaben (inkl. 
Terminalcontrolcodes) landen in ~/screenlog.*.

von Daniel A. (daniel-a)


Lesenswert?

Ja, ich kenne screen, aber es geht mir darum dass nach jedem login über 
login, ssh, su, etc. mitgeloggt wird, ohne dass eine spezifische Shell 
vorausgesetzt würde oder ich es manuell starten müsste usw. Ein bisschen 
wie bei einem Honeypot, nur etwas weniger extrem.

von Daniel A. (daniel-a)


Angehängte Dateien:

Lesenswert?

Ich habe dass mit den doppelten Syscalls gerade heraus gefunden. 
PTRACE_SYSCALL hält den Prozess beim Eintritt und beim Verlassen eines 
Syscalls an, und es sind diese beiden Zustände, die ich sehe. Ich 
ignoriere nun einfach alle Syscalls, bei denen das Register rax auf 
-ENOSYS gesetzt ist, um nur Syscalls abzufangen, die schon ausgeführt 
wurden, und nicht den Error ENOSYS produziert haben.

von Georg A. (georga)


Lesenswert?

> und es sind diese beiden Zustände, die ich sehe.

Stimmt, das merkt man auch bei strace bei langdauernden Calls. Der 
Aufruf steht zuerst da und erst dann viel später das Ergebnis. Ist so 
betrachtet auch nicht ganz verkehrt ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.