Posts mit dem Label SLES werden angezeigt. Alle Posts anzeigen
Posts mit dem Label SLES werden angezeigt. Alle Posts anzeigen

Freitag, 18. Juni 2010

Bei Login Mail

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.

Freitag, 21. Mai 2010

Mondo Rescue

Zur Abwechslung mal wieder ein kleines aber feines Linux-/Unix-Tool für die Kommandozeile :-) Einen etwas ausführlicheren Artikel dazu gab es im Linux Magazin Admin Sonderheft 02-2010.

Bei Mondo Rescue handelt es sich um ein Tool, mit dem man aktuelle und laufende Systeme sichern kann. Dazu wird auch gleich noch ein entsprechendes Rettungssystem gebaut. Sprich: Ich kann die gesicherten Daten auf CD/DVD brennen und bekomme eine Boot-CD, mit der ich im Notfall die gebrannten (System-) Daten zurückspielen kann. Die zu sichernden Daten kann ich entweder direkt auf CD/DVD schreiben lassen oder aber auf andere Medien. Neben Bandlaufwerken praktischerweise auch direkt auf NFS-Volumes. Die Rettungs-Boot-CD selbst wird unter /var/cache/mindi abgelegt.

Tests mit diesem System verliefen im Großen und Ganzen zufriedenstellend. Lediglich auf einer älteren openSUSE 11.0 64-Bit-Installation wollte das System definitiv laufen. Es gab immer nur die Fehlermeldungen:
test:~ # mondoarchive -V -On nfs://192.168.1.1:/Backup/test -9 -E "/mnt /var/log"
Initializing...
See /var/log/mondoarchive.log for details of backup run.
Checking sanity of your Linux distribution
---promptdialogYN---1--- Your kernel has no ramdisk support. That's mind-numbingly stupid but I'll allow it if you're planning to use a failsafe kernel. Are you?
---promptdialogYN---Q--- [yes] [no] ---
--> yes
Done.
NFS share is not mounted. Please mount it.
Errors were detected in the command line you supplied.
Please review the log file - /var/log/mondoarchive.log
Execution run ended; result=1
Type 'less /var/log/mondoarchive.log' to see the output log
test:~ #
Die Optionen von mondoarchive stehen in diesem Fall für
-On Sicherung auf Netzlaufwerk
-9 Höchste Komprimierungsstufe
-E Diese Verzeichnisse von der Sicherung ausnehmen
-V Backup prüfen
Auf allen anderen System (Debian, openSUSE, SLES, Ubuntu; egal ob 32- oder 64-Bit) lief es aber ohne Probleme. Der Test auf einem Solaris 10 steht dagegen noch aus. Zudem gibt es mit -s noch eine Option, bei der man die Größe des CD-/DVD-Speichermediums angeben kann.