[Linux] Socket permissions vanuit amavisd-new

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • hell4you
  • Registratie: Mei 2006
  • Laatst online: 10:02
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.

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! :F Hmm... eens kijken met strace dan:

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 8)7