Postfix=>dSpam=>dovecot/deliver Permission Problem



Gagget

New Member
Wie der titel hoffentlich schon verrät versuche ich dspam in eine vorhandene postfix/dovecot+dovecot-auth installation zu integrieren. Irgendwie hängt es wohl nur nach an den rechten des dovecot/auth-master socket oder so. Eigentlich auch logisch weil dspam ja unter dspam und nich unter vmail läuft. Aber irgendwie hab ich keine ahnung wie ich dem beikommen kann.
Würde mich sehr freuen, wenn mir hier einer der Profis mal ein paar Tips zu geben könnte. ( Sollten noch Angaben fehlen ergänze ich die natürlich gerne)

Gruß Gagget


Erstmal ein paar grundlegende Sys Infos:
Hetzter EQ6 / Debian Lenny (Syscp Image)
drauf is Postfix+ Dovecot für virtuelle mails inkl. dovecot-auth


Bisher hab ich dspam normal installiert und folgendes (um)konfiguriert:

main.cf
Code:
...
#virtual_transport = dovecot
virtual_transport = dspam
master.cf (den dovecot teil hab ich vollständigskeits halbe mit gepasted)
Code:
...
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
dspam                 unix    -       n       n       -       -    pipe
  flags=Ru user=dspam argv=/usr/bin/dspam --client --deliver=innocent,spam --user ${recipient} --mail-from=${sender}
dspam.conf
Code:
Home /var/spool/dspam
StorageDriver /usr/lib/dspam/libhash_drv.so
TrustedDeliveryAgent "/usr/lib/dovecot/deliver -d %u"
UntrustedDeliveryAgent "/usr/lib/dovecot/deliver -d %u"
QuarantineAgent "/usr/lib/dovecot/deliver -d %u -m Junk"
...
dovecot.conf
Code:
...
auth default {
    mechanisms = plain login digest-md5 cram-md5 ntlm rpa
    user = vmail

    ...

    socket listen {
        master {
                path = /var/run/dovecot/auth-master
                mode = 0660
                user = vmail
                group = vmail
        }
    }
}
cat /etc/group
Code:
...
vmail:x:2000:
...
clamav:x:111:
dspam:x:112:

Nun der entsprechende Fehler in den Logs

mit auth-master mode=0660:
Jul 13 17:30:32 srv dspam[12825]: innocent message from X.X.X.X
Jul 13 17:30:32 srv deliver([email protected]): Can't connect to auth server at /var/run/dovecot/auth-master: Permission denied
Jul 13 17:30:32 srv dspam[12825]: Delivery agent returned exit code 75: /usr/lib/dovecot/deliver -d [email protected]
Jul 13 17:30:32 srv dspam[13099]: Client exited with error -1
mit auth-master mode=0666:
Jul 13 17:28:42 srv dspam[12825]: innocent message from X.X.X.X
Jul 13 17:28:42 srv deliver([email protected]): setgid(2000) failed with euid=110, gid=112, egid=112: Operation not permitted
Jul 13 17:28:42 srv dspam[12825]: Delivery agent returned exit code 75: /usr/lib/dovecot/deliver -d [email protected]
Jul 13 17:28:42 srv dspam[12877]: Client exited with error -1
 
Siehe z. B. EUserv vServer Active - Installation des Mailsystems Jochens Blog

Code:
dspam                 unix    -       n       n       -       -    pipe
  flags=Ru user=dspam argv=/usr/bin/dspam --client --deliver=innocent,spam --user ${recipient} --mail-from=${sender}
Code:
    socket listen {
        master {
                path = /var/run/dovecot/auth-master
                mode = 0660
                user = vmail
                group = vmail
        }
    }
Dein dspam wird von dem master-Prozess von Postfix im Kontext des Benutzers dspam (vermutlich auch eine gleichlautende Gruppe) aufgerufen. Der Socket kann aber nur von vmail:vmail genutzt werden.

Du solltest dspam gleich im Kontext von vmail:vmail aufrufen (ändere deine master.cf entsprechend ab) oder auf /usr/lib/dovecot/deliver das s-Bit setzen, so dass das Binary unter einem anderen Benutzer aufgerufen werden kann. Letzteres ist allerdings eine nicht zu vernachlässigende Sicherheitslücke...
 
Da ich natürlich eine sicher lösung bevorzuge habe ich jetzt mal die master.cf geändert. Ich hoffe ich hab auch das richtgie gemacht ...
Code:
dspam                 unix    -       n       n       -       -    pipe
  flags=Ru user=vmail:vmail argv=/usr/bin/dspam --client --deliver=innocent,spam --user ${recipient} --mail-from=${sender}

nach einem weiteren Test und folgender meldung in der mail.log
dspam[19115]: Option --user requires special privileges when user does not match current user, e.g.. root or Trusted User [uid=2000(ÀÈÖxÿ )]
dspam[19115]: Unable to initialize agent context
habe ich in die dspam.conf noch ein "Trust vmail" hinzugefügt.

Teste ich das ganze jetzt erneut ende ich wieder bei:
Code:
Jul 13 19:43:18 srv dspam[19168]: innocent message from X.X.X.X
Jul 13 19:43:18 srv deliver([email protected]): Can't connect to auth server at /var/run/dovecot/auth-master: Permission denied
Jul 13 19:43:18 srv dspam[19168]: Delivery agent returned exit code 75: /usr/lib/dovecot/deliver -d [email protected]
Jul 13 19:43:18 srv dspam[19178]: Client exited with error -1

Evtl sollte ich noch erwähnen das ich rechte/user/gruppen technisch net so viel plan von der Materie hab. Meine Logik sagt mir aber irgednwie "jung, wasde da gemacht hast reicht noch net". Wäre also für weiter Hilfe auf jedenfall sehr dankbar.
 
Code:
xxx@srv:~$ sudo ls -la /var/run/dovecot
insgesamt 16
drwxr-xr-x  3 root  root    4096 13. Jul 19:49 .
drwxr-xr-x 14 root  root    4096 13. Jul 20:16 ..
srw-rw-rw-  1 vmail vmail      0 13. Jul 19:49 auth-master
srw-------  1 vmail vmail      0 13. Jul 19:49 auth-worker.19535
srwxrwxrwx  1 root  root       0 13. Jul 19:49 dict-server
drwxr-x---  2 root  dovecot 4096 13. Jul 19:49 login
-rw-------  1 root  root       6 13. Jul 19:49 master.pid

Code:
# 1.0.15: /etc/dovecot/dovecot.conf
protocols: imap pop3
disable_plaintext_auth: no
login_dir: /var/run/dovecot/login
login_executable(default): /usr/lib/dovecot/imap-login
login_executable(imap): /usr/lib/dovecot/imap-login
login_executable(pop3): /usr/lib/dovecot/pop3-login
mail_access_groups: vmail
mail_executable(default): /usr/lib/dovecot/imap
mail_executable(imap): /usr/lib/dovecot/imap
mail_executable(pop3): /usr/lib/dovecot/pop3
mail_plugins(default): quota imap_quota
mail_plugins(imap): quota imap_quota
mail_plugins(pop3): quota
mail_plugin_dir(default): /usr/lib/dovecot/modules/imap
mail_plugin_dir(imap): /usr/lib/dovecot/modules/imap
mail_plugin_dir(pop3): /usr/lib/dovecot/modules/pop3
pop3_uidl_format(default):
pop3_uidl_format(imap):
pop3_uidl_format(pop3): UID%u-%v
auth default:
  mechanisms: plain login digest-md5 cram-md5 ntlm rpa
  user: vmail
  passdb:
    driver: sql
    args: /etc/dovecot/dovecot-sql.conf
  userdb:
    driver: sql
    args: /etc/dovecot/dovecot-sql.conf
  socket:
    type: listen
    client:
      path: /var/spool/postfix/private/auth
      mode: 432
      user: postfix
      group: postfix
  socket:
    type: listen
    master:
      path: /var/run/dovecot/auth-master
      mode: 432
      user: vmail
      group: vmail
plugin:
  quota: maildir:
 
Last edited by a moderator:
Die Rechte scheinen jetzt korrekt zu sein. Hast du vielleicht noch eine alte E-Mail in der Queue, welche noch mit der alten Prozesskonfiguration ausgeliefert wird?
 
nein ... Mail queue is empty

kann man da nich mit ner hilfsgruppe "mail" oder so was drehen ... evtl das dspam und vmail gemeinsam auch nochmal der gruppe mail angehören oder so.

wobei ich da jetzt aber auch nicht wüsste wie man sowas machen müsste.
 
wobei ich da jetzt aber auch nicht wüsste wie man sowas machen müsste.
Einfach eine Gruppe anlegen (`man groupadd`) und dann die Benutzer zuweisen (`man gpasswd`). Ich wüsste aber nicht, weshalb es daran liegen sollte.

Welche Rechte sind denn auf /usr/lib/dovecot/deliver gesetzt?
 
Nachtrag: mit nem chmod 04755 auf /usr/lib/dovecot/deliver gehts. Aber ich befürchte, das ist genau jenes Scheunentor das man nicht öffnen sollte.

Nachtrag2: hab jetzt auf /usr/lib/dovecot/deliver ein 04750 und root:dspam und den dovecot/auth-master auf 0660 und vmail:dspam, quasi ne eingeschränkte sicherheitslücke

mich würde aber trotzdem noch die richtige /saubere lösung interessieren
 
Last edited by a moderator:
Wegen aktueller Ereignisse muss ich das Thema doch nochmal pushen und auf/um eine "saubere Lösung" hoffen/bitten.

Durch das letzte dovecot update sind mir wohl die oben erwähnten rechte auf /usr/lib/dovecot/deliver verloren gegangen. Was natürlich dazu führte das keine eingehenden E-Mails mehr zugestellt werden konnten. Da dieses "setuid" Recht eh nur provisorisch gedacht war, und ich auch keine Lust habe bei jeden dovecot-update manuell die rechte wiederherzustellen, suche ich aktuell wieder nach einer "sauberen Lösung" ohne dieses "Superbit-Provisorium".

Würde mich freuen wenn sich nochmal jemand zu weiterer Hilfe hinreißen lässt. Kann mir zwar vorstellen, dass es ein wenig nervig ist, aber wer nicht fragt bleibt schließlich ewig dumm. Deswegen frag ich dann lieber nochmal. :)

Schonmal Danke und Gruß
Gagget
 
Back
Top