Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Postfix + AMaViS + ClamAV で clamav がエラーを吐く on FreeBSD

/var/log/maillog に次のようなメッセージが残っている。

Nov 10 00:06:38 hostname amavis[42113]: (42113-04) Clam Antivirus-clamd: C
an't connect to UNIX socket /var/run/clamav/clamd: No such file or directo
ry, retrying (2)
Nov 10 00:06:43 hostname amavis[42116]: (42116-03) Clam Antivirus-clamd av
-scanner FAILED: Too many retries to talk to /var/run/clamav/clamd (Can't 
connect to UNIX socket /var/run/clamav/clamd: No such file or directory) a
t (eval 48) line 180.
Nov 10 00:06:43 hostname amavis[42116]: (42116-03) WARN: all primary virus
 scanners failed, considering backups

/var/run/clamav/clamd がないということなので、 clamd を起動してみる。

$ sudo env - /usr/local/etc/rc.d/clamav-clamd.sh start
Starting clamav_clamd.

……が、同じメッセージがやっぱりログに吐かれている。

/var/log/clamav を見ると、次のようなメッセージがある。

Thu Nov 10 12:36:07 2005 -> +++ Started at Thu Nov 10 12:36:07 2005
Thu Nov 10 12:36:07 2005 -> clamd daemon 0.86.2 (OS: freebsd4.10, ARCH: i3
86, CPU: i386)
Thu Nov 10 12:36:07 2005 -> Log file size limited to 2097152 bytes.
Thu Nov 10 12:36:07 2005 -> Running as user vscan (UID 1003, GID 10002)
Thu Nov 10 12:36:07 2005 -> Reading databases from /usr/local/share/clamav
Thu Nov 10 12:36:08 2005 -> Protecting against 39455 viruses.
Thu Nov 10 12:36:08 2005 -> ERROR: Socket file /var/run/clamav/clamd could
 not be bound: Permission denied

Permission denied だそうな。

clamd がどういう権限で走ろうとしているのか分からないので、とりあえずエラーメッセージで検索をかけると次のページが引っかかった。
http://www.mail-archive.com/qmail-scanner-general@lists.sourceforge.net/msg04310.html
どの user の権限で走るかとう設定は /usr/local/etc/clamav.conf にあるらしい、と。で、 clamav.conf に設定した user で /var/run/clamav を chown しろ、と。
clamav.conf というファイルはなかったが、同じディレクトリに clamd.conf というファイルがあった。これを見ると、次のような設定になっている。

# Run as a selected user (clamd must be started by root).
# Default: disabled
User vscan

"User vscan" で検索をかけると、次のページが引っかかった。
http://www.cozmixng.org/~rwiki/index.rb?cmd=view;name=ClamAV
/var/run/clamav ディレクトリと /var/log/clamav/{clamd.log,freshclam.log} *1 の owner を vscan:vscan とする。こんな感じ。

$ sudo chown vscan:vscan /var/run/clamav
$ sudo chown vscan:vscan /var/log/clamav/clamd.log
$ sudo chown vscan:vscan /var/log/clamav/freshclam.log

で、あとは起動した後、ちゃんと動いているかどうか確かめる。ログファイルも見て、エラーメッセージが出ていないかどうか確かめること。

$ sudo env - /usr/local/etc/rc.d/clamav-freshclam.sh start
$ sudo env - /usr/local/etc/rc.d/clamav-clamd.sh start
$ ps ax | grep clamd
  9654  ??  Ss     0:01.25 /usr/local/sbin/clamd
$ ps ax | grep freshclam
  9690  ??  Ss     0:00.24 /usr/local/bin/freshclam --daemon

*1:上記ページには書いてないが、そのページにある通り "sudo env - /usr/local/etc/rc.d/clamav-freshclam.sh start" を実行すると freshclam.log の permission がおかしいというエラーメッセージが出た……はず