2009-01-13 17 views
6

Ich versuche ein Skript zu schreiben, das den Benutzer informiert, wenn sich jemand über ssh am Rechner angemeldet hat.SSH "Login Monitor" für Linux

Meine aktuelle Idee ist es, die Ausgabe von "w" mit Grep in Intervallen zu analysieren.

Aber das ist weder elegant noch performant. Hat jemand eine bessere Idee, wie man ein solches Programm umsetzt?

Jede Hilfe würde wirklich geschätzt werden!

Antwort

9

auf Ubuntu (und ich alle anderen Debian-Distributionen erraten würde, wenn nicht alle Linuces), die erfolgreiche Aufzeichnungen /var/log/auth.log Datei (und erfolglos) Anmeldeversuche:

sshd[XXX]: pam_unix(sshd:session): session opened for user XXX 

Sie einrichten könnte diesen Befehl einen sehr einfachen Monitor (beachten Sie, dass Sie root sein, um das Authentifizierungsprotokoll zu sehen):

sudo tail -F /var/log/auth.log | grep sshd 
+0

Oder Sie könnten einfach "Tail -F" verwenden. –

+0

Ausgezeichneter Punkt - Ich wusste nicht über diese Option – kdgregory

+1

Ich habe Unix-Admins kennen gelernt, die genau das gleiche tun, um Logins als Root zu ihren Boxen zu erkennen. Wenn sich jemand als root anmeldet, wird eine E-Mail an seinen Pager gesendet. Sehr nützlich, aber gelegentlich amüsant, denn jedes Mal, wenn sie ernsthafte Wartungsarbeiten anstellten und eine Root-Shell öffneten, bekamen sie eine Seite ... –

4

Richten Sie eine Named Pipe ein, richten Sie einen Protokolldateiparser ein, um sie zu überwachen, und senden Sie die SSH-Nachrichten an sie. Der Protokolldatei-Parser kann tun, was Sie wollen, oder einem Daemon signalisieren, dies zu tun.

Die Umleitung der Protokolldatei erfolgt in einer Konfigurationsdatei in/etc /, deren Name mir gerade entgeht. /etc/syslog.conf, denke ich.

13

Paul Tomblin den richtigen Vorschlag hat.

in Ihrem sshd_config einrichten Protokollierung an einen Syslog-Einrichtung verweisen, die Sie separat anmelden können:

=> man 3 syslog für mehr Einrichtungen sehen. Wählen Sie einen wie z.B.

# Logging 
SyslogFacility local5 
LogLevel INFO 

dann Ihre syslog.conf wie folgt aufgebaut:

local5.info |/var/run/mysshwatcher.pipe 

das Skript hinzufügen Sie/etc/inittab schreiben wollen, damit es läuft weiter:

sw0:2345:respawn:/usr/local/bin/mysshwatcher.sh 

Schreiben Sie dann Ihr Skript:

#!/bin/sh 

P=/var/run/mysshwatcher.pipe 
test -p $P || mkfifo $P 

while read x <$P; do 
    # ... whatever, e.g.: 
    echo "ssh info: $x" | wall 
done; 

Fina lly, starte deinen syslogd neu und lass deine inittab neu laden (init q) und es sollte funktionieren. Wenn andere Varianten dieser Dienste verwendet werden, müssen Sie die Dinge entsprechend konfigurieren (z. B. newsyslogd => /etc/newsyslog.conf; Ubuntu: /etc/event.d ist statt von inittab)

Dies ist sehr rudimentär und fehlt, aber sollte genug sein, um dich zu beginnen ...

weitere Informationen: man sshd_config für mehr Protokollierungsoptionen/Ausführlichkeit.

+0

Ja, das ist fast genau das, was ich bei meinem letzten Job gemacht habe, außer dass ich Perl benutzt habe das Rohr. Ich hätte mehr Details gepostet, außer mein Quellcode ist zu Hause. –

5

Wenn es Ihnen egal ist, wie sie sich angemeldet haben (telnet/ssh), zeigt das "letzte" Unix-Kommandozeilenprogramm die letzten Logins auf dem Rechner an. Remote-Benutzer wird die IP-Adresse

[root @ EX02 www] # letzte foo pts/1 81.31.xy Sun 18. Januar 07.25 angemeldet noch in
foo pts/0 81.31.xy So Jan 18 01: 51 noch eingeloggt
foo pts/0 81.31.x.y Sat Jan 17 03:51 - 07:52 (04:00)
bar pts/5 199.146.xy Fr Jan 16 08:57 - 13:29 (04:32

2

Ich habe ein Programm gemacht (welches i rufen Authentication Monitor), dass die Aufgabe in der Frage beschrieben löst.

Wenn Sie wollten, sind Sie mehr als willkommen, um es zu laden, zu untersuchen, wie ich dieses Problem lösen (log-Dateien verwenden).

Sie Hier finden Sie den Authentifizierungsmonitor: http://bwyan.dk/?p=1744

+1

Bitte beachten Sie, dass bare Links zu Ihrer eigenen Website/Produkt hier aus zwei Gründen nicht empfohlen werden; Erstens sollte eine Antwort als eigenständige Antwort und nicht als bloße Verknüpfung mit einer externen Website veröffentlicht werden. Zweitens wird die Eigenwerbung hier oft missbilligt und oft als Spam gekennzeichnet (besonders, wenn es keine Offenlegung gibt, dass Sie mit Ihrer eigenen Website/Ihrem Produkt verlinken). –

+2

Andrew, schneiden Sie den Kerl eine Pause, es ist ein Open-Source-Projekt. –

0

Wir hatten das gleiche Problem, also haben wir unser eigenes Skript geschriebenEs kann von der github heruntergeladen werden.

Hope it :)

prost hilft! Ivan

+1

Dies ist ein schönes Bash-Skript. – bobef

+0

@bobef Thx, du hast meinen Tag gemacht :) – Sabo