Zum Inhalt springen

telnet sessions loggen?


gajUli

Empfohlene Beiträge

Hi Unixer,

wie kann ich telnet-sessions eines bestimmten Users in einer Datei mitloggen lassen? (Unix allgemein)

Hintergrund ist, ich hab da ein paar User auf einem Server, die Dinge versuchen, die sie nicht sollen, und ich moechte gern wissen, wer da genau was am fummeln ist.

Danke fuer alle Antworten

Uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Nobse

Hi,

allgemein kann man nur sagen, beim Telnet Server kannst du das einstellen ;)

Welcher Distribution?

Welches Realease?

Welcher Kernel?

Ich brauche Antworten, keine Fragen. :confused:

1. Apple

2. 10.1

3. Mach

Sollte aber auch ohne distributionsspezifische tools funktionieren.

Uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

Was ein User in der Shell macht (also auch über telnet), kannst Du im Homeverzeichniss des Users in der .history-Datei nachlesen.

Also könntest Du dir mit "tail -f /home/xyz.history" die Aktionen des Users Realtime auf einer Console anzeigen lassen.

HTH

Bis dann,

Ingo:cool:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Nobse

wenn ich genauer Fragen darf, was möchtest du denn über den User wissen bei der Telnet Session ?

Ich moechte, dass die gesamte Session gedumpt wird, genauso wie bei

telnet anyhost.anydomain | tee -a mydumpfile

Nur ist das ja ein Client-Kommando und kann so am Server ja laufen...

Die Frage nach der Rechtmaessigkeit kann ich verstehen. Es geht aber nicht um Privatsphaere oder Postgeheimnis, sondern um einen Rechner, der mein persoenliches Eigentum ist, und im Schulungsbetrieb als Server fungiert.

Uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

ne möglichkeit wäre doch ethereal mit Filtern dazu zu bringen alles Telnet-mässiges in eine Datei zu schreiben. is aber nicht die wirklich schöne variante.

Gesucht ist glaube ich eher sowas:

http://www.symark.nl/pbroker4.htm (3. oder 4. Absatz).

Interessante aufgabenstellung....

man müsste doch die Ausgabe dieser virtuellen Terminals auch noch in eine Datei schreiben können, während sie der user zu gesicht bekommt

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin Leuts,

vermelde, das Problem ist geloest. :)

Hab telnet-User auf eine bestimmte shell eingestellt, die in Wirklichkeit ein kleines c-Programm ist, das die eigentliche shell von einem anderen Ort aus mit einem system-Kommando mit | tee -a logfile aufruft. Scheint voellig sauber zu laufen. Wichtig ist noch, die Rechte richtig zu setzen.

Wie es genau geht, kann ich bei Interesse gern naeher beschreiben, wenig Zeit momentan...

Danke fuer Eure Anregungen, die mir sehr geholfen haben.

Uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nabend,

hab den Kram heute mal getestet, lief ganz gut. Mit ps konnten die natuerlich den tee-job listen und haben prompt versucht, die Log-Datei zu loeschen. Als das nicht ging, wollten sie den Prozess killen. Das geht auch, aber die telnet-session wird mit abgebrochen. :)

Einziger Nachteil: vi kommt damit nicht klar; bricht mit einer Meldung, dass er ne echte Shell braucht, ab. Pico geht.

War das ein Spass. :D:D:D

Uli

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von ElektroUli vi kommt damit nicht klar; bricht mit einer Meldung, dass er ne echte Shell braucht, ab. Pico geht.
Hoi, ist das schlimm ? Also sollten wir uns gedanken machen das du vi nehmen kannst oder kannst du damit leben ? ;)

War das ein Spass.
Glaub ich dir =)
Link zu diesem Kommentar
Auf anderen Seiten teilen

Für die Hartgesottenen unter Euch:

der telnetd wird ja über den inetd gestartet, was hindert euch also daran einen Wrapper vor den telnetd zu setzen der alles was kommt aufzeichnet und dann an telnetd (ungeändert?) weiterreicht?

Letztendlich ist jedoch immer noch die Frage wozu. Man sollte seinen Usern trauen oder telnet verbieten. Überwachung ist, meiner Meinung nach, nicht das Richtige.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von dr.disk

Letztendlich ist jedoch immer noch die Frage wozu.

Aus Beweisgruenden. User wissen oft nicht genau, was sie gemacht haben, schieben aber anderen die Schuld in die Schuhe, z. B. wenn etwas nicht funktioniert hat oder Dateien futsch sind. Ein verbose Logfile kann da Wunder wirken.

Ich halte es auch fuer eine krasse Fehleinschaetzung, wenn Du sagst, ein SysAdmin koennte seinen Usern trauen. Sowas gibts doch IRL ueberhaupt nicht.

Koenntest Du das mit dem Deamon-Wrapper mal genauer erklaeren? Mir ist schon klar, dass sowas prinzipiell geht, nur wie?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eins vorneweg: stimmt schon, man kann nicht allen Usern trauen - leider. Denen den man nicht traut entzieht man halt die Rechte soweit möglich :P

Zurück zum Wrapper: sofern telnetd zuläßt seine Eingaben auch von stdin anzunehmen, hast Du leichtes Spiel. Einfach ein Programm schreiben, daß von inetd gestartet wird und dabei telnetd startet. Alles was Dein Programm dann noch tun muß ist alles was übers Netz kommt nach stdout zu schreiben und die Ausgaben von telnetd übers Netz versenden. Und natürlich Dein Protokoll irgendwo einbauen.

Alternativ dazu: telnetd auf einen anderen Port wie 23 legen, ebenfalls über inetd und den Zugriff auf diesen Port via tcpd nur der lokalen Maschine erlauben. Dann einen kleinen Wrapper schreiben der von inetd gestartet wird sobald was auf der 23 ankommt. Dieser tut eigentlich nur alle Eingaben auf den anderen lokalen telnet Port umlenken und andersrum.

Soviel zur Theorie, für http hab ich sowas schon mal gebaut. Das war damals in Java für eine Windoof-Plattform. Heute würde ich wohl dafür Perl nehmen. Müßte aber ebenfalls nachlesen wie das mit den Sockets in Perl funktioniert, soll aber nicht schwer sein.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von dr.disk

Eins vorneweg: stimmt schon, man kann nicht allen Usern trauen - leider. Denen den man nicht traut entzieht man halt die Rechte soweit möglich :P

Na das ist doch mal ein Wort, dann sind wir uns ja im Grundsatz einig. ;)

Zu der Programmiererei, klar Perl, aber das wollte ich mir jetzt deswegen zusaetzlich zu den anderen 7 Programmiersprachen nicht auch noch antun. Ich denke auch, es sowas koennte mit Systemkommandos gehen.

Was mir nicht ganz klar ist, es gibt auf der Ebene doch eigentlich nicht "den" stdin oder stdout, sonderen mehrere, eben theoretisch fuer jeden Port und jede Shell einenen, oder seh ich das falsch? Und mir ist nicht klar, wie man auf die zugreifen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das kommt auf den Dienst an. Gleich vorweg, hab keine Ahnung wie das bei telnetd ist (und hab auch keine Ahnung welchen Du abhören willst - in.telnetd, telnetd, usw.)

Nehmen wir das Beispiel sendmail. Sendmail kann man alles was er tun soll auch über stdin erzählen. Natürlich kann man ihn aber auch über das Netz kontaktieren wie es die meisten wohl kennen dürften. Bei diesem Beispiel gibt es also zwei Wege wie man sich mit ihm unterhalten will.

Zu stdin, stdout und stderr: jeder Prozeß der läuft hat seinen eigenen stdin, stdout und stderr. Die können die gleichen wie die von anderen Prozeßen sein, müssen aber nicht. Du kennst ja sicherlich | , damit kann man unter Unix Ausgaben umlenken, eben von stdin nach stdout. Bsp: "cut -d: -f1 /etc/passwd | sort" Man erhält eine sortierte Liste aller Benutzer. Ein möglicher Ansatz für das Wrapper-Problem könnte also so aussehen:

Netzwerk --> Wrapper | telnetd | Wrapper --> Netzwerk

Unterstützt Dein telnetd die Variante mit stdin/stdout nicht, oder die ist Variante zwei lieber, kann man auch über sockets gehen. Das sieht dann so aus:

Netzwerk --> Wrapper --> loopback -> telnetd --> loopback --> Wrapper --> Netzwerk

loopback soll eine Netzwerkverbindung sein auf localhost. Die Idee war ja auf Port 23 den Wrapper hören zu lassen der alle Anfragen weiterleitet an einen anderen lokalen Port auf den der telnetd hört.

Drauf zugreifen kann man wie folgt auf das Ganze:

Variante 1: z.B. unter C mit popen, damit kann man einen Prozeß öffnen wie eine Datei. Unter Perl gibt's davon eine Variante die von einem Prozeß lesen und schreiben kann und das vor allem gleichzeitig. Dort heißt die open2, was ähnliches gibt's sicherlich auch unter c oder anderen Sprachen.

Variante 2: Naja, einfach zwei Netzwerksockets erstellen und mit dem Gegenüber reden.

Naja, in Perl sind halt schon wunderhübsche Sockets oder open-Befehle drin, welche Sprache Du aber nimmst ist letztendlich völlig egal.

7 Sprachen, was kann ich eigentlich alles? Mal aufzählen: C, sh, Pascal, Delphi, SQL, Vb, Java, HTML/DHTML mit JavaScript und CSS, Abab/4, Cobol, Basic (leider), ein wenig C++ und Perl bin ich gerade dabei zu lernen. Uuh, das sind ja 13. Da merkt man, daß man ein alter Sack ist ;) und dabei hab ich noch verschwiegen, daß ich mir irgendwann auch noch mal Phyton ankucken will.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von dr.disk

Naja, in Perl sind halt schon wunderhübsche Sockets oder open-Befehle drin, welche Sprache Du aber nimmst ist letztendlich völlig egal.

Na c natuerlich, weil damit haben die doch Unix geschrieben. :)

Nee klar, Perl ist schon speziell fuer sowas weiterentwickelter, aber ich mag es nicht lernen, weil ich es beruflich eigentlich nicht brauche.

Der Tip mit popen scheint gut zu sein, jedenfalls schweigen meine man-pages dazu nicht:


[localhost:/desktop/public_html] root# man popen

man: Formatting manual page...


POPEN(3)                  System Programmer's Manual                  POPEN(3)


NAME

     popen, pclose - process I/O


SYNOPSIS

     #include <stdio.h>


     FILE *

     popen(const char *command, const char *type)


     int

     pclose(FILE *stream)

Also ich nehme an, man kann dann mit fgets() o. ae. lustig Zeichenketten daraus lesen...

Werde mich mal damit beschaeftigen, wenn ich mehr Zeit habe.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von dr.disk

Na dann viel Spaß damit!

Was mir gestern noch beim ka.... eingefallen ist: Dein telnetd liegt doch sicherlich auch im Quelltext vor (Wink mit Zaunpfahl)...

Leider nein (OSX).

Das mit dem popen scheint uebrigens doch nicht so einfach zu gehen; man kann damit zwar einen io-Prozess oeffnen, aber es ist dann eben ein eigener, kein schon bestehender.

Anyway, das Problem war ja eigentlich geloest. In die Systemprogrammierung steige ich weiter ein, wenn ich mal drei Wochen Zeit hab. :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bestehende Prozeße zu öffen ist auch nicht möglich. Hier ging es ja darum, genau wie inetd, den Prozeß (telnetd) bei Bedarf anzustoßen. Und dafür kann man eine Variante von popen auf jeden Fall nehmen.

Da sind wir wieder: unter Perl heißen die open2 und open3. Die sollte es so oder so ähnlich aber auch unter c geben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...