EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

ClamAVのエラーとその解決

イートスマートで提供しているサービスでは、クライアントからファイルをアップロードする機能を提供しているものがあります。 アップロードされたファイルを利用するにあたり、安全に利用するためClamAVを利用してウィルスのチェックを行っています。 ある日、この処理が以下のエラーで失敗していることが判明しました。 手動で実行したところ、以下のようなエラーが出力されました。

# clamdscan /xxx/yyy/zzz.jpg
/xxx/yyy/zzz.jpg: Can't open file or directory ERROR

この内容から、最初は該当ファイルにアクセスする権限が無いのだと思いましたが、読み取り・実行権限がありました。 そもそもその場合は"Permission denied"のようなエラーになるハズです。 いろいろ試すなかで、/tmp以下に置いたファイルは正常に処理出来ます。

# clamdscan /tmp/test.txt
/tmp/test.txt: OK

パーミッションには問題が無く外のバッチ処理は正常に実行出来るので、clamdscanの実行に問題があるのではないかと調査しました。 すると、AppArmorというものがclamdscanの実行を制限していることがわかりました。

ja.wikipedia.org

以下のようにclamdscanの実行に必要な設定を追加しました。

# vim /etc/apparmor.d/local/usr.sbin.clamd
cat /etc/apparmor.d/local/usr.sbin.clamd
# Site-specific additions and overrides for usr.sbin.clamd.
# For more details, please see /etc/apparmor.d/local/README.
/xxx/yyy/    r,
/xxx/yyy/** r,
# apparmor_parser -r -K /etc/apparmor.d/usr.sbin.clamd

以上のことを行うことで、ウィルスのチェック正常に実行することが出来るようになりました。

# clamdscan /xxx/yyy/zzz.jpg
/xxx/yyy/zzz.jpg: OK