[gelöst]Bash-Script aus Sieve-Script aufrufen

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Artim
Beiträge: 86
Registriert: 22.11.2019 11:33:28

[gelöst]Bash-Script aus Sieve-Script aufrufen

Beitrag von Artim » 12.05.2020 15:23:10

Ich versuche aktuell beim Verschieben von E-Mails in den Spam-Ordner diese automatisch als Spam erlernen zu lassen von unserem Spamfilter.
Genauer gesagt geht es um den Aufbau von hier: https://workaround.org/ispmail/stretch/ ... ith-rspamd unter dem Abschnitt "Learning from user actions."

Ich habe die entsprechenden Sieve-Scripte angelegt und mit sievec verarbeiten lassen. Außerdem habe ich beide .sh Scripte angelegt und die Berechtigungen entsprechend vergeben. Der einzige Unterschied ist, dass wir keinen Nutzer oder Gruppe "vmail" haben. Dort habe ich entsprechend den Nutzer Dovecot eingetragen. Im Ordner sieht es entsprechend so aus:

Code: Alles auswählen

drwxr-xr-x 2 dovecot root 4,0K Mai  7 10:52 .
drwxr-xr-x 3 root    root 4,0K Jul 29  2019 ..
-rw-r--r-- 1 dovecot root   85 Mai  7 10:47 learn-ham.sieve
-rw-r--r-- 1 root    root  246 Mai  7 10:47 learn-ham.svbin
-rw-r--r-- 1 dovecot root   86 Mai  7 10:47 learn-spam.sieve
-rw-r--r-- 1 root    root  250 Mai  7 10:47 learn-spam.svbin
-rw-r--r-- 1 dovecot root  509 Mär 16 13:57 mailfilter.sieve
-rw-r--r-- 1 root    root  398 Mai  6 18:02 mailfilter.svbin
-rwx------ 1 dovecot root   41 Mai  7 10:52 rspamd-learn-ham.sh
-rwx------ 1 dovecot root   42 Dez 14 10:42 rspamd-learn-spam.sh
Dennoch bekomme ich die Fehlermeldungen
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: Fatal: execvp(/etc/dovecot/sieve/global/rspamd-learn-spam.sh) failed: Permission denied
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: Error: write(program stdin) failed: Broken pipe
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: program `/etc/dovecot/sieve/global/rspamd-learn-spam.sh' terminated with non-zero exit code 84
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: Error: sieve: pipe action: failed to pipe message to program `rspamd-learn-spam.sh': refer to server log for more information. [2020-05-12 17:16:28]
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: sieve: left message in mailbox 'Junk'
Mai 12 17:16:28 mail dovecot[4119]: imap(user)<8778><xIGQ8nSlFMZ/AAAB>: Error: sieve: Execution of script /etc/dovecot/sieve/global/learn-spam.sieve failed
Mal davon abgesehen dass ich keine Ahnung haben was mit "refer to server log for more information." gemeint ist, woran genau könnte es scheitern, dass die Berechtigung nicht passt?
Zuletzt geändert von Artim am 18.07.2020 14:57:25, insgesamt 1-mal geändert.

hec_tech
Beiträge: 1093
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: Bash-Script aus Sieve-Script aufrufen

Beitrag von hec_tech » 12.05.2020 23:04:17

Kannst du mal den Output von doveconf -n posten?

Artim
Beiträge: 86
Registriert: 22.11.2019 11:33:28

Re: Bash-Script aus Sieve-Script aufrufen

Beitrag von Artim » 13.05.2020 11:00:48

Code: Alles auswählen

# 2.3.4.1 (f79e8e7e4): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.4 ()
# OS: Linux 4.19.0-9-amd64 x86_64 Debian 10.4 ext4
# Hostname: mail.domain.de
default_process_limit = 200
mail_location = maildir:/maildirs/%u/Maildir
managesieve_notify_capability = mailto
managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapsieve vnd.dovecot.imapsieve
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
  separator = /
  type = private
}
passdb {
  driver = pam
}
plugin {
  acl = vfile:/etc/dovecot/global-acls:cache_secs=300
  imapsieve_mailbox1_before = file:/etc/dovecot/sieve/global/learn-spam.sieve
  imapsieve_mailbox1_causes = COPY
  imapsieve_mailbox1_name = Junk
  imapsieve_mailbox2_before = file:/etc/dovecot/sieve/global/learn-ham.sieve
  imapsieve_mailbox2_causes = COPY
  imapsieve_mailbox2_from = Junk
  imapsieve_mailbox2_name = *
  sieve = /maildirs/%u/.dovecot.sieve
  sieve_after = /etc/dovecot/sieve/global/mailfilter.sieve
  sieve_default = /etc/dovecot/sieve/global/mailfilter.sieve
  sieve_dir = /maildirs/%u/.sieve
  sieve_global_extensions = +vnd.dovecot.pipe
  sieve_pipe_bin_dir = /etc/dovecot/sieve/global
  sieve_plugins = sieve_imapsieve sieve_extprograms
}
protocols = " imap sieve"
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
}
service managesieve-login {
  inet_listener sieve {
    port = 4190
  }
  process_min_avail = 3
}
ssl_ca = </etc/ssl/certs/CA.crt
ssl_cert = </etc/ssl/certs/mail.domain.de.cert.pem
ssl_cipher_list = ALL:!DH:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@STRENGTH
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
userdb {
  driver = passwd
}
protocol lda {
  mail_plugins = acl sieve
}
protocol imap {
  mail_max_userip_connections = 20
  mail_plugins = acl imap_acl imap_sieve quota imap_quota
}

Artim
Beiträge: 86
Registriert: 22.11.2019 11:33:28

Re: Bash-Script aus Sieve-Script aufrufen

Beitrag von Artim » 22.05.2020 15:50:46

Ok, ein problem konnte ich lösen: ich hatte bei "sieve_pipe_bin_dir" den falschen Ordner eingetragen. Jetzt steht dort der Ordner, wo die beiden shell Scripte liegen. Dennoch bekomme ich weiterhin:

Code: Alles auswählen

Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: Fatal: execvp(/etc/dovecot/sieve/global/rspamd-learn-spam.sh) failed: Permission denied
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: Error: write(program stdin) failed: Broken pipe
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: program `/etc/dovecot/sieve/global/rspamd-learn-spam.sh' terminated with non-zero exit code 84
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: Error: sieve: pipe action: failed to pipe message to program `rspamd-learn-spam.sh': refer to server log for more information. [2020-05-22 15:40:06]
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: sieve: left message in mailbox 'Junk'
Mai 22 15:40:06 mail dovecot[18547]: imap(user)<18686><57dcxDymXJ5/AAAB>: Error: sieve: Execution of script /etc/dovecot/sieve/global/learn-spam.sieve failed
Ich habe auch schon versucht, den Besitzer auf root:root zu ändern, was aber auch nicht hilft. Hat jemand eine Idee, woran es liegen könnte und wie es sich beheben ließe?

Artim
Beiträge: 86
Registriert: 22.11.2019 11:33:28

Re: Bash-Script aus Sieve-Script aufrufen

Beitrag von Artim » 27.05.2020 09:23:28

ok, so langsam fällt mir wirklich nichts mehr ein. Für den Fall dass das Problem ist, dass das Problem darin liegt, dass rspamc mit den falschen Rechten aufgerufen wird, habe ich jetzt in die shell Scripte Nutzername und Passwort eingetragen, damit es als root ausgeführt wird. Weiterhin die gleichen Fehlermeldungen.
Wo liegt jetzt also das Problem?

Artim
Beiträge: 86
Registriert: 22.11.2019 11:33:28

Re: Bash-Script aus Sieve-Script aufrufen

Beitrag von Artim » 03.06.2020 10:01:11

Ich habe jetzt mal versucht meinen Ansatz zu ändern und das Shell Script zu umgehen, da ja eh nichts anderes drin steht als dass rspamc ausgeführt werden soll.
Ich habe jetzt also das Script learn-spam.sieve geändert zu:

Code: Alles auswählen

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_spam"];
Die Datei 90-plugin.conf habe ich entsprechend geändert, um die Zeile

Code: Alles auswählen

sieve_pipe_bin_dir = /usr/bin/rspamc
zu enthalten. Allerdings gibt das den Fehler

Code: Alles auswählen

Jun 03 09:48:34 mail dovecot[1536]: imap(user)<10486><xVI6QSmnpLN/AAAB>: Error: sieve: pipe action: failed to pipe message to program: program `rspamc' not found
Jun 03 09:48:34 mail dovecot[1536]: imap(user)<10486><xVI6QSmnpLN/AAAB>: sieve: left message in mailbox 'Junk'
Jun 03 09:48:34 mail dovecot[1536]: imap(user)<10486><xVI6QSmnpLN/AAAB>: Error: sieve: Execution of script /etc/dovecot/sieve/global/learn-spam.sieve failed
zurück.
Kann der pipe Befehl von pidgeonhole überhaupt direkt in rspamc pipen oder müsste da eher execute oder sogar eine Kombi aus beiden hin?

Artim
Beiträge: 86
Registriert: 22.11.2019 11:33:28

Re: Bash-Script aus Sieve-Script aufrufen

Beitrag von Artim » 18.07.2020 14:56:49

ok, die Lösung war doch sehr einfach:

Code: Alles auswählen

 sudo -u dovecot chmod +x *.sh
chmod als root auszuführen hat offenbar nicht gereicht.
die richtigen Berechtigungen sehen also wie folgt aus:

Code: Alles auswählen

/etc/dovecot/sieve/global # ls -la
insgesamt 44K
drwxr-xr-x 2 dovecot root 4,0K Jul  8 07:33 .
drwxr-xr-x 3 root    root 4,0K Jul 29  2019 ..
-rw-r--r-- 1 dovecot root  144 Jun  5 10:06 learn-ham.sieve
-rw-r--r-- 1 root    root  306 Jun  5 10:07 learn-ham.svbin
-rw-r--r-- 1 dovecot root   86 Jun 17 15:45 learn-spam.sieve
-rw-r--r-- 1 root    root  250 Jun 17 15:45 learn-spam.svbin
-rw-r--r-- 1 dovecot root  509 Mär 16 13:57 mailfilter.sieve
-rw-r--r-- 1 dovecot root  462 Jul 29  2019 mailfilter.sieve~
-rw-r--r-- 1 root    root  398 Mai  6 18:02 mailfilter.svbin
-rwxrwxr-x 1 dovecot root   41 Jun  5 10:25 rspamd-learn-ham.sh
-rwxrwxr-x 1 dovecot root   42 Jul  8 07:33 rspamd-learn-spam.sh

Antworten