In der aktuellen Ausgabe des
Linux Magazins gibt es in der Rubrik "
Aus dem Alltag eines Sysadmins" mal wieder einen sehr interessanten Artikel von
Charly Kühnast.
Unter dem Titel "
Türspion: Bei Login Mail" beschreibt er dort, wie man seine Systeme so "konfiguriert", dass bei einer sich öffnenden Shell sofort eine Mail an eine festgelegte Mailadresse geschickt wird. Aus der Mail geht dann hervor, wer sich von welchem System aus eingeloggt hat.
Da er so leider nicht dazugeschrieben hat, welche Distribution(en) er einsetzt und ich zeitgleich festgestellt habe, dass dies so unter Produkten von
Novell,
openSUSE oder auch
Debian nicht direkt zu laufen scheint, hier die Kurzanleitung. Immer natürlich abhängig davon, welche Shells den Benutzer zugewiesen sind!
Charly spricht im Artikel davon, dass er den im Artikel erwähnten Einzeiler
echo 'Login on' `hostname` `date` `who` | \
mail -s "Login on `hostname` from `who | \
awk '{print $5}'`" user@example.com
in die systemweite "
bashrc" einträgt. Unter dem
SUSE Linux Enterprise Server,
openSUSE und
Debian funktioniert dies so allerdings nicht unbedingt. Entweder gibt es beim Einloggen bereits eine Fehlermeldung, die auch einen ungebetenen Gast hellhörig werden lassen würde oder aber die versendete Mail enthält nicht ganz die gewünschten Informationen in der Betreffzeile. Daher gehen wir das hier mal entsprechend für die einzelnen Distributionen durch :-)
Um im
SUSE Linux Enterprise Server einen wie im Artikel erwähnten Effekt für den Benutzer
root zu erwirken muss die Datei
/etc/bash.bashrc.local
angelegt und mit folgendem Inhalt
WHO_AKTUELL=`who -m | /usr/bin/awk '{print $6}'`
echo 'Login on' `hostname` `date` `who -m` | \
mail -s "Login on `hostname` from $WHO_AKTUELL" \ user@example.com
gefüllt werden. Wird die Variable "
WHO_AKTUELL" vorher nicht gesetzt, sondern der entsprechende Befehl mit in die
echo-Zeile gepostet, erscheint der Rechnername von dem aus der Login erfolgte nicht in der Betreffzeile der Mail. Dies würde jetzt für alle Logins funktionieren, bei denen der Benutzer die
bash als Standard-Shell hat.
Die normalen Benutzer erhalten bei mir zum Beispiel die
tcsh als Standard-Shell. Um auch diesen Fall mit abzudecken legen wir erst einmal die Datei
/etc/csh.login.local
an und füllen Sie mit dem folgenden Inhalt
setenv HOSTNAME `hostname`
setenv DATE `date`
setenv WHO `who -m`
setenv WHO_AKTUELL `who -m | /usr/bin/awk '{print $6}'`
echo 'Login on' $HOSTNAME $DATE $WHO | \
mail -s "Login on $HOSTNAME from $WHO_AKTUELL" \ user@example.com
Nachdem dies dann gespeichert ist, bekommen wir auch von diesen Benutzern beim Login eine entsprechende Mail-Benachrichtigung. "
user@example.com" steht hier natürlich jeweils für die Mail-Adresse, an die die Information gesendet werden soll.
"Normale" Benutzer berücksichtige auch auch deshalb, weil es ja vielleicht durchaus Systeme gibt (geben könnte), auf denen zum Beispiel ein Login des Benutzers "
root" komplett untersagt ist um vielleicht besser nachzuvollziehen, welcher Benutzer via "
su" zum Administrator geworden ist.
Kommen wir nun zu den
openSUSE-Produkten. Hier ist es eigentlich ähnlich, lediglich der
awk-Befehl unterscheidet sich im zweiten Fall ein wenig. Für bash als die Standard-Shell muss die Datei
/etc/bash.bashrc.local
angelegt und mit dem Inhalt
WHO_AKTUELL=`who -m | /usr/bin/awk '{print $6}'`
echo 'Login on' `hostname` `date` `who -m` | \
mail -s "Login on `hostname` from $WHO_AKTUELL" \ user@example.com
gefüllt werden. Ist also nichts anderes als oben auch. Für die
tcsh als Standard-Shell muss auch hier erst einmal die Datei
/etc/csh.login.local
angelegt werden. Hier kommt als Füllung folgendes zum Einsatz
setenv HOSTNAME `hostname`
setenv DATE `date`
setenv WHO `who -m`
setenv WHO_AKTUELL `who -m | /usr/bin/awk '{print $5}'`
echo 'Login on' $HOSTNAME $DATE $WHO | \
mail -s "Login on $HOSTNAME from $WHO_AKTUELL" \ user@example.com
Der/Die aufmerksame Leser/in wird hier das "
/usr/bin/awk '{print $5}'" bemerkt haben. Dies sorgt bei
openSUSE mit der
tcsh als Shell für die Ausgabe des Rechnernamens, von dem aus der Login erfolgte. Würden wir hier
$6 verwenden, wäre die Ausgabe leer.
Was Debian als Distribution angeht: Für Benutzer mit der
bash als Standard-Shell funktioniert es wie im Artikel selbst beschrieben. Für meine Benutzer, die die
tcsh als Standard-Shell benutzen musste ich die Datei
/etc/csh/login.d/csh.login.local
anlegen und mit folgendem Inhalt füllen:
setenv HOSTNAME `hostname`
setenv DATE `date`
setenv WHO `who -m`
setenv WHO_AKTUELL `who -m | awk '{print $5}'`
echo 'Login on' $HOSTNAME $DATE $WHO | \
mail -s "Login on $HOSTNAME from $WHO_AKTUELL" \ user@example.com
Naja, und wenn ich schon einmal dabei bin, kann ich mich ja auch noch "kurz"
Sun Solaris annehmen :-) Hier habe ich für die
bash als Standard-Shell einfach mal kurz die Zeile
echo 'Login on' `hostname` `date` `who` | \
mailx -s "Login on `hostname` from `who | \
awk '{print $6}'`" user@example.com
an die Datei
/etc/profile
angehängt. Wichtig ist hier anstatt dem Befehl "
mail" den Befehl "
mailx" zu verwenden, da die Betreffzeile ansonsten leer bleibt. Für Benutzer mit der
tcsh als Standard-Shell wird eine Datei
/etc/.csh
angelegt und mit dem Inhalt
setenv HOSTNAME `hostname`
setenv DATE `date`
setenv WHO `who -m`
setenv WHO_AKTUELL `who -m | awk '{print $6}'`
echo 'Login on' $HOSTNAME $DATE $WHO | \
mailx -s "Login on $HOSTNAME from $WHO_AKTUELL" \ user@example.com
gefüllt. Et voilà: It works ;-) Auch hier natürlich wieder mit "
mailx" anstelle von "
mail".
Ein kleines "Problem" tritt aber dennoch auf. Nutzt man zum Beispiel Skripte oder ähnliches, die per SSH mit SSH-Keys Befehle auf Zielrechnern ausgeführen, ist die Zeitspanne wohl so gering, dass es nicht reicht um zu schauen, von welchem Rechner der Login kommt. Also ein einfaches "
ssh who Rechnername" führt dazu, dass man zwar eine Meldung bekommt, dass dort was war, aber es geht aus der Mail nicht hervor, wer oder was es war. Hierfür habe ich auf die Schnelle so auch keine Lösung parat. Wird aber weiter untersucht.