Ik ben bezig met een spamfilter met postfix, amavisd-new en spamassassin. Dit werkt als een trein, maar spamassassin laat toch nog enkele berichtjes door en ik kan de threshold niet verlagen zonder false positives.
Om die reden wil ik graag Kaspersky for Linux Mail server toevoegen, om ook de laatste paar uit te filteren. De installatie is goed gelukt, maar er blijft 1 probleem over, namelijk amavisd-new kan niet communiceren met de unix sockets van Kaspersky zonder dat ik ze chmod naar minimaal 666. (Als ik het systeem boot worden de sockets aangemaakt met 660). Ik zoek liever uit waar het probleem zit dan een workaround in te bouwen.
Om te debuggen met welke uid/gid amavisd-new verbinding maakt met de socket heb ik een dummy applicatie gemaakt die de Kaspersky sockets vervangt en de uid/gid op de console uitprint. Source: https://dl.dropboxusercontent.com/u/1076729/socket.cpp.
Ik stuur een mail naar de server en de volgende regel verschijnt in de console (door de dummy applicatie):
Zo te zien maakt het amavisd-new process met de user amavis en group amavis verbinding:
De user amavis is lid van de group klusers:
Laten we hetzelfde simuleren met socat:
En nu eens testen met 770:
Ik stuur weer een mail naar de server om te testen of hij nog steeds verbinding maakt met mn dummy socket, maar er verschijnt geen regel op de console! De volgende regel komt in de log file:
Ok, raar... de amavis user zou de group rights moeten hebben om verbinding te kunnen maken. Laten we eens proberen met socat:
dit werkt WEL!
Hmm... eens kijken met strace dan:
Conclusie: Met amavis werkt het alleen met chmod 777, maar met socat werkt het zowel met 777 als 770 en beide gebruiken dezelfde user en group. Wat zie ik over het hoofd
Om die reden wil ik graag Kaspersky for Linux Mail server toevoegen, om ook de laatste paar uit te filteren. De installatie is goed gelukt, maar er blijft 1 probleem over, namelijk amavisd-new kan niet communiceren met de unix sockets van Kaspersky zonder dat ik ze chmod naar minimaal 666. (Als ik het systeem boot worden de sockets aangemaakt met 660). Ik zoek liever uit waar het probleem zit dan een workaround in te bouwen.
Om te debuggen met welke uid/gid amavisd-new verbinding maakt met de socket heb ik een dummy applicatie gemaakt die de Kaspersky sockets vervangt en de uid/gid op de console uitprint. Source: https://dl.dropboxusercontent.com/u/1076729/socket.cpp.
root@filter2:~# ./socket & [1] 9189 root@filter2:~# chown kluser:klusers /run/klms/rds_asp root@filter2:~# chmod 777 /run/klms/rds_asp
Ik stuur een mail naar de server en de volgende regel verschijnt in de console (door de dummy applicatie):
received credentials pid=6891, uid=106, gid=109
Zo te zien maakt het amavisd-new process met de user amavis en group amavis verbinding:
root@filter2:~# ps aux | grep 6891 amavis 6891 0.2 7.1 254576 73372 ? S 22:20 0:05 /usr/sbin/amavisd-new (ch8-avail) root@filter2:~# grep 106 /etc/passwd amavis:x:106:109:AMaViS system user,,,:/var/lib/amavis:/bin/sh root@filter2:~# grep 109 /etc/group amavis:x:109:clamav,kluser
De user amavis is lid van de group klusers:
root@filter2:~# grep amavis /etc/group clamav:x:108:amavis amavis:x:109:clamav,kluser klusers:x:116:kluser,amavis,postfix
Laten we hetzelfde simuleren met socat:
root@filter2:~# su amavis $ echo test | socat - UNIX-CONNECT:/run/klms/rds_asp received credentials pid=9436, uid=106, gid=109
En nu eens testen met 770:
root@filter2:~# chmod 770 /run/klms/rds_asp
Ik stuur weer een mail naar de server om te testen of hij nog steeds verbinding maakt met mn dummy socket, maar er verschijnt geen regel op de console! De volgende regel komt in de log file:
Feb 6 23:06:36 filter2 amavis[6891]: (06891-09) (!)connect to /var/run/klms/rds_asp failed, attempt #1: Can't connect to UNIX socket /var/run/klms/rds_asp: Access denied
Ok, raar... de amavis user zou de group rights moeten hebben om verbinding te kunnen maken. Laten we eens proberen met socat:
root@filter2:~# su amavis $ echo test | socat - UNIX-CONNECT:/run/klms/rds_asp received credentials pid=9801, uid=106, gid=109
dit werkt WEL!

root@filter2:~# strace -f -s4096 -o/tmp/str.out /usr/sbin/amavisd-new socket(PF_FILE, SOCK_STREAM, 0) = 13 ioctl(13, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff3943aec0) = -1 ENOTTY (Inappropriate ioctl for device) lseek(13, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) ioctl(13, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fff3943aec0) = -1 ENOTTY (Inappropriate ioctl for device) lseek(13, 0, SEEK_CUR) = -1 ESPIPE (Illegal seek) fcntl(13, F_SETFD, FD_CLOEXEC) = 0 fcntl(13, F_GETFL) = 0x2 (flags O_RDWR) fcntl(13, F_SETFL, O_RDWR|O_NONBLOCK) = 0 connect(13, {sa_family=AF_FILE, path="/run/klms/rds_asp"}, 110) = -1 EACCES (Permission denied) fcntl(13, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK) fcntl(13, F_SETFL, O_RDWR) = 0 close(13)
Conclusie: Met amavis werkt het alleen met chmod 777, maar met socat werkt het zowel met 777 als 770 en beide gebruiken dezelfde user en group. Wat zie ik over het hoofd
