Like to be free? ... then: Fight for Freedom
[ Blacky Office Protocol v0.10 (c) Copyright 2000-2002 Andreas Hofmeier ]
Blacky Office Protocol
Dieser Server bzw. Klient soll den Datenaustausch zwischen Server
und Klient vereinfachen. Zum Beispiel das Abholen größerer mengen
eMail oder Updaten der Homepage
WARNUNG: Die SockMD5Auth Authentication Methode wurde mit ***
*** Multiple-Sessions-Angriff geknackt! ***
Copyright (C) Andreas Hofmeier
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Grundlegende Funktion / Idee
Ein leidiges Spiel, man hat Daten auf einem Server, an den man aus
Sicherheitsgründen nicht mal eben ran kann und möchte Daten mit
diesem Austauschen. Das geht über Abholen von eMail, Runterladen der
Log-Files oder Updaten seiner Homepage. Diese drei Beispiele werde ich
weiter unten genauer beschreiben.
Übliche Vorgehensweise: Auf ihrem Klient starten Sie Skript/Programm,
welches irgendwelche Daten zusammensucht (oder auch nicht) um diese
dann zum Server zu schicken. Meistens Reicht es nicht die Daten zum
Server zu schicken, diese müssen meistens noch verteil oder
ausgepackt werden. Aus diesem Grund gibt es BOP. Hat ihr Skript die
Daten zusammen, ruft es den BOP-Klienten auf, welcher sich darum
kümmert, das die Daten (Liegen in <Datei>) zum Server kommen. Brauchen
Sie die UpLoad-Funktion nicht, sorgen Sie dafür das <Datei> nicht
existiert. Hat der BOPD die <Datei> empfangen startet er ein Skript
(welches in der /blacky/bop.conf angegeben wird). Diese Skript bekommt
als Parameter die <Datei>, natürlich die auf dem Server. Wurde nicht
upgeloadet, zeigt der erste Parameter $1 auf eine Datei, welche noch
nicht da ist. Hat das Skript nun seine Arbeit verrichtet, so schreibt
es alle Daten, welche zum Klienten müssen in die Datei $1. Der BOPD
kümmert sich nun darum, das die in der Datei $1 befindlichen Daten zum
Klienten kommen, und dort in <Datei> geschrieben werden. Waren in $1
auf dem Server keine Daten, sind auf dem Klienten in <Datei> auch
keine Daten. Keine Daten bedeutet, Datei oder $1 ist nicht vorhanden!
Beim Übertragen der Daten, komprimiert BOP diese mit gzip. $1, auf dem
Server ist "/tmp/.bopd.<PID vom BOPD>ok".
Das Abholen von eMails wird durch ein interne Skript erledigt. Wird in
der /blacky/bop.conf "eMail" als Skript angegeben, wird das interne
eMail-Skript aktiviert. Folgendermalßen geht es vor:
1.) cat /var/spool/mail/.<loginname> >> /var/spool/mail/<loginname>
2.) mv /var/spool/mail/<loginname> /var/spool/mail/.<loginname>
3.) compressing
4.) übertragen
Wenn Fehler beim Übertragen
5.) cat /var/spool/mail/.<loginname> >> /var/spool/mail/<loginname>
Konfiguration und Anwendungsbeispiele
#################### SERVER ####################
Hm, normalerweise sind meine Server-Programme in /blacky/vt.
mkdir -p /blacky/vt/ # also zuerst dieses Erzeugen
cd ~
unzip <woauchimmer>/bop.zip
cp ~/bin/bop* /blacky/vt # kopieren des Server-Programmes
Server wird vom SuperServer (inetd) gestartet
in /etc/services
bop 65140/tcp
in /etc/inetd.conf
bop stream tcp nowait root /blacky/vt/bopd2
Anlegen der Konfigurations-Datei für den BOP-Server:
/blacky/bop.conf
Format:
<LoginName>|<Passwort>|<Skript>[|<errorSkript>]
...
z.B.
***
homepage|abcd|/blacky/vt/bop_homepage
log|abcd|/blacky/vt/log|/blacky/vt/bop_logerr
root|abcd|eMail
***
Die erste Zeile bewirkt, das das Skript /blacky/vt/homepage mit dem
Parameter der Datei ausgeführt wird. Es kann kein Fehler bei der
Übertragung von Daten vom Server zum Klienten auftreten, da keine
Daten Übertragen werden.
Die zweite Zeile bewirkt, das das Skript /blacky/vt/log mit dem
Parameter der Datei ausgeführt wird. Tritt ein Fehler beim übetragen
der Daten vom Server zum Klienten auf, wird /blacky/vt/bop_logerr
aufgerufen
Die dritte Zeile bewirkt, das ein internes Skript die eMails vom
Root-Account (/var/spool/mail/root) zum Klienten überträgt. Tritt ein
Fehler auf, werden Die Daten wieder in das normale eMails-File
geschrieben... siehe weiter oben.
/blacky/vt/bop_homepage # Verteilen der Homepage-Dateien
***
#!/bin/sh
HOMEPAGE=/homepage #Verzeichnis Ihrer Homepage
cd $HOMEPAGE
unzip -o $1 2> /dev/null > /dev/null # Auspacken der Dateien,
# überschreiben ohne Rückfragen
chmod a+r,og-w . -R # Read-Zugriff für Alle
chmod a+rx $(find . -type d)
rm $1 # Hm, man sollte die Datei löschen
# da BOP sonst mein, diese Datei
# müßte zum Klienten übertragen werden
***
/blacky/vt/bop_log # Einsammeln der Neu dazugekommenden LOG-Daten
***
#!/bin/sh
HN=$(hostname)
test -d /tmp/.log || { # Sicherstellen, das
# Arbeitsverzeichnis da ist
mkdir -p /tmp/.log
}
cd /tmp/.log
test -e .error || {
rm -f * 2> /dev/null # Alte LOG-Daten Löschen,
} # nur wenn letztes mal
rm -f .error 2> /dev/null > /dev/null # kein Fehler aufgetreten
# ist
blfile /var/log/messages >> $HN.messages # Alle neuen Daten im
# LOG.File abspeichern
# Was läuft auf dem Server
(
date;
echo "### Prozesse auf dem Server ###";
pstree -alpu;
echo "### Freier Festplattenspeicher ###";
df -t ext2 # -t ext2: Nur EXT2-FileSysteme, um Langsame NFS-Zugriffe
# zu vermeiden
echo "### Freier Hauptspeicher ###";
free;
echo "### Wer hat wieviel eMail ###";
ls -Axl /var/spool/mail/;
) > $HN.sysinfo
# ... Hier ist Platz für Weitere LOG-Files
# Alles Zusammenzippen und in die zur Übertragung vorgesehene Datei
# verschieben
zip -9 $1 *
# Hm, zip meint .zip an den Dateinamen anhängen zu
# müssen, was natürlich scheiße ist...
test -e $1.zip && mv $1.zip $1
***
/blacky/vt/bop_logerr # Fehler beim Transfer SERVER>KLIENT aufgetreten
***
#!/bin/sh
touch /tmp/.log/.error
***
Hm, das Programm blfile gibt den, sein dem letztem Start,
dazugekommenden Teil einer Datei aus. (Programm von mir)
Das eMail-Skript ist intern! Funktionsweise weiter oben. Die eMails
können Sie auch mit eigenden Skripten abholen
#################### Klient ####################
Updaten den Homepage
***
#!/bin/sh
HOMEPAGE=/homepage # Verzeichnis in dem Ihre
# Homepage liegt
TIMEDATEFILE=$HOME/.homepagetimedate # Wann wurde das Skript zum
# letztem mal aufgerufen
UPDATEZIPFILE=/tmp/.hp.zip # Datei in der Vorübergehend
# die neuen/geänderten Daten
# abgelegt werden
test -e $TIMEDATEFILE || { # Skript wurde noch nie aufgerufen
touch -t 070823201981 $TIMEDATEFILE
}
# Suche alle Dateien, welche seit dem letztem Aufruf (ober seit meinem
# Geburtstag (08.07.1981)) angelegt oder geändert wurden. Und zippe
# diese Zusammen
cd $HOMEPAGE
zip -9 $UPDATEZIPFILE $(find . -newer $TIMEDATEFILE)
# Hm, zip meint schlauer als ich zu sein, und hängt an den Dateinamen ".zip" an,
# was dazu führt, das bopd die Datei nicht mehr findet.
test -e $UPDATEZIPFILE.zip && {
mv $UPDATEZIPFILE.zip $UPDATEZIPFILE
}
# Übertrage Daten zum Server, Starte Skript...
bop <ServerName> 65140 homepage abcd $UPDATEZIPFILE
# Hm, <ServerName> Sollte richtig sein...
***
Abholen der LOG-Daten
***
#!/bin/sh
LOG=/log # Verzeichnis in dem Ihre
# LOGdaten liegen sollen
FILENAME=/tmp/.log.zip # Hier her werde die LOG-Daten
# runtergeladen
test -d $LOG/new || {
mkdir -p $LOG/new
}
cd $LOG/new
# Starte Skript auf Server, Lade Daten runter
bop <ServerName> 65140 log abcd $FILENAME
# Hm, <ServerName> Sollte richtig sein...
# Auspacken der LOG-Daten, alte Löschen
rm -f *
unzip $FILENAME
rm $FILENAME
# Die neuen LOG-Daten an die Alten anfügen...
for i in *; do
cat ${i} 2> /dev/null >> ../${i};
done
rm ../*sysinfo # Hm, ist nicht sinnvoll diese Dinger aufzuheben...
# In /log/new alle Neuen LOG-Daten
# In /log alle LOG-Daten
***
Abholen der eMails
1.) Anlegen eines Localen USERs für BOP:
useradd -d / -c "Nur um die über BOP abgeholten eMails zu verteilen" bopmail
passwd bopmail
***
#!/bin/sh
FILENAME=/tmp/.bopmail
# Starte Skript auf Server, Lade Daten runter
bop <ServerName> 65140 root abcd $FILENAME
# Hm, <ServerName> Sollte richtig sein...
cat $FILENAME >> /var/spool/mail/bopmail
rm -f $FILENAME
# Verteilen der eMail, local
fetchmail -af ~/.fetchmailrc.bopmail
***
~/.fetchmailrc.bopmail
poll localhost proto pop3 user bopmail password <Passwort ihres BOP-Mail-Acconts> is <an welchen User eMails senden>
Hm, popd sollte laufen
***
poll localhost proto pop3 user bopmail password bopmail is andreas
***
############################## HINWEISE ######################
Ich weiß meine Künste im Dokumentationsbereich sind nicht überragend,
Sorry. Wenn es noch Fragen gibt, könnt ihr ja Mailen...
HINWEISE:
Die Skripte müssen Sie natürlich ihren lokalen Gegebenheiten anpassen!
Sorgen Sie immer dafür, das in /tmp genug Speicher frei ist.
Ihrer Kreativität sind keine Grenzen gesetzt!
bopd ist die alte Version. bopd2 die neue, welche das SockMD5Auth()
Sicherheitsprinzip verwendet, also das Passwort zum Login nicht mehr
übertragen muß. Der Klient unterstützt beide Server-Versionen. Ich
empfehle bopd2!
Stellen Sie sicher, dass alle von BOP (und von ihren Skripten)
verwendeten Programme zur verfügung stehen: u.a. md5sum, gzip, cat,
mv, /bin/bash, chown, chmod
Have a lot of fun...
Siehe auch:
ACHTUNG: Dieses Programm, bzw. dieser Test unterliegt der GPL!