Tty / pts-ssh-Sitzung zwischen Unix-Client und -Server vergleichen

1

Ist es möglich, die ssh-Sitzung mit tty / pts-Informationen und dem Datum der Anmeldung und Abmeldung auf einem Client aufzulisten? Äquivalent des letzten Befehls auf einem Server.

Meine Benutzer verwenden eine Proxy-SSH, um eine Verbindung zu einem Server herzustellen. Vom Proxy-Server aus verwenden sie jedoch ein generisches Konto, um eine Verbindung zum Server herzustellen. Ich würde tty / pts id zwischen Client und Server vergleichen. Auf dem Server verwende ich dieses Skript, um diese Informationen für den aktuellen Tag abzurufen:

#!/bin/bash
today="$(date '+%a %b %e')"
last | awk -v pattern="$today" '$0 ~ pattern && /pts/ {print $0 "#line#"}'
exit 0

Vielen Dank

Nicolas
quelle
Wenn ich das gut verstehe Klient In diesem Fall ist der Proxy-Server. Und du hast Zugang dazu. Kannst du es bestätigen? (Wenn dies der Fall ist, können Sie dasselbe Skript auf dem Client ausführen.) BTW Es scheint mir, dass Sie die Aktivität Ihrer Kunden irgendwie kontrollieren möchten, da sich alle beim selben Konto auf dem Proxy anmelden. Wenn ja, solltest du es direkt fragen. Ps & gt; willkommen auf SuperUser.
Hastur
Danke, ja, mein Stellvertreter ist mein Kunde und ich habe Zugriff darauf. Wenn ich dasselbe Skript auf dem Proxy (Client) ausführen, habe ich eine Historie der Verbindungen des Benutzercomputers mit dem Proxy, aber nicht mit dem Server. Aber vielleicht fehlt mir etwas. Vom Benutzercomputer bis zum Proxy verwenden sie ein eigenes SSH-Konto, vom Proxy zum Server jedoch ein generisches Konto (z. B. Oracle).
Nicolas
Bitte. Was ist deine eigentliche (letzte) Frage? ;) Wenn Sie den Zugriff auf ein Programm auf dem Server steuern möchten, erstellen Sie verschiedene Benutzer für das Programm. Wenn dies nicht möglich ist, erstellen Sie verschiedene Benutzer auf dem Server, und geben Sie ihnen die Möglichkeit, die Identität des zulässigen Benutzers zu ändern oder dieses Programm als diesen Benutzer auszuführen (siehe heilig sudo ). Für den Pfad, den Sie abbilden möchten, müssen Sie die beiden Listen abgleichen, oder besser, um die ssh-Protokollierung zu aktivieren und diese beiden Listen abzugleichen. Sie haben jedoch keine 100% igen eindeutigen Übereinstimmungen.
Hastur
Der Kontext ist: Ich arbeite dafür, dass ein Kunde den Zugriff auf den DB-Server prüft. Ich verwende eine Lösung zur Überwachung der Datenbankaktivität, aber zusätzlich würde ich Benutzer auf Betriebssystemebene protokollieren. Dieser Kunde verwendet heute einen SSH-Proxy, um mit einem generischen Konto eine Verbindung zum DB-Server herzustellen. Ich kann ihren Arbeitsprozess nicht ändern. Ich bin der Meinung, dass es aus Sicherheitsgründen sehr schlechte Praktiken sind. Meine eigentliche Frage ist: Ich würde tty / pts von der Clientseite mit der Serverseite vergleichen und den Zeitstempel korrelieren.
Nicolas
Du hast eine Antwort ... Ich weiß nicht, ob es dir gefällt, aber es ist eine Antwort :-)
Hastur

Antworten:

0

In wenigen Worten

Verwenden Sie die Protokolle von ssh auf beiden Maschinen: Sie erhalten die PID der erzeugten Shell. Dies sollte es Ihnen ermöglichen, die PID der Shell mit der Ausführung des Programms zu verbinden und eine bestimmte Übereinstimmung mit dem tty herzustellen. Für ein tieferes Audit können Sie ein Audit-Tool verwenden.

In mehr Worten

last

Mit dem einfachen last Sie können die Liste der Verbindungen anzeigen, die sich auf das verwendete tty beziehen.
Sie können zwei Listen von Ihrem Proxy Maschine (ich möchte es Gateway, GW nennen) und die andere von Ihrem Server . Der Befehl last Standardmäßig geben Sie Ihren Benutzernamen, pts / tty, IP / Hostname an. Anmeldung Terminzeit, Ausloggen Terminzeit. Sie können das Format usw. ändern.

Dann müssen Sie an den Überlagerungen der Periode arbeiten und raten, wer war.

Das Problem, das ich sehe, ist, dass Sie auf diese Weise ein Werkzeug (Skript) erstellen müssen, das Ihnen alle möglichen Übereinstimmungen bietet, und sie bereinigen, während Sie gute Übereinstimmungen finden. Trotzdem können Sie seltsame Situationen haben.

Lassen Sie uns eine Fallstudie durchführen. Ein erster Benutzer, sagen wir Nicolas, kann sich beim GW anmelden. Dann geht er einen Kaffee trinken oder beantwortet einen Anruf. Inzwischen einen zweiten Benutzer, sagen wir Hastur, loggen Sie sich in das GW ein und schneller als der 1 st Benutzerprotokolle beim Server. Gerade in diesem Moment ist Ihr Doppelprotokoll kompliziert. Jetzt hat Hastur das Bedürfnis nach einem Kaffee und Nicolas meldet sich beim Server an. Wer wird der erste sein, der den Kaffee zu Ende bringt und sich zuerst mit dem Programm verbindet?

/var/log/auth (oder andere Protokolldatei von ssh) [ 1 ] ..

Es gibt Protokolldateien, die zur Überwachung der Anmeldung und Abmeldung auf jedem System verwendet werden. Suchen Sie nach dem richtigen Pfad und Namen, je nach System. Mit

sudo grep TheUsername /var/log/auth.log

Sie erhalten ähnliche Zeilen wie

May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)

wo Sie die richtige Login-Zeit haben, und sogar die PID ( [9024] ) und die IP. Dieses Mal können Sie die Daten dieser Datei mit den von übereinstimmen last Befehl, um das tty zu kennen, oder Sie können die PID der Shell, die das Programm selbst aufgerufen hat, irgendwie im Programm protokolliert haben (es ist möglich, einen Systemaufruf der Shell auszuführen).

Wenn Sie an diesen Dateien arbeiten, können Sie für jede Sitzung eine eindeutige Übereinstimmung finden. Für die analoge Protokolldatei auf dem Gateway haben Sie die ursprüngliche IP-Adresse und den Benutzernamen.

audit tools [ 2 ], [ 3 ]

Wenn Sie die Berechtigung dazu haben und dies legal ist, können Sie ein Überwachungstool verwenden und ein vollständiges Protokoll der Shell auf dem Host-Computer erstellen.

Verweise

  • [ 1 ] Protokollierung von SSH-Zugriffsversuchen
  • [ 2 ] shell / ssh / tty Session Logger
  • [ 3 ] Protokollierung der BASH-Shell-Sitzung auf dem Remote-Host
Hastur
quelle