PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : proftp und benachrichtigung per email



Seiten : [1] 2

boxa
09.07.02, 13:57
Hallo Experten,

ich habe einen Proftp Server im Einsatz. Gibt es eine Möglichkeit, dass nach einem Dateneingang, automatisch eine Email versendet wird?

maus66
11.07.02, 08:59
Ich glaube nicht, ich kenn nur die Möglichkeit einen Logsurfer
aufzubauen, habs aber selber noch nicht ausprobiert
Vielleicht kannst Du auch ein Perlscript schreiben, da gibt es eine
Möglichkeit zu schauen, ob Dateien oder Verzeichnisse leer sind.
Gruss Maus66

Harry
11.07.02, 13:26
Hallo,

Du kannst Dich direkt beim Upload neuer Nachrichten benachrichtigen lassen, wenn Du ein wenig Shell (oder was auch immer) strickst.

Folgendes Shellskript als Daemon im Hintergrund gestartet, läuft permanent und tut genau, was Du erwartest:

#!/bin/bash

ADMIN=admin@domain.de
XFERLOG=/var/log/xferlog

tail -f $XFERLOG | while read line
do
if [ `echo $line | cut -d" " -f 12` == "i" ]; then
infile=`echo $line | cut -d" " -f 9`
echo $infile | mail -s "FTP-Upload" $ADMIN
fi
done

Das Skript überprüft jeden neuen Eintrag im FTP-Transferlog auf das direction-bit; falls dieses den Wert "i" annimmt, dann ist ist ein Upload erfolgt und das Skript sendet den Dateinamen per Mail an den Admin.

Harry

boxa
11.07.02, 14:15
Danke. Ich hab das Script gleich ausprobiert. Dazu habe ich das script erst mal ganz normal gestartet. Es ist aber nichts passiert. Der Prompt kehrt nicht mehr zurück auch wenn man ewig wartet. Weißt Du an was das liegen kann?

Harry
11.07.02, 14:48
Hallo,

wenn Du das Skript im Terminal startest, dann läuft es halt, bis Du den Prozeß wieder unterbrichst. Deswegen siehst Du auch nicht, dass etwas passiert, da der Prozeß ja auch keine Ausgaben auf stdout erzeugt.

Du kannst den Prozeß am einfachsten irgendwo in Deinen Startupskripten (beispielsweise /etc/init.d/boot.local) aufrufen. Dann wird er beim Hochfahren des Systems in Hintergrund gestartet und verrichtet unbemerkt seinen Dienst.

btw: In einem Terminal kannst Du den Prozeß auch direkt mit dem "&" in den Hintergrund legen:

./skript.sh &

Harry

boxa
11.07.02, 15:08
so wie ich das Script gestartet habe, müssten doch trotzdem Mails verschickt werden. Das passiert aber nicht.

Harry
11.07.02, 15:39
Hallo,

1. das Skript ist ja nur ein Beispiel
2. mußt Du ggf. die Variablen anpassen (insbesondere Mailadresse)
3. sollte Dein Mailer auf dem FTP-Host korrekt konfiguriert sein
4. bei mir hat es auf ner SuSE 7.3 in der Standardinstallation des ProFTPD genau so funktioniert.

Warum es bei Dir jetzt keine Mails verschickt, kann ich so leider nicht sagen. Die Ursachen können vielfältig sein.

Läuft Dein Mailer vernünftig?
Hast Du in der Konfiguration überhaupt das TransferLog eingerichtet?
Wenn ja, wie schaut so eine Logzeile bei Dir aus?

Harry

boxa
11.07.02, 16:11
So sieht eine Zeile in der Logdatei aus:
Tue Jul 2 08:59:16 2002 0 81.17.106.126 307200 /home/ftp/kunde1/cip3.pdf b _ i r kunde1 ftp 0 * c


Ich habe Redhat 7.2 und Qmail als Mailserver. Die Emailadresse, die ich angegeben habe befindet sich direkt auf diesem Server. In der Mailqueue liegt auch nichts. D.h. doch eigentlich, dass überhaupt nichts versendet.

Vielen Dank für Deine Antorten

Harry
11.07.02, 17:49
Hallo,

also das Logfile können wir jetzt als mögliche Fehlerquelle weitestgehend ausschließen; es hat genau das erwartete Format.

Ich vermute mal, dass das Problem doch irgendwie am Mailer liegt.

Bekommst Du denn eine Mail, wenn Du auf der Kommandozeile:

echo testestest | mail -s "irgendein Betreff" <DeineMailAdresse>
eingibst?

Was sagt das Maillog dazu? Wird die Mail vielleicht irgendwie an ein Relay versendet? Oder lokal an den Postmaster?

btw: qmail kenne ich leider nicht.

Harry

boxa
12.07.02, 08:06
Nochmals vielen Dank für deine Hilfe.

Ich habe den Befehl ausprobiert. Die Emails kommen einwandfrei an!
Als Absender steht root@datentransfer.datentransfer
datentransfer ist der Hostname. Wie kann man eine andere Absenderadresse angeben?

Die Email wir an einen lokalen Account geschickt. Es funktioniert aber auch nach draußen, in die große weite Welt!

Außerdem habe ich die cut Befehle einzeln mit meiner Logdatei ausprobiert. Es wurde das richtige Ergebinis geliefert

Qmail soltest Du dir mal anschauen. Es gibt etliche Zusatzpakete für den Mailer. Wenn Du alles per Hand installierst brauchst Du ewig. Es gibt ein Installationsprogramm unter www.obua.org. Das solltest Du Dir mal anschauen, es ist genial einfach. Das gute bei Qmail ist, dass die BEnutzer nicht als Benutzer im System vorhanden sein müssen. Man kann Qmail auch an eine DB binden. Außerdem ist in dem Installationsprogramm ein Webmailer, ein Admin Tool zum Verwalten der Accounts pro Domain und alles zum Anlegen für Mailinglisten.

boxa
19.07.02, 14:23
@harry

Nochmals vielen Dank, die Sache geht jetzt. Ich habe das Script abgeschriebenund ' mit &acute; vertauscht!!!
Das sind schon ärgerliche Sachen.

Harry
19.07.02, 17:56
Schön, dass es jetzt läuft und ich sogar noch eine Rückmeldung von Dir bekomme <freu> :)

Harry

onetwo
09.08.02, 21:20
feine sache das script, genial!!

besteht eventuell auch die möglichkeit nach user zu loggen? oder nach verzeichnis?

danke für die info

Roman

boxa
12.08.02, 07:43
HAllo !

Ich habe das Script noch etwas ergänzt. Man kann jetzt beliebig viele Emüfängeradressen angeben. Außerdem wird in der Email der Dateiname und der Pfad angegeben.


#!/bin/bash

# ftp_watchdog
# automatische Benachrichtigung nach FTP Dateneingang
# Version 1.1
# 22. Jul 02

# zum Hinzufuegen eines neuen Empfaenger bitte Array
# ergaenzen:
# Emailverteiler
emailAdr[0]="tester@xyz.de"
emailAdr[1]="hans@xyz.de"
...

j=0

# Anzahl der Elemente im Array
number=${#emailAdr }

# Pfad zur PROFTP Logdatei
XFERLOG='/var/log/proftpd/proftpd.xfer_log'


tail -f $XFERLOG | while read line
do
if [ `echo $line | cut -d" " -f 12` == "i" ]; then
infile=`echo $line | cut -d" " -f 9`

while [ $j -lt $number ]
do
echo Neue Daten sind angekommen: $infile | mail -s "FTP-Dateneingang" ${emailAdr[j]}
j=$[$j + 1]
done
#Ruecksetzen des Zaehlers
j=0
fi
done



Gruß

boxa

onetwo
13.08.02, 07:33
hallo boxa, hallo forum,

das script ist spitze, ist es auch möglich nach user zu loggen?
oder nach session?

hab das problem wenn ein user seine website updated bekomm ich etwa 200-500 mails und das beschäftigt den mailserver dann bis in die nacht ;)

grüße und danke

Roman

Harry
13.08.02, 19:08
Hallo Roman,

da der angemeldete User ebenfalls in jeder Logzeile auftaucht, kann dieser Wert auch beliebig ausgewertet werden.

Nach dem Muster obigen Skriptes bekommst Du den User beispielsweise wie folgt:


FTPUSER=`echo $line | cut -d" " -f 14`

Wie Du diesen Wert dann weiter verarbeitest, bleibt alleine Deiner Phantasie und Deinen technischen Möglichkeiten überlassen.

Harry

charlie
30.08.02, 10:18
Hi,

wenn ich das Skript mit


./skript.sh &

starten will kommt immer



horst:~ # ./skript.sh &
[1] 2407
: No such file or directory
[1]+ Exit 127


Was mach ich falsch?

charlie

P.s. oder beim ersten kleinen Skript kommt das ???




horst:~ # ./pro.sh
bash: ./pro.sh: bad interpreter: No such file or directory
horst:~ #

boxa
30.08.02, 12:01
wenn du das script so aufrufst musst du im ordner sein, in dem das script liegt.


Andere Ursache:
überprüf mal die Dateirechte!!

charlie
30.08.02, 13:04
Hi,

:(
Das Dateirecht sieht so aus

-rwxrwxrwx 1 root root 261 Aug 30 13:09 pro.sh
-rwxrwxrwx 1 root root 704 Aug 30 12:02 pro1.sh

und in dem Skript habe ich nur den MailAddy verändert. Im gleichen Verzeichnis ist schon klar müßte doch auch im /root gehn?

Danke schon mal :p

charlie :confused:

boxa
30.08.02, 13:14
stimmt der pfad zur Logdatei

charlie
30.08.02, 13:21
Ja stimmt die habe ich geändert auf

XFERLOG='/var/log/xferlog'

gelogt wird auch!



horst:~ # less pro1.sh
#!/bin/bash

# ftp_watchdog
# automatische Benachrichtigung nach FTP Dateneingang
# Version 1.1
# 22. Jul 02

# zum Hinzufuegen eines neuen Empfaenger bitte Array
# ergaenzen:
# Emailverteiler
emailAdr[0]="abc@dau.de"


j=0

# Anzahl der Elemente im Array
number=${#emailAdr }

# Pfad zur PROFTP Logdatei
XFERLOG='/var/log/xferlog'


tail -f $XFERLOG | while read line
do
if [ `echo $line | cut -d" " -f 12` == "i" ]; then
infile=`echo $line | cut -d" " -f 9`

while [ $j -lt $number ]
do
echo Neue Daten sind angekommen: $infile | mail -s "FTP-Dateneingang" ${emailAdr[j]}
j=$[$j + 1]
done
#Ruecksetzen des Zaehlers
j=0
fi
done




charlie :ugly:

Harry
30.08.02, 13:22
Hmmm,

es scheint richtig problematisch zu sein, einfach das Skript per Cut&Paste zu übernehmen.
Im Gegensatz dazu gibts beim Abtippen laut Murphy immer Fehler und das ist wohl auch hier die Ursache für die Fehlermeldungen.

Zumindestens die Meldung "bad interpreter" deutet auf eine syntaktisch falsche She-Bang-Zeile hin. Die muß genau so aussehen:


#!/bin/bash

Ohne Leerzeichen und halt insgesamt unverändert.

Die andere Fehlermeldung deutet auf einen weiteren Vertipper beim Namen des Logfiles hin - boxa hat das bereits angemerkt.

Sorry, aber das korrekte Abtippen können wir hier leider niemanden beibringen :D

Harry

Harry
30.08.02, 13:26
Hallo Charly,


Original geschrieben von charlie
Ja stimmt die habe ich geändert auf

[CODE]

XFERLOG='/var/log/xferlog'


benutz' anstelle der einfachen Anführungszeichen die doppelten. Man weiß sonst nie genau ob da nicht zufällig die Anführungszeichen für eine Kommandosubstitution gemeint sind.

Harry

boxa
30.08.02, 13:29
hast Du zugriffrechte auf die Logdatei bzw. deren Verzeichnis?

charlie
30.08.02, 13:36
HI,

sorry habe jetzt auch noch mal die Rechte von der Logdatein geändert.
Leider kein Erfolg. :mad:

Noch mal die Datei


horst:~ # ./pro1.sh
: No such file or directory
horst:~ # less pro1.sh
#!/bin/bash

# ftp_watchdog
# automatische Benachrichtigung nach FTP Dateneingang
# Version 1.1
# 22. Jul 02

# zum Hinzufuegen eines neuen Empfaenger bitte Array
# ergaenzen:
# Emailverteiler
emailAdr[0]="xxxxx@web.de"


j=0

# Anzahl der Elemente im Array
number=${#emailAdr }

# Pfad zur PROFTP Logdatei
XFERLOG="/var/log/xferlog"


tail -f $XFERLOG | while read line
do
if [ `echo $line | cut -d" " -f 12` == "i" ]; then
infile=`echo $line | cut -d" " -f 9`

while [ $j -lt $number ]
do
echo Neue Daten sind angekommen: $infile | mail -s "FTP-Dateneingang" ${emailAdr[j]}
j=$[$j + 1]
done
#Ruecksetzen des Zaehlers
j=0
fi
done


horst:~ # ./pro1.sh
: No such file or directory
horst:~ #


charlie :confused:

P.s. Ist doch nicht so schwer?

Harry
30.08.02, 14:02
Hallo Charlie,

ich habe gerade Dein Skript in mein System gepastet, eine /var/log/xferlog angelegt und es laufen lassen.
Ergebnis: Es läuft bei mir tadellos.

Mögliche Ursachen, warum es bei Dir nicht läuft:
- /var/log/xferlog existiert unter einer anderen Bezeichnung
- /bin/bash ist eine uralt-Version
- sonstiges ;)

Harry

charlie
30.08.02, 14:11
Hi,

danke noch mal an alle für die Hilfe.

Ich habe die Suse 7.3 erst vor zwei Tagen installiert?

Der Pfad er Log stimmt !

So ich habe Feierabend und mach mich nach Hause.

HABE FERTIG

@Harry Werde aber noch mal deine Antworten checken. Besonders sonstiges :cool:

cu charlie :(

onetwo
03.09.02, 10:39
und wie kann ich das jetzt in das skript einbauen damit die user die im authlog stehen per mail verschickt werden?

das ist die zeile die ich hier im forum erfragt hab (gibt die user auch brav aus)



cut -d" " -f 10 /var/log/proftpd/auth.log | grep -v hidden | sed s/\"//g


ich bin aber anscheinend zu blöd die zeile in das skript einzubinden ...




#!/bin/bash

ADMIN=admin@domain.de
XFERLOG=/var/log/xferlog

tail -f $XFERLOG | while read line
do
if [ `echo $line | cut -d" " -f 12` == "i" ]; then
infile=`echo $line | cut -d" " -f 9`
echo $infile | mail -s "FTP-Upload" $ADMIN
fi
done

boxa
05.09.02, 08:22
@ charlie

Mir ist noch ein Problem eingefallen, das die Ursache für alles sein kann. Ich habe die Urversion des Scripts auf einem Windoof PC per Copy & Paste kopiert und als Textfile auf den Linuxserver übertragen. Hier kam dann das Problem mit den Zeilenumbrüche auf. Die Datei war auf Linux unbrauchbar. Ich hab die paar Zeilen dann direkt eingetippt und schon gings!

onetwo
19.09.02, 15:08
nein, also mir passiert das nicht mehr, hab den fehler 1x beim ipchains script gemacht.

hat keiner eine idee wie man die beiden scripts sinnvoll verbindet (2 beiträge weiter oben) kann doch nicht sein das ich der einzige bin der auf das abfährt :))

Roman