Linux Server setup

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.