ownCloud 9.1 files-antivirus の設定手順まとめ

やること

  • clamdをインストールし、ウィルス定義ファイルの自動更新を有効にします
  • インストール済みの ownCloud に、files-antivirus アプリを設定します
  • ownCloudにファイルをアップロードしてスキャンの動作確認をします

制限事項

  • CentOS7(または 6)でのまとめです
  • ownCloud9.1.4 でのインストール手順です(他バージョンでもだいたい同じ)
  • 暗号化環境の場合は、暗号化済みのファイルはスキャンできません
  • 暗号化環境の場合は、ファイルアップロード時のみウィルスチェックが可能です
  • 暗号化環境で files-antivirus アプリを導入すると、ownCloud 9.1.4 環境では、暗号化済みファイルをスキャンできないエラーメッセージが大量のログとして記録され続けるようです

設定例

  1. clamAVインストールのために、EPELリポジトリをインストールします
  2. yum install epel-release
    
  3. clamAV関連パッケージのインストール
  4. yum install \
    clamav \
    clamav-scanner \
    clamav-scanner-systemd \
    clamav-server \
    clamav-server-systemd \
    clamav-update
    
  5. clamAVの設定ファイルを設定します。(デフォルトで大丈夫です)
  6. vi /etc/freshclam.conf
    vi /etc/clamd.d/scan.conf
    
  7. ソケットの場所を確認しておきます
  8. /etc/clamd.d/scan.conf 内の、LocalSocket を確認します。

    less /etc/clamd.d/scan.conf
    LocalSocket /var/run/clamd.scan/clamd.sock
    

    または、netstatコマンドでも確認できます。

    netstat -a|grep clam
    unix  2      [ ACC ]     STREAM     LISTENING     12247152 /var/run/clamd.scan/clamd.sock
    
  9. freshclam コマンドで、ウィルス定義データベースのアップデートが可能か確認します
  10. freshclam
    
    Database updated (6223827 signatures) from database.clamav.net (IP: 218.44.253.75)
    

    上記のように、update が完了すればOKです。

  11. ウィルス定義データベースのアップデート処理を、cron へ登録します。
  12. 下記の例では、毎時37分にウィルス定義データベースのアップデートをチェックします。

    echo '37  *  *  *  *  /usr/bin/freshclam --quiet' > /etc/cron.d/freshclam
    
  13. clamd を起動します
  14. systemctl enable clamd@scan.service
    systemctl start clamd@scan.service
    
  15. ownCloud で files antivirs アプリを有効にします
  16. 画面左上アプリから、Antivirus App for files を有効にします。

    files_antivirusアプリの有効化

  17. files antivirs を設定します
  18. 管理画面 => アンチウィルスの設定を開きます。

    files_antivirusアプリの設定例

    モード:Daemon(ソケット)
    ソケット:手順4で確認したソケットの場所
    を設定します

    その他の項目は、適宜調整してください。

  19. テストファイルをアップロードする
  20. WebUI(ブラウザ経由)からドラッグドロップでファイルを追加してみます。
    リアルタイムスキャンの処理待ちのタイムラグが感じられるかもしれません。

  21. ownCloudのログを確認します
  22. Permission denied が出る場合は、ownCloudを動かしているユーザ(webユーザ)が、clamdソケットへのアクセス権がないためと思われるので、権限を付与してあげる必要があります。

    {"reqId":"\/nKxLDUaZlikGBsdwrB5","remoteAddr":"192.168.1.8","app":"PHP","message":"stream_socket_client(): unable to connect to unix:\/\/\/var\/run\/clamd.scan\/clamd.sock (Permission denied) at \/var\/www\/html\/owncloud_9.1.4_enc\/apps\/files_antivirus\/lib\/scanner\/external.php#27","level":3,"time":"2017-04-10T01:58:15+00:00","method":"POST","url":"\/index.php\/apps\/files\/ajax\/upload.php","user":"admin"}
    {"reqId":"\/nKxLDUaZlikGBsdwrB5","remoteAddr":"192.168.1.8","app":"no app in context","message":"OCA\\Files_Antivirus\\AvirWrapper OCA\\Files_Antivirus\\AvirWrapper::fopen Cannot connect to \"\/var\/run\/clamd.scan\/clamd.sock\": Permission denied (code 13)","level":2,"time":"2017-04-10T01:58:15+00:00","method":"POST","url":"\/index.php\/apps\/files\/ajax\/upload.php","user":"admin"}
    
  23. WEBサーバの実行権限に、Clamdの権限を付与します
  24. clamscan グループへ Nginxのアカウントを追加します
    Apache な人は、Nginx 部分を読みかえてください。

    cat /etc/group
    clamscan:x:989:
    

    Nginx アカウントの状態確認

    id nginx
    uid=996(nginx) gid=994(nginx) groups=994(nginx)
    

    ユーザ nginx をグループ clamscan に追加

    gpasswd -a nginx clamscan
    

    Nginx アカウントの状態確認

    id nginx
    uid=996(nginx) gid=994(nginx) groups=994(nginx),989(clamscan)
    
  25. 再度テストファイルをアップロードして正常にスキャンが行われれば完了です
  26. {"reqId":"kM1cZkCorCiKgtoCcJ9N","remoteAddr":"192.168.1.8","app":"files_antivirus","message":"Response :: stream: OK\n","level":0,"time":"2017-04-10T02:33:28+00:00","method":"POST","url":"\/index.php\/apps\/files\/ajax\/upload.php","user":"admin"}