E-Mail Benachrichtigung bei Anmeldung
Diese Konfiguration bezweckt, dass Du per E-Mail benachrichtigt wirst, sobald sich jemand erfolgreich am Server angemeldet hat. Das ist eine optionale Einstellung und besonders für Sicherheitsfanatiker interessant.
Ein paar Aufgaben kommen dafür schon zusammen, aber insgesamt ist das keine große Sache. Wir werden Sendmail installieren, eine Shell Datei anlegen und diese beim SSH Dienst bekannt machen.
Wenn Dir das nicht wichtig ist, kannst Du das auch überspringen.
Sendmail installieren
Damit unser Server in der Lage ist, E-Mails zu versenden, installieren wir den Mail Transfer Agent Sendmail.
Das Paketverwaltungssystem von Linux (apt
) schauen wir uns im nächsten Kapitel Linux Server updaten genauer an, daher führen wir die Installation an dieser Stelle ohne weitere Erklärung aus.
Sendmail mit apt
installieren:
__$ sudo apt install sendmail -y
Nach der Installation führen wir sendmailconfig
aus und bestätigen alle Einstellungen mit y
:
__$ sudo sendmailconfig
Alles mit y
bestätigen:
Configure sendmail with the existing /etc/mail/sendmail.conf? [Y] y
Reading configuration from /etc/mail/sendmail.conf.
Validating configuration.
Writing configuration to /etc/mail/sendmail.conf.
Writing /etc/cron.d/sendmail.
Configure sendmail with the existing /etc/mail/sendmail.mc? [Y] y
Updating sendmail environment ...
...
Reload the running sendmail now with the new configuration? [Y] y
...
Mit dieser Zeile kannst Du Sendmail testen. Setze nur Deine E-Mail-Adresse anstelle von mail@example.com
ein:
__$ echo "Subject: sendmail test" | /usr/sbin/sendmail -v mail@example.com
Shell Datei anlegen
Wir benötigen eine ausführbare Datei, die angestoßen wird, sobald eine Anmeldung am Server stattgefunden hat. Diese Shell Datei trägt ein paar Daten zusammen, wie zum Beispiel die IP des Klienten, Serverzeit, usw. und versendet diese dann mit Sendmail an eine festgelegte E-Mail-Adresse.
Wir erstellen erstmal die Datei /etc/ssh/login-mail-notification.sh
:
__$ sudo nano /etc/ssh/login-mail-notification.sh
Folgendes kopieren wir hinein:
/etc/ssh/login-mail-notification.sh
#!/bin/sh
if [ "$PAM_TYPE" != "close_session" ]; then
ADMINMAIL=mail@example.com
IP="$(echo $SSH_CONNECTION | cut -d " " -f 3)"
PORT="$(echo $SSH_CONNECTION | cut -d " " -f 4)"
SUBJECT="SSH on $(hostname) - $PAM_USER@$IP:$PORT - IP: $PAM_RHOST"
sudo /usr/sbin/sendmail $ADMINMAIL <<EOF
Subject: $SUBJECT
$(date +"%e %b %Y, %a %r")
------------------------------------
$(env)
EOF
fi
Ersetze die Beispieladresse (mail@example.com
) mit Deiner E-Mail-Adresse. Und wie gewohnt, speichern und schließen (STRG+s
, STRG+x
).
Die Bedingung ist also if [ "$PAM_TYPE" != "close_session" ]
. Was so viel bedeutet wie: wenn der $PAM_TYPE
nicht close_session
ist. Dann ist wohl eine Anmeldung erfolgt.
Die Datei /etc/ssh/login-mail-notification.sh
ist im Grunde nur eine Textdatei. Um sie ausführbar zu machen, führen wir folgenden chmod
Befehl aus:
__$ sudo chmod +x /etc/ssh/login-mail-notification.sh -v
Shell Datei vom SSH Dienst ausführen lassen
Das PAM Modul (Pluggable Authentication Modules) ist ein zentrales Authentifizierungssystem unter Linux. Diesem teilen wir mit, wann es unsere Datei ausführen soll.
Authentifizierungsdienste haben eine eigene Konfigurationsdatei unter PAM. Öffnen wir also die zuständige Datei für SSH:
__$ sudo nano /etc/pam.d/sshd
Und ergänzen folgende zwei Zeilen an das Ende:
Auszug aus /etc/pam.d/sshd
# sendmail on ssh login
session optional pam_exec.so seteuid /etc/ssh/login-mail-notification.sh
Die erste Zeile ist nur ein Kommentar (# sendmail on ssh login
).
Die zweite Zeile führt bei Anmeldung die Datei /etc/ssh/login-mail-notification.sh
aus. Wenn die Bedingung if [ "$PAM_TYPE" != "close_session" ]
zutrifft, dann wird das ausgeführt, was im Bedingungsblock steht. Sendmail sendet dann die E-Mail mit den Umgebungsvariablen ($(env)
) raus.
Die vollständige Datei sieht dann so aus:
/etc/pam.d/sshd
# PAM configuration for the Secure Shell service
# Standard Un*x authentication.
@include common-auth
# Disallow non-root logins when /etc/nologin exists.
account required pam_nologin.so
# Uncomment and edit /etc/security/access.conf if you need to set complex
# access limits that are hard to express in sshd_config.
# account required pam_access.so
# Standard Un*x authorization.
@include common-account
# SELinux needs to be the first session rule. This ensures that any
# lingering context has been cleared. Without this it is possible that a
# module could execute code in the wrong domain.
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
# Set the loginuid process attribute.
session required pam_loginuid.so
# Create a new session keyring.
session optional pam_keyinit.so force revoke
# Standard Un*x session setup and teardown.
@include common-session
# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
# Print the status of the user's mailbox upon successful login.
session optional pam_mail.so standard noenv # [1]
# Set up user limits from /etc/security/limits.conf.
session required pam_limits.so
# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
session required pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
session required pam_env.so user_readenv=1 envfile=/etc/default/locale
# SELinux needs to intervene at login time to ensure that the process starts
# in the proper default security context. Only sessions which are intended
# to run in the user's context should be run after this.
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
# Standard Un*x password updating.
@include common-password
# sendmail on ssh login
session optional pam_exec.so seteuid /etc/ssh/login-mail-notification.sh
E-Mail-Benachrichtigung testen
Fehlt noch der Test. Dazu melden wir uns einfach ab ...
__$ logout
... und wieder an.
Wenn alles richtig konfiguriert ist, solltest Du nach der Anmeldung eine E-Mail von Deinem Server bekommen.