clamavでPermission deniedが出る場合の対処(暫定)

■環境:clamav+postfix+amavis+spamassassin

 squeezeのclamavとpostfix連携(amavis)
 http://d.hatena.ne.jp/labunix/20120430

 spamassassinでヘッダ情報に「X-Spam」を追加する
 http://d.hatena.ne.jp/labunix/20120501

■以下のようなエラーが出る。

May 11 22:27:10 squeeze amavis[12075]: (12075-13) (!)run_av (ClamAV-clamd) FAILED - unexpected , 
output="/var/lib/amavis/tmp/amavis-20120509T062532-12075/parts: lstat() failed: Permission denied. ERROR\n"

■clamavはamavisのグループに所属している。

$ id clamav
uid=111(clamav) gid=116(clamav) 所属グループ=116(clamav),127(amavis)

■パーミッションは以下の通り

$ su root -c 'ls -l /var/lib/amavis/tmp/*'
合計 8
-rw-r----- 1 amavis amavis  345 2012-05-11 23:02 email.txt
drwxr-x--- 2 amavis amavis 4096 2012-05-11 23:02 parts

■当然だが、rootユーザでclamac-daemonを実行すると、このエラーは出ない。

$ grep User /etc/clamav/clamd.conf
#User clamav
User root
$ sudo /etc/init.d/clamav-daemon restart

■rootグループに所属させればエラーは出ない。

$ sudo adduser clamav root
$ id clamav
uid=111(clamav) gid=116(clamav) 所属グループ=116(clamav),0(root),127(amavis)
$ sudo /etc/init.d/clamav-daemon restart
$ sudo /etc/init.d/clamav-freshclam restart
$ sudo /etc/init.d/amavis restart
$ sudo /etc/init.d/spamassassin restart
Restarting SpamAssassin Mail Filter Daemon:
spamd.
$ sudo sa-update -D 2>&1 | tee -a sa-update.log && echo "ok"
...
 511 23:42:15.093 [5363] dbg: diag: updates complete, exiting with code 0
ok

■rootグループを止めて、daemonグループに追加。
 これでもエラーは出ない。initスクリプトの名前も「clamav-daemon」なので、
 これで様子見。

$ sudo deluser clamav root
ユーザ 'clamav' をグループ 'root' から削除しています...
完了。

$ id daemon
uid=1(daemon) gid=1(daemon) 所属グループ=1(daemon)

$ sudo adduser clamav daemon
ユーザ 'clamav' をグループ 'daemon' に追加しています...
ユーザ clamav をグループ daemon に追加
完了。

■もう少し、テストメールで確認。
 以下のようにヘッダも正常。

X-Virus-Scanned: Debian amavisd-new at squeeze.example.jp
Received: from squeeze.example.jp ([127.0.0.1])
        by localhost (squeeze.example.jp [127.0.0.1]) (amavisd-new, port 10024)
        with ESMTP id Pwq6RZ1F0LKW for <labunix@squeeze.example.jp>;
        Fri, 11 May 2012 23:37:30 +0900 (JST)
Received: by squeeze.example.jp (Postfix, from userid 1000)
        id 3588EF6828; Fri, 11 May 2012 23:37:30 +0900 (JST)

■clamavよりも上であれば、daemonよりも権限をもう少し下げてもよいかも知れない。

$ grep "postfix\|amavis\|clamav" /etc/group
daemon:x:1:clamav
clamav:x:116:
postfix:x:125:
amavis:x:127:clamav