# Login Monitoring

## forrestfunk81

Hallo zusammen,

ich würde gerne alle Logins auf meinen Systemen monitoren. Das Ergebnis sollte ein hübsches Grafana Dashboard sein, welches mir in (nahezu) Echtzeit anzeigt, wenn auf einem meiner Gentoo Systeme ein erfolgreicher Login passiert. Gegebenenfalls würde ich dafür noch Alerts konfigurieren. Die Daten dazu würde ich in einer InfluxDB speichern. 

Dazu brauche ich eine zuverlässige Stelle, um die Login Daten abzugreifen und per curl an Influx zu senden. Spontan sind mir zwei Wege eingefallen:

1) Syslog

Ich könnte syslog-ng entsprechend konfigurieren, dass es über einen 'facility(auth, authpriv)' Filter per destination command oder destination socket ein Skript/Programm aufruft, welches die Logzeile parsed und anschließend versendet.

Das wäre asynchron und würde den Login nicht behindern oder verlangsamen, aber andererseits bin ich dann von einem laufenden und korrekt konfiguriertem Log Daemon abhängig.

2) Login Shells

Soweit ich weiß rufen alle (interaktiven und nicht interaktiven) Login Shells /etc/profile auf. Ich könnte mein Skript dort starten und die Umgebungsvariablen auswerten.

Wenn mein Skript als Background Job (&) läuft, sollte es den Login Prozess nicht wesentlich verlangsamen.

Ich bin mir nicht sicher, ob es nicht doch Logins gibt, welche nicht durch /etc/profile gehen.

Was meint ihr, ist der richtige Ort um zuverlässig auf jeden Login zu reagieren? (möglichst ohne C Programmierung  :Wink: 

PS: Auf allen betroffenen Systemen bin ich der einzige Nutzer, von daher ist das Vorhaben datenschutztechnisch unbedenklich.

----------

## forrestfunk81

Ein kleines Update zu meinem Vorhaben. 

Zuerst hatte ich ein simples Skript in /etc/profile.d/ angelegt, welches bei jeder Login Shell ausgeführt wird und in die Influx schreibt. Nicht-Login-Shells werden damit aber nicht gemonitored (also z.B. scp oder ssh mit remote command). Deshalb verwende ich jetzt eine /etc/ssh/sshrc mit folgendem Inhalt:

```

nohup curl -i -XPOST 'http://my_influx_host:8086/write?db=my_database_name' --data-binary "auth,host=$HOSTNAME,user=$USER ssh_login=1" > /dev/null 2>&1 &

```

Das wird bei jedem SSH Login ausgeführt und erfasst sowohl Login Shells als auch nicht Login Shells wie scp.

----------

## tazinblack

hast Du "last" schon entdeckt?

Gib einfach mal in einer konsole den Befehl last ein.

Ansonsten hilft auch "man last"

----------

## forrestfunk81

Hi tazinblack,

vielen Dank für den Hinweis. Den Befehl kannte ich noch nicht.

----------

