Script starten bei Ssh login?

Gast #5873001
Lesenswert?

/var/log/auth.log war schonmal der richtige tipp. Dort sehe ich jetzt 
wundervolle Daten.
Problem nur zwei. Ich würde jetzt gerne per Script jeweils den neusten 
Eintrag mitbekommen und zb per Mqtt versenden.

Wie also bekomme ich mit wenn in die Datei eingetragen wurde?
Eine art Tail-f in anwendung
#5873022
Lesenswert?

Also wenn du ein Script beim Login ausführen willst gibt es zig 
Möglichkeiten - hängt auch von der Distribution ab.

z.Bsp. - falls es nur ein Nutzer ist - bearbeite die Datei ~/.profile 
und füge deine Befehle hinzu.

Global kannst du es in die /etc/profile werfen.

Wird dann natürlich bei JEDEM Login, nicht nur SSH ausgeführt...
Moderator Persönliche Seite #5873106
Lesenswert?

linseunspätzle schrieb:
> Login Informationen landen gewöhnlich in /var/log/wtmp bzw. utmp.
>  Ausgaben von last o. lastb auswerten.

Das Kommando "last" wäre auch mein Kandidat. Das einzig Dumme: die wtmp 
wird zum Monatsanfang geleert.

Man kann dann noch mit
1
last -f /var/log/wtmp.1

die Daten des Vormonats hervorkratzen. Wenn man mehr möchte, muss man 
sich wohl mit logrotate beschäftigen. /etc/logrotate.conf hilft hier 
weiter.
Gast #5873127
Lesenswert?

raspi schrieb:
> Kannst du das näher erläutern wie genau du das machst?

Ich bin grad nicht zuhause, darum kann ich gerade nicht nachsehen.

Das Senden der Mails mach ich mit einem Eintrag ganz am Ende der Datei 
/etc/pam.d/common-session:
1
session optional pam_exec.so seteuid /pfad/zu/script

Das script wird dann bei session_open (anmelden), session_close 
(abmelden) etc. aufgerufen. Dort kann man dann was in die Richtung 
schreiben (ungetestet):
1
if [ "$PAM_TYPE" != session_open ] || [ "$PAM_SERVICE" != sshd ]
2
  then exit 0
3
fi
4

5
sendmail ...

Die fehlgeschlagenen Loginversuche zu loggen ist etwas trickier. Hier 
darf man keine fehler machen. Das mache ich in der 
/etc/pam.d/common-auth. Dort gibt es die Zeilen:
1
auth    [success=1 default=ignore]  pam_unix.so nullok_secure
2
auth    requisite           pam_deny.so
3
auth    required            pam_permit.so
Die anpassen nach:
1
auth    [success=2 default=ignore]  pam_unix.so nullok_secure
2
auth    optional            pam_exec.so expose_authtok /pfad/zu/script argumente
3
auth    requisite           pam_deny.so
4
auth    required            pam_permit.so

Aber aufpassen, bei success=N gibt N an, wie viele Einträge bei einem 
erfolgreichen login übersprungen werden. Das muss auf pam_permit.so 
springen, sonst sperrst du dich eventuell aus. Und auf keinen fall die 
pam_deny.so entfernen, sonst ist jeder login versuch erfolgreich!!!

Meine logging Anwendung und ein SSH patch kann man hier finden:
https://github.com/Daniel-Abrecht/honeypot

Der SSH patch braucht man, damit das Skript das eingegebene Passwort 
bekommt. Normalerweise ersetzt SSH bei ungültigen oder deaktivierten 
Usern vor dem Login das Passwort mit einem placeholdertext, damit der 
Login auch garantiert fehlschlägt, aber das Timeing gleich bleibt. Mein 
patch fügt statdessen einfach ein 0x01 byte vor dem Passwort ein.

Die Webseite hab ich aber noch nicht hochgeladen. Eigentlich ist alles 
nur HTML und JS und kann man einfach so von meinem  Server downloaden. 
Es gibt aber noch ein posix/cgi shell script, das die Daten der Seite 
übergibt mittels server-sent events. Im grunde ist es nur ein "echo 
headers" und ein 'tail -f -n 100 logfile | while IFS= read -r line; do 
echo "data: $line"; echo; done' oder so ähnlich.
#5873418
Lesenswert?

Zesar (Gast) schrieb:

>/var/log/auth.log war schonmal der richtige tipp. Dort sehe ich jetzt
>wundervolle Daten.
>Problem nur zwei. Ich würde jetzt gerne per Script jeweils den neusten
>Eintrag mitbekommen und zb per Mqtt versenden.

tail -f -n 0 /var/log/auth.log | while read line
      do
        if [[ $line = suchstring ]] #optionale Bedingung
        then
            <mqtt cmd $line>
        fi                   #optional Bedingung
    done


Die if-BEdingung ist nur nötig, falls man die Ausführung abhängig vom 
Inhalt der neuen Zeile machen will.
<mqtt cmd $line> ist enfach nur ein Platzhalter für deinen Code, den Du 
bei Erkennen einer neuen Zeile ausführen willst.
Muß wohl als Root bzw. mittels su/sudo ausgeführt werden, da 
/var/log/auth.log wohl nur von root lesbar.
#5873433
Lesenswert?

DPA (Gast) schrieb:

>> Kannst du das näher erläutern wie genau du das machst?

>Ich bin grad nicht zuhause, darum kann ich gerade nicht nachsehen.

>Das Senden der Mails mach ich mit einem Eintrag ganz am Ende der Datei
>/etc/pam.d/common-session:

Dazu muß aber PAM für die Authentication aktiviert/eingerichtet sein. 
Ist das inzwischen default bei Linux?
Gast #5873455
Lesenswert?

Frank M. schrieb:

> die Daten des Vormonats hervorkratzen. Wenn man mehr möchte, muss man
> sich wohl mit logrotate beschäftigen. /etc/logrotate.conf hilft hier
> weiter.

Wenn nur der letzte Vorgang ohne Historie interessiert der auch länger 
(u.U. Jahre) zurückliegen darf, lastlog.

Früher pre pam, evtl. auch heute noch hat man das in /etc/login.defs 
festlegen können FAILLOG_ENAB, LOG_OK_LOGINS, LASTLOG_ENAB, ...

---
Gast #5873590
Lesenswert?

Jens G. schrieb:
> Muß wohl als Root bzw. mittels su/sudo ausgeführt werden, da
> /var/log/auth.log wohl nur von root lesbar.
Sudo-Brechstange wirklich nötig? Mmn besser: die Gruppenzugehörigkeit 
des (nur-) lesenden users anpassen.

Zesar schrieb:
> Ich würde gerne ein "logging" script starten wenn sich ein User auf der
> Ssh console anmeldet
Ich weiss nicht was du am Ende erreichen möchtest, aber: Nur ein fauler 
Admin ist ein guter Admin... richte mal ein Auge auf:
https://de.wikipedia.org/wiki/Fail2ban
Gast #5875971
Lesenswert?

Zesar schrieb:
> Hallo
> Ich würde gerne ein "logging" script starten wenn sich ein User auf der
> Ssh console anmeldet. Also eigentlich sogar nur ein "echo username >>
> logdatei"
> Habt ihr ideen wie man das einrichten könnte?
> Rootrechte habe ich.


Die Leute hier im Forum rauchen manchmal gar Absonderliches. Nimm ihnen 
daher ihre kruden Vorschläge nicht übel.

Profis schreiben ein Skript in die /etc/ssh/sshrc.
Nachzulesen unter man sshd.
Gast #5876025
Lesenswert?

Diese Woche gelten die Tipps von letzte Woche nicht mehr.

Mit jedem Update wird wieder ein kleines bisschen auf systemd journalctl 
umgestellt. 2 Tage nachdem dein Script läuft, wird /var/log/auth.log 
nicht mehr existieren.

Solltest besser auch absonderliches Zeug rauchen und abwarten, bis die 
Umstellung endlich abgeschlossen ist.
Gast #5876119
Lesenswert?

Lästermaul schrieb:
> Mit jedem Update wird wieder ein kleines bisschen auf systemd journalctl
> umgestellt. 2 Tage nachdem dein Script läuft, wird /var/log/auth.log
> nicht mehr existieren.
>
> Solltest besser auch absonderliches Zeug rauchen und abwarten, bis die
> Umstellung endlich abgeschlossen ist.
Absonderliches Zeug rauchen und abwarten ok, mir kommt systemd weder ins 
Haus, noch auf die Server(m/w/d).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren