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` | \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 :-)
mail -s "Login on `hostname` from `who | \
awk '{print $5}'`" user@example.com
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.localangelegt und mit folgendem Inhalt
WHO_AKTUELL=`who -m | /usr/bin/awk '{print $6}'`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.
echo 'Login on' `hostname` `date` `who -m` | \
mail -s "Login on `hostname` from $WHO_AKTUELL" \ user@example.com
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.localan und füllen Sie mit dem folgenden Inhalt
setenv HOSTNAME `hostname`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.
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
"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.localangelegt und mit dem Inhalt
WHO_AKTUELL=`who -m | /usr/bin/awk '{print $6}'`gefüllt werden. Ist also nichts anderes als oben auch. Für die tcsh als Standard-Shell muss auch hier erst einmal die Datei
echo 'Login on' `hostname` `date` `who -m` | \
mail -s "Login on `hostname` from $WHO_AKTUELL" \ user@example.com
/etc/csh.login.localangelegt werden. Hier kommt als Füllung folgendes zum Einsatz
setenv HOSTNAME `hostname`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.
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
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.localanlegen und mit folgendem Inhalt füllen:
setenv HOSTNAME `hostname`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
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
echo 'Login on' `hostname` `date` `who` | \an die Datei
mailx -s "Login on `hostname` from `who | \
awk '{print $6}'`" user@example.com
/etc/profileangehä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/.cshangelegt und mit dem Inhalt
setenv HOSTNAME `hostname`gefüllt. Et voilà: It works ;-) Auch hier natürlich wieder mit "mailx" anstelle von "mail".
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
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
1 Kommentar:
Interessanter Artikel ...
Was funktionieren könnte, wäre die Auswertung und die Mail nicht direkt in der aktuellen Shell des vermeintlichen Users zu starten, sondern das ganze in einem Screen auszuführen. So würde die Auswertung beim Beenden der Sitzung trotzdem weiterlaufen und nicht durch den Disconnect gekillt werden.
Kommentar veröffentlichen