PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu sa-learn bzw. dessen bayes-DB Speicherort



~Gh05t~
03.11.06, 12:34
Hallo zusammen,
ich habe einen Mailserver (SLES 9) mit Postfix und Spamassassin. Die Mailboxes sind in /var/mail/<user>, außerdem hat jeder User noch in seinem Homeverzeichnis einen Ordner "mail/" mit eigenen Mailboxen (Trash, Sent, Drafts, Spam).

Spamassassin arbeitet soweit, leider filtert er ein bisschen wenig.
Also will ich Spamassassin mit sa-learn ein wenig mehr lernen lassen.

Meine Vorstellung ist folgende:
Jeder User bekommt eine weitere mailbox (z.B. '/home/<user>/mail/Learnspam') in die er (z.B. via IMAP) mails schieben kann, die er als Spam erkannt hat.
Ein Cron-Script soll diese Mailboxen dann durchgehen, den Inhalt zur Globalen Spam-Datenbank hinzufügen und anschließend löschen.

Dazu habe ich mir folgendes Script geschrieben:

#!/bin/sh

for user in $(/bin/ls -A /home);
do
MBOX=/home/$user/mail/Learnspam
if [ -f $MBOX ];
then
/usr/bin/sa-learn --spam --mbox $MBOX
/bin/rm $MBOX
/bin/touch $MBOX
/bin/chown $user.users $MBOX
/bin/chmod 0600 $MBOX
fi
done

Nun legt sa-learn aber ein verzeichnis /root/.spamassassin mit den dateien 'bayes_seen' und 'bayes_token' an.
Scheint also als würde das Gelernte für den User root gespeichert.

Normalerweise werden diese Informationen aber aus /home/spamfilter/.spamasassin geholt, da spamassassin mit dem User 'spamfilter' von Postfix ausgeführt wird. Dieser hat jedoch keine Berechtigung auf die User-Mailboxes zuzugreifen, deshalb kann ich mein cron-script nicht mit diesem User ausführen.

Jemand ne Idee?

Vielen Dank schon mal.

~Gh05t~
04.11.06, 14:20
Ok, habe selber eine Lösung mit sudo gefunden (wenn auch eine nicht so schöne):

#!/bin/sh

TEMP_LEARN_BOX=/tmp/sa-learn-mbox.tmp

# Delete tmp-mailbox if present
if [ -f $TEMP_LEARN_BOX ];
then
/bin/rm $TEMP_LEARN_BOX
fi

# search for user learnspam-mailboxes
# add content to temp-mailbox and delete it
for user in $(/bin/ls -A /home);
do
MBOX=/home/$user/mail/learnspam
if [ -f $MBOX ];
then
/bin/cat $MBOX >> $TEMP_LEARN_BOX
/bin/rm $MBOX
/bin/touch $MBOX
/bin/chown $user.users $MBOX
/bin/chmod 0600 $MBOX
fi
done

# add content of temp-mailbox to bayes-DB of user spamfilter
/bin/chown spamfilter.users $TEMP_LEARN_BOX
/bin/chmod 0600 $TEMP_LEARN_BOX
HOME=/home/spamfilter # need this because sudo -H parameter doesnt work for me
/usr/bin/sudo -H -u spamfilter /usr/bin/sa-learn --spam --mbox $TEMP_LEARN_BOX
/bin/rm $TEMP_LEARN_BOX
Damit das funktioniert braucht man dann noch eine Zeile in der /etc/sudoers (edit mit visudo):
root ALL=(spamfilter) NOPASSWD: /usr/bin/sa-learn