Als schnelle Lösung ohne Programmierung eines eigenen TCP-Servers oder Wrappers lässt sich das im Polling Modus über ein Bashskript realisieren.
Ich habe mir einmal die Zeit genommmen ein bash skript zu schreiben, das als Warnmelder dient und sich meldet sobald sich Fremde auf den Rechner einloggen, ganz gleich ob über die alten rlogin-Befehle oder über ssh. Genutzt werden dabei die Befehle who, xterm. sleep und der dialog Befehl. Das ganze ist so angelegt das sich das Fenster öffnet und nach einer Weile wieder verabschiedet um zu vermeiden das der Desktop mit Warnmeldungen überschwemmt wird, falls man den Rechner für kurze Zeit verlässt. Daher wiederholen sich die Nachrichten solange wie Fremde eingeloggt sind und enden erst wenn das Programm gestoppt wird oder die Verbindung gestoppt wird beispielsweise mir rcsshd stop.
Es gibt sicher elegantere Möglichkeiten mit perl und tk. Dieses Skript soll aber gleichzeitig didaktischen Zwecken genügen und dient als Beispiel für den Umgang mit xterm, dialog, sleep und who. Es zeigt, wie sich das Problem mit klassischen bash-Befehlen lösen lässt.
foreignguard:
Code:
#!/bin/sh
# Copyright (c) 2004 gaw
#
# script using dialog, who and xterm to popup a alert box if foreign client login
if [ "$1" = "--help" -o "$1" = "-h" ]; then
cat<<EOT
usage $0 [KEEPING_TIME] [POLLING_TIME]
$0 using "dialog", "who", "sleep" and "xterm" to pop up a alert box when a foreign client log in. It is recommandable to start this script in the background (&).
KEEPING_TIME: period (sec) the messagebox stay on the desktop
POLLING_TIME: period (sec) after $0 is looking for foreign access
EOT
exit
fi
if test -n "$2" ; then
POLLING_TIME=$2
else
POLLING_TIME=12
fi
if test -n "$1" ; then
KEEPING_TIME=$1
else
KEEPING_TIME=5
fi
while test 1; do
ACCESS=`who | grep -v "\(console\)" | tr -s " " ":" | grep "(" | tr -d ")" | tr -d "("`
for i in $ACCESS;
do
if test -n $i ; then
USER=`echo $i | cut -d ":" -f1`
TERMINAL=`echo $i | cut -d ":" -f2`
MONTH=`echo $i | cut -d ":" -f3`
DAY=`echo $i | cut -d ":" -f4`
HOUR=`echo $i | cut -d ":" -f5`
MINUTE=`echo $i | cut -d ":" -f6`
HOST=`echo $i | cut -d ":" -f7`
TIME="$MONTH $DAY $HOUR:$MINUTE"
MESSAGE="\Zb\Z1ALERT! \Zn At $TIME user $USER log in from $HOST"
xterm +sb -geometry 65x7 -title ALERT! -e dialog --colors --no-shadow --sleep $KEEPING_TIME --infobox "$MESSAGE" 100 100 &
fi
done
sleep $POLLING_TIME
done
Die Benutzung ist frei, jede Benutzung erfolgt aber ausdrücklich auf eigenes Risiko, für unmittelbare oder mittelbare Schäden wird jegliche Haftung auch Dritten gegenüber ausgeschlossen.
Unter Linux mit der Maus kopieren, in einen Editor kopieren und als foreignguard abspeichern.
Mit
die entsprechenden Rechte setzen und im Hintergrund starten
wenn einem die Verweildauer der Warnmeldung auf dem Desktop zu kurz oder zu lang erscheint oder die Abstände verändern will in denen das Skript überprüft ob sich jemand einloggt, kann er das durch die Parameter
keeping time und
polling time verändern.
Beispiel für 4 Sekundenwarnmeldung und erneutes Nachfragen nach 2 Sekunden:
Viel Spaß beim Testen.
mfG
gaw